データベースに接続するためにJNDIの概念を実装しています。私は出発点を取得するためにグーグルで検索しましたが、取得できませんでした。
私がやりたいのは、データベースに接続するためにJNDIの概念を使用した単純なJavaスタンドアロンアプリケーションです。
私が持っているサンプルソースは次のとおりです。
DataSource dataSource = null;
Context context = null;
try {
context = new InitialContext();
dataSource = (DataSource) context.lookup("database_connection");
}
catch (NamingException e) {
System.out.println("Got naming exception, details are -> " + e.getMessage());
}
では、database_connectionをどこで定義しますか?それはxmlファイルで定義されていますか?もしそうなら、どこでそれを指定し、それのフォーマットは何ですか?
ポインタを提供できれば、それは素晴らしいことです。
ありがとう
質問と例の本当の違いは、スタンドアロンのJavaアプリケーションを使用していることです。かなり-ほとんどすべての例は、JavaEEアプリケーションコンテナ内で実行していることを前提としています。その場合、コンテナへのデータベース接続を定義し、JNDIを使用してデータソースを取得し、そこから接続を取得します。
JNDIルックアップを実行してデータソースを取得すると、JNDIフレームワークは初期コンテキストファクトリ(InitialContextFactoryを実装するクラス)を検索します。Java EEアプリケーションでは、コンテナがそれを提供します。スタンドアロンJavaアプリケーションでは、初期コンテキストはnullであり、それ以上のルックアップは正しく解決されません。
これを解決する方法の1つは、独自の初期コンテキストファクトリを作成することです。
public class MyContextFactory implements InitialContextFactory
起動時にそれをJNDIに挿入します。
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "mypackag.MyContextFactory");
次に、getInitialContext呼び出しから新しいObjectFactoryを返し、次にObjectFactoryを実装して、getConnection()呼び出しからDataSource(おそらくカスタム)を返します。
それはすべてうまくいくでしょうが、それはやり過ぎです。データソースを使用するよりも、通常のJDBC接続文字列アプローチを使用してアプリケーションで直接接続を取得する方が簡単です。または、Springのようなフレームワークを使用して挿入するか、データベース接続情報をコードから分離します(この場合、JNDIではなくSpring構成ファイルを直接使用します)。
カスタムコンテキストファクトリとデータソースアプローチの作成を推奨する理由の1つは、Java EEアプリ内とスタンドアロンアプリ内の両方で実行する共通のJPAコードがある場合です(それ以外の場合、同じコードを構成するのは簡単ではありません)両方を行うため)。それはあなたの場合のようには聞こえません。
つまり、スタンドアロンでJava EEコンテナを使用していないので、本当の答えは、ユースケースがデータソースに適していないということだと思います(Springのようなフレームワークを提供するフレームワークに移行しない限り)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加