Что такое глобальное имя JNDI и почему оно отличается между серверами приложений?

Я изучаю EJB 3 из книги EJB в действии, и в этой книге в главе 5 обсуждается контекст именования среды (ENC). Это говорит это:

Если вы знаете, как работают ссылки JNDI в EJB 2, вы знакомы с контекстом именования среды (ENC). ENC позволяет переносить приложение без необходимости зависеть от глобальных имен JNDI. Глобальные имена JNDI для ресурсов различаются в разных реализациях сервера приложений, и ENC позволяет использовать местоположение JNDI, начинающееся с java:comp/env/, вместо жесткого кодирования действительного глобального имени JNDI. EJB 3 по существу предполагает, что все имена JNDI, используемые в коде, являются локальными ссылками и автоматически добавляет имена с префиксом java:comp/env/.

Я не понимаю, что подразумевается под глобальным именем JNDI? Почему оно должно быть разным на разных серверах приложений?

Я помечаю вопрос как EJB2 и EJB 3, так как цитата ссылается на обе версии. Пожалуйста, не стесняйтесь редактировать, если вы думаете иначе.

1 ответ

Решение

Глобальное имя JNDI использует имя в контексте JNDI по умолчанию. Например, на сервере приложений WebSphere удаленные EJB-компоненты по умолчанию связаны с ejb/<app>/<module>/<bean>#<interface>, Если вы жестко закодируете эту строку поиска в своем приложении, то приложение не будет переносимым на другие серверы приложений (которые могут использовать другую схему для имени по умолчанию) или даже на тот же WebSphere Application Server, если имя целевого приложения или модуля изменяется.

Решение в EE для вашего приложения объявить ссылку на EJB, которая будет в java:comp/env контекст с именем, которое вы выбираете. Когда установщик устанавливает ваше приложение на сервере, он может связать java:comp/env имя для глобального имени JNDI, подходящего для среды. Этот же шаблон фактически используется всеми ресурсами EE (источниками данных, значениями конфигурации String/int/boolean и т. Д.), И при правильном использовании он является одним из преимуществ платформы EE.

Я не могу сказать, что пытается сказать вышеприведенный отрывок, без дополнительного контекста. Возможно, это относится к EJBContext.lookup метод, который является эффективным способом поиска относительно java:comp/env,

В заключение отметим, что EJB 3.1 определяет стандартное расположение java:global/<app>/<module>/<bean>!<interface> для привязок EJB. Несмотря на это, все же рекомендуется использовать ссылки EJB при поиске между приложениями (или даже между модулями, если вы не полностью контролируете приложение, которое будет содержать клиент EJB).

Другие вопросы по тегам