Именование и каталог (JNDI) - каковы подводные камни для использования JNDI - PullRequest
4 голосов
/ 04 декабря 2009

Именование и каталог (JNDI) - каковы подводные камни для использования JNDI

Ответы [ 2 ]

5 голосов
/ 04 декабря 2009

Вопрос немного расплывчат, но вот несколько моментов, которые следует рассмотреть, и это относится к JNDI.

  1. преимущество JNDI заключается в том, что создание объекта отделено от поиска объекта
  2. прямой поиск в JDNI затрудняет тестирование, предпочитайте инъекцию, если это возможно
  3. если вы все еще используете прямой поиск, вам нужно будет смоделировать JNDI либо самостоятельно, либо с помощью файловой системы реализация
  4. Остерегайтесь проблемы загрузчика классов, если вы используете его в приложении. Сервер
  5. параметры, используемые в ObjectFactory , несколько неясны, если вы планируете реализовать собственную фабрику объектов (контекст, окружение и т. Д.)
  6. каждая JVM имеет свой собственный JNDI. Когда клиент ищет удаленный EJB, используется специальная фабрика, которая возвращает удаленную ссылку на EJB, но сам JNDI является локальным. (Обратите внимание, что существует кластерная реализация JNDI, но у меня нет опыта работы с ней).
  7. Наименование EJB будет зависеть от приложения. Сервер
  8. Глобальный и локальный JNDI всегда является источником путаницы
  9. Я никогда не видел, чтобы кто-нибудь искал каталог JNDI, только пример поиска

Я использовал JDNI для реализации пользовательских ресурсов в Glassfish, и это было нормально. Но я обнаружил, что JNDI - частый источник путаницы.

5 голосов
/ 04 декабря 2009

Вот моя тройка:

  1. Отсутствие документации
  2. нерешительный API
  3. Не нашел никого, кто бы использовал его, кроме серверов приложений

Существует несколько руководств по использованию JNDI, но в большинстве случаев вы застреваете, когда что-то идет не так. Реализация также не одобряет полезные сообщения об ошибках. Если ключ не может быть найден, вы просто получаете самое внутреннее имя ключа - путь, по которому ведет к ключу, отсутствует.

Нет также способа навигации по иерархии JNDI. Какой смысл иметь иерархию с родителями и потомками, когда вы не можете перемещаться по ней?

А что насчет java:comp/env? Почему это там? Когда я могу опустить это? Когда я должен использовать это? Кто-нибудь когда-нибудь добавлял дерево, которое не начинается с java:?

...