15

JavaSEアプリでJNDIを使用してデータソースを構成したいと思います。これを行うための最良の方法は何ですか?

これまでに、2つのプロジェクトに出くわしました。

  1. Apacheネーミング。プロジェクトページには、データソースを構成するための特定の例がありますが、プロジェクトは非常に古く、アクティブではなくなっているようです。
  2. JBossNS。を使用してローカルのみのJNDIを構成するのは簡単なようですLocalOnlyContextFactoryが、実際にデータソースを構成する方法に関するドキュメントは見つかりませんでした。

可能であれば、JTAトランザクションマネージャーを使用してデータソースを構成することもできます(JOTMを使用しますか?)。

4

4 に答える 4

10

なぜこれに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>
于 2009-10-23T20:00:41.943 に答える
4

これらのリファレンスはかなり古いものですが、jnpserver(JBossネーミングサービスプロバイダー)の使用に役立つ場合があります。

于 2009-10-23T20:17:50.380 に答える
3

スタンドアロンJNDIの非常に使いやすいソリューションはsimple-jndiです。これは、ネットワークサーバーではなくライブラリであるため、単一のJVM内でのみ必要な場合は魅力のように機能します。

于 2013-05-11T14:17:28.747 に答える
1

klenkes74によって参照されるSimple-JNDIバージョンは、現在活発に開発されていません。いくつかの問題が発生したため、フォークし、バグ修正を行い、いくつかの新機能を実装しました。依存性注入よりもサービスロケーターパターンを好むため、テストだけでなく本番環境でも古いバージョンをすでに使用しましたが、最近は後者の方が流行しています。

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を参照してください。

于 2017-06-24T11:29:21.050 に答える