1

インジェクションの概念と EJB での JNDI の適用に問題があります。助けてください。私はこれを学んでおり、@Resource および/または XML 構成を使用した JNDI ルックアップの手法を理解し、適用したいと思っています。JNDI ルックアップで初期パラメータが見つからないようです。先に進む前に、データソースの JNDI 名を手動で入力すると、すべてがうまく機能します。私がやろうとしているのは (再び演習として) @Resource または JNDI を使用して JNDI データソース名自体を取得し、データソースで JNDI ルックアップを実行することです。DataSource オブジェクトを直接注入できることはわかっていますが、String を注入できない場合は、これから始めなければなりません。

まず、ejb-jar.xml の重要な部分を次に示します。

<env-entry>
    <description>DataSource JNDI lookup name</description>
    <env-entry-name>datasourceName</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>myDataSource</env-entry-value>
</env-entry>

@Resource を使用したインジェクションに関しては、EJB で次のフィールドを試しました。

@Resource(name = "datasourceName")
String dsName;

また、mappedName とルックアップ (JNDI ルックアップを使用) を試しましたが、何も入ってきません。次に、次のように JNDI ルックアップを試しました。

 // get JNDI name from environment entry in EJB Context and use to lookup DataSource
Context context = new InitialContext();
String dsName = (String) context.lookup("java:comp/env/SRS/datasourceName");

(アプリケーションの名前は SRS です) - これにより、JNDI ルックアップで何も見つからなかったという NamingException が発生します。次のルックアップを試しました。

String datasourceName = (String) context.lookup("java:comp/env/SRS/Status/datasourceName"); // name of EJB is Status
String datasourceName = (String) context.lookup("datasourceName");
String datasourceName = (String) context.lookup("SRS/datasourceName");           
String datasourceName = (String) context.lookup("SRS/Status/datasourceName");           
String datasourceName = (String) context.lookup("java:global/SRS/datasourceName");
String datasourceName = (String) context.lookup("java:global/SRS/Status/datasourceName");

ここでの私の最初の投稿なので、適切に質問したことを願っています。助けてくれてありがとう!

4

1 に答える 1