JNDI похож на карту на стероидах? Я использую ключ для поиска ссылок на объекты. Кроме того, что такое InitialContext? Кажется, я не понимаю.
Понимание JNDI
Ответ 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 файлы в качестве источника данных.
Привет