Понимание JNDI - PullRequest
       19

Понимание JNDI

22 голосов
/ 28 февраля 2011

JNDI - это как карта на стероидах, верно? Я использую ключ, чтобы найти ссылки на объекты. Кроме того, что такое InitialContext? Я, кажется, не понимаю идею.

Ответы [ 2 ]

33 голосов
/ 28 февраля 2011

Концептуально, JNDI похож на System.getProperties() на стероидах.

System.getProperties() позволяет передавать параметры String в ваш код из командной строки.Аналогично, JNDI позволяет вам конфигурировать произвольные объекты вне вашего кода (например, в файлах конфигурации сервера приложений) и затем использовать их в вашем коде.

Другими словами, это реализация Service Locatorшаблон : ваш код получает службы, настроенные средой, из центрального реестра.

Как обычно для сервисных локаторов, ваш код должен иметь некоторую точку входа для доступа к сервисному локатору.InitialContext является этой точкой входа: вы создаете InitialContext, а затем получаете необходимые услуги от JNDI с помощью lookup().

11 голосов
/ 28 февраля 2011

давайте поговорим о коде, класс, загружающий jndi, является одноэлементным, вы предоставите ему ключ к вашим ресурсам jndi. Ниже я загружаю источник данных (datasource = "JDBC / dummy").

try {
  Context initCtx = new InitialContext();
  Context envCtx = (Context) initCtx.lookup("jndicontext");
  ds = (DataSource) envCtx.lookup("JDBC/dummy");
} catch (Exception e) {
  log.error(e);
}

Исходный контекст возвращает мне ресурс как объект. Я мог бы загрузить боб таким же образом.

Connection conn = ds.getConnection();

Но какой в ​​этом смысл? Просто храните объекты для конкретной среды, не учитывая их тип. А потом меняем информацию на лету. Вы заметите, я не пишу логин / пароль.

В этом примере, в зависимости от текущей среды: - В производстве он возвращает соединение с базой данных. - В среде интеграции он возвращает соединение с другой базой данных - В процессе разработки он создает другую реализацию класса (фиктивные) и использует XML-файлы в качестве источника данных.

Привет

...