インジェクションの概念と 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");
ここでの私の最初の投稿なので、適切に質問したことを願っています。助けてくれてありがとう!