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

Зачем использовать JNDI для источников данных

Может кто-нибудь объяснить, почему JNDI должен быть предпочтительным способом предоставления таких услуг, как база данных /jms?

В сообщениях, на которых я натыкаюсь, говорят о том, что вам не нужно загружать определенный диспетчер драйверов, улучшать его из пула соединений и т.д., но это легко достижимо, указав диспетчер драйверов в файле свойств и используя отражение.

Пул соединений также может быть осуществлен путем проводки в правильной реализации в приложение bean через spring или иначе.

Итак, почему лучше использовать JNDI?

4b9b3361

Ответ 1

JNDI действительно сияет, когда вам нужно переместить приложение между средами: развитие в интеграцию для тестирования на производство. Если вы настроите каждый сервер приложений на использование одного и того же имени JNDI, вы можете иметь разные базы данных в каждой среде и не менять код. Вы просто забираете файл WAR и переносите его в новую среду.

Вот некоторые другие предположения, которые имеют решающее значение для оценки этого ответа:

  • У меня нет доступа к серверам, на которых весь код развертывается, за исключением доступа только для чтения к журналам.
  • Лицо, которое пишет и упаковывает код, - это не тот человек, который настраивает и управляет сервером.
  • Как только файл WAR начнет свою поездку в PROD, он не может быть изменен снова, не возвращаясь к началу. Любое тестирование, выполненное QA на тестовом сервере, должно быть переделано, если WAR изменена.

Возможно, вы не видите этого преимущества, потому что вы одинокий разработчик, который пишет код на локальном рабочем столе и развертывает право на производство.

Ответ 2

Я думаю, что предпочтительным механизмом является тот, который предпочитает человек, выполняющий администратор и конфигурацию. Как отметил duffymo, важно, чтобы конфигурация была внешней по отношению к вашему развертываемому артефакту, но в остальном я бы сказал, что все идет. Если ваш системный администратор предпочитает использовать графический интерфейс для настройки записей JDNI, охладите. Если он/она предпочитает редактировать файлы свойств с помощью cssh и vi, тоже остывайте. Если вы несете ответственность за разработку и настройку/развертывание приложения, то это в значительной степени ваш звонок. Лично мне нравится поддерживать как можно большую реализацию внутри моего артефакта, а это значит, что мой источник данных и драйверы тоже живут там.

Если вы спрашиваете о технических преимуществах JNDI по сравнению с альтернативами, я не уверен, что они есть, но вы можете уточнить свой вопрос.

Ответ 3

Как упоминалось другими JNDI по большей части, используется для поиска местоположения службы, но главным образом для ресурсов, подобных БД.

Самое раздражающее, что Java LDAP API также является JNDI API. При работе с LDAP абстракции очень запутывают. JNDI также имеет тот недостаток, что иногда является единственной точкой отказа.

Вы можете легко выполнить большую часть того, что делает JNDI, используя псевдонимы имен хостов. Это делает псевдоним, который указывает MYRESOURCE на 127.0.0.1 в вашем /etc/hosts (или где бы он ни находился для вашего env). Затем в вашем приложении config используйте MYRESOURCE в качестве имени хоста (например, в URL-адресе jdbc).

Затем, когда вы перемещаете свое приложение в производство, просто изменяйте файл production /etc/hosts, чтобы указать MYRESOURCE на производственный ресурс/услугу (например, сервер базы данных prod).

Вышеупомянутый способ представляет собой более переносимый меньший каталог имен имен, который будет работать на других языках (ruby, python). Он также будет работать с вещами, которые обычно не выполняются с JNDI, такими как службы REST. Единственное, что раздражает то, что вам придется обновлять файлы ваших серверов, но это может быть автоматизировано с помощью сценариев SSH.

Ответ 4

Реальное преимущество JNDI над файлами свойств возникает при развертывании в кластерной среде. Использование файлов свойств оставляет возможность некоторых экземпляров сервера иметь другое значение. При использовании JNDI одно и то же значение выводится на все кластерные серверы контроллером домена, устраняя необходимость скопировать тот же файл свойств на все серверы (и, возможно, перезапустить сервер/приложение).

Ответ 5

Другая область, где JNDI помогает:

Он абстрагирует поиск ресурсов. Обычно конфигурация JNDI хранится в XML файле на сервере приложений, но это не обязательно. Конфигурация может быть, например, сохранена на сервере LDAP, чтобы упростить ее централизованно.

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

Другими словами, JNDI в основном сияет для сложных сценариев развертывания, например:

  • много серверов приложений (возможно, кластеризованных)
  • много разных приложений
  • централизованная конфигурация
  • различные этапы сервера (тест, производство)

Вначале это может показаться излишним, но очень полезно в сценариях тезисов. Конечно, некоторые преимущества применимы даже для небольших развертываний, таких как стандартизованная конфигурация соединений с БД.