Подтвердить что ты не робот

Понимание JNDI

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

let talk code, класс, загружающий 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);
}

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

Connection conn = ds.getConnection();

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

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

Привет