これと同じことはリバティで素晴らしい作品が、私はEAR> WAR> EJBプロジェクト構造を使用してアプリケーションを持っているのWebSphere 8.0 ...子EJBプロジェクトからデータソースを見つけるにはどうしたらいいですか?
を使用して、この作品 を行う必要があります。 アイデアは、 WARを介してRESTfulトリガーを使用してバッチプロセスを開始することです。このWARは、EJBのロジックを使用してタスクを実行します。 EJBプロジェクトに パーシスタンスヘルパーがあり、これは EntityManagerで注入され、すべてが満足です。
JPA私は注入する必要があるデータとボリュームがあまりにも遅いので、 この プロセスでデータをインポートするためにJDBCバッチを使用することにしました。したがって、DataSourceが必要です。サーバーコンソール (persistence.xmlはJPA用にこれを使用しています)で定義されていますが、web.xml とibm-web-bnd.xmlに定義しましたが、それでも見つからないようです。さらに、 WAR内のクラスでJNDIツリーを吐き出した場合、それは java:comp/env/jdbc/MyDBの下にありますが、EJBのクラスからは別の ツリーです。
のweb.xml:
<resource-ref>
<res-ref-name>jdbc/MyDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
<mapped-name>jdbc/MyDB</mapped-name>
</resource-ref>
IBM-ウェブ-bnd.xml:
<resource-ref name="jdbc/MyDB" binding-name="jdbc/MyDB" />
MyPersistence.java:
@Resource(name="jdbc/MyDB")
private DataSource datasource;
私は、データソースを渡すために、追加の何かが必要ですEJBレベルまでダウンしますか? EntityManagerがそれを使用しているので、それは奇妙に思えます。
いつもどんな助けもありがとうございます!
ポスト回答の編集:
これは私がガスの答えごとに、IBM-EJB-JAR-bnd.xmlに追加するために必要なエントリです:
<session name="MyPersistence" simple-binding-name="com.travelers.bi.errordb.persistence.MyPersistence">
<resource-ref name="jdbc/MyDB" binding-name="jdbc/MyDB" />
</session>
どのデータソースを使用しますか?なぜあなたは 'jdbc/MyDB'のバインディングを表示したのですが、' jdbc/ErrorDB'のリソースインジェクションを表示していますか –
@aguibert - タイプミスのため – Mike
あなたの問題を正しく理解していれば分かりません(NameNotFound JNDIエラー)。 Datasourceの '@ Resource'アノテーションをEJBクラスに追加し(MyPersistenceクラスに追加したのと同じ方法)、ibm-webと同様のリソース参照バインディングを持つibm-ejb-jar-bnd.xmlファイルを作成します-bnd.xmlファイル。 – Gas