Вне контейнера источник данных JNDI - PullRequest
15 голосов
/ 23 октября 2009

Я хотел бы настроить источник данных с использованием JNDI в приложении Java SE. Каков наилучший способ сделать это?

Пока я встречал 2 проекта:

  1. Apache Naming . На странице проекта есть конкретный пример для настройки источника данных, но похоже, что проект очень старый и больше не активен.
  2. JBossNS . Похоже, что легко настроить локальный JNDI с использованием LocalOnlyContextFactory, но я не нашел никаких документов о том, как на самом деле настроить источник данных.

Если возможно, я бы также хотел настроить источник данных с помощью менеджера транзакций JTA (используя JOTM?).

Ответы [ 4 ]

10 голосов
/ 24 октября 2009

Почему вы используете JNDI для этого? Это не значит, что это плохое решение, если у вас есть провайдер, но есть альтернативы, такие как внедрение зависимостей (IoC: через Spring или Guice ).

Доступ к данным Spring JDBC описан здесь . Самое замечательное то, что вы можете использовать Spring для добавления DataSource в ваш код:

<bean class="com.my.Persister">
    <property name="dataSource" ref="dataSource" />
</bean>

Источник данных может быть определен с использованием JNDI-поиска:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" /> 

В тестовой среде вы можете напрямую добавить источник данных:

<bean id="dataSource" class="apache.db.PoolingDataSource">
    <!-- config goes here -->
</bean>
4 голосов
/ 24 октября 2009

Эти ссылки довольно старые, но могут помочь в использовании jnpserver (провайдера JBoss Naming Service):

3 голосов
/ 11 мая 2013

Очень простое в использовании решение для автономного JNDI: simple-jndi . Он работает как чудо, пока он вам нужен только в одной JVM, поскольку это библиотека без сетевого сервера.

1 голос
/ 24 июня 2017

Версия Simple-JNDI, на которую ссылается klenkes74, больше не находится в активной разработке. Поскольку я столкнулся с некоторыми проблемами, я разобрал это, сделал несколько исправлений ошибок и реализовал некоторые новые функции. Я уже использовал старую версию не только для тестирования, но и в производстве, потому что я предпочитаю шаблон Service Locator вместо Dependency Injection, хотя последняя в настоящее время более модна.

Вы можете легко использовать Simple-JNDI для декларативного определения источника данных или пула соединений и привязки его к контексту JNDI.

Определите файл jndi.properties в вашем пути к классам:

java.naming.factory.initial=org.osjava.sj.SimpleContextFactory
org.osjava.sj.root=[absolute_or_relative_path_to_a_property_file]

Файл свойств выглядит так:

type=javax.sql.DataSource
driver=org.gjt.mm.mysql.Driver
url=jdbc:mysql://localhost/testdb
user=testuser
password=testing

Теперь вы можете получить доступ к своему источнику данных из своего кода следующим образом:

  InitialContext ctxt = new InitialContext();
  DataSource ds = (DataSource) ctxt.lookup("name_of_your_datasource");

Для получения дополнительной информации см. https://github.com/h-thurow/Simple-JNDI

...