web-dev-qa-db-ja.com

Webコンテナーの外部からJNDIデータソースを検索するにはどうすればよいですか?

次の環境をセットアップしています。

  • Java 1.5
  • Sun Application Server 8.2
  • Oracle 10 XE
  • ストラット2
  • Hibernate

アプリケーションサーバーによって提供されるJNDIデータソースを参照できるJavaクライアント(つまり、Webアプリケーションの外部))のコードをどのように書くことができるか知りたいです。

Sun Application Serverのポートはすべてデフォルトになっています。サーバー構成にjdbc/xxxxという名前のJNDIデータソースがありますが、WebアプリケーションのHibernate構成が代わりにJava:comp/env/jdbc/xxxxという名前を使用していることに気付きました。

これまでに見たほとんどの例には、次のようなコードが含まれています

Context ctx = new InitialContext();
ctx.lookup("jdbc/xxxx");

しかし、間違ったJNDI名を使用しているか、リスナーを正しく指すようにjndi.propertiesまたは他の構成ファイルを構成する必要があるようです。 jndi.propertiesが内部にあるSun Application Serverのappserv-rt.jarがありますが、役に立たないようです。

ここには同様の質問がありますが、コードはありません/ iBatisがJNDIデータソースを自動的に取得することを指します: 外部Webコンテナーからのデータソースへのアクセス(JNDIを介して)

20
masotime

私はこれとまったく同じ問題に行き詰まりました。小さなチュートリアルを書きました。基本的に、DataSourceオブジェクトの独自の実装を作成し、それらを独自のカスタム初期コンテキストに追加する必要があります。ここにソースの例があります:

アプリケーションサーバーのデータソースを使用するローカルでのBeanの実行

17
djsumdog

Simple-JNDIを試してください。これにより、JNDIサービスのインメモリ実装が提供され、JNDI環境にプロパティファイルで定義されたオブジェクトを入力できます。ファイルで構成されたデータソースまたは接続プールのロードもサポートされています。

接続プールを取得するには、次のようなファイルを作成する必要があります。

type=javax.sql.DataSource
driver=com.sybase.jdbc3.jdbc.SybDriver
pool=myDataSource
url=jdbc:sybase:Tds:servername:5000
user=user
password=password

アプリケーションでは、次の方法でプールにアクセスできます

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("path/to/your/connectionPool");

私は何年もの間、この目的でSimple-JNDIを使用してきました。しかし、それはもはや活発に開発されていません。共有コンテキスト(特にデータソースの使用)に関するいくつかの問題を見つけたので、元のプロジェクトを分岐していくつかの新しい機能を追加することにしました。現在、0.13.0があります。詳細は https://github.com/h-thurow/Simple-JNDI で確認できます。

2
Holger Thurow

一般的なJavaアプリケーションがコンテナの外で実行されている場合、毎日話していると、運が悪くなります。事実上、独自のJNDI実装を独自の構成接続で構成する必要があります。プールなど.

ただし、Java EE「スタンドアロン」アプリケーションを記述できます。これらは、Java EEアプリケーションクライアント内で実行されるアプリケーションです。基本的には、デプロイされるアプリケーションです。パッケージ化されていますが、Java EEコンテナによって提供されるランチャーを使用して実行されます。

アプリケーションクライアント環境内で実行する場合、アプリサーバーのすべてのリソース(接続プール、EJB、キューなど)は、コードがアプリサーバー内にデプロイされた場合と同じようにアプリで利用できます。

ここ は、Sun App Server 8.2のチュートリアルドキュメントです。これは、J2EE 1.4コンテナです。

可能であれば、Glassfish v2.1にアップグレードすることを強くお勧めします。これは、8.2の子孫であるため、アプリをそのまま正常にデプロイできる、よりモダンでより優れたオールアラウンドサーバーです。

1
Will Hartung

これは少し遅いかもしれませんが、私は Simple-JNDIライブラリ を長年使用してきました。必要なオプションがすべてあるかどうかはわかりませんが、コマンドラインユーティリティには十分です。

0
runningboffin

あなたが欲しいのは アプリケーションクライアント です

または、スタンドアロンクライアントからプレーンJDBC接続を確立する方が簡単です。ただし、クライアントで接続の詳細を構成する必要があり、アプリケーションサーバーの設定を再利用することはできません。

0
pitpod