2016-10-05 7 views
0

これと同じことはリバティで素晴らしい作品が、私は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> 
+0

どのデータソースを使用しますか?なぜあなたは 'jdbc/MyDB'のバインディングを表示したのですが、' jdbc/ErrorDB'のリソースインジェクションを表示していますか –

+0

@aguibert - タイプミスのため – Mike

+1

あなたの問題を正しく理解していれば分かりません(NameNotFound JNDIエラー)。 Datasourceの '@ Resource'アノテーションをEJBクラスに追加し(MyPersistenceクラスに追加したのと同じ方法)、ibm-webと同様のリソース参照バインディングを持つibm-ejb-jar-bnd.xmlファイルを作成します-bnd.xmlファイル。 – Gas

答えて

1

@Resource注釈を追加します。 EJBクラスにDatasourceを追加し(MyPersistenceクラスに追加したのと同じ方法)、ibm-web-bnd.xmlファイルと同様のリソース参照バインディングを持つibm-ejb-jar-bnd.xmlファイルを作成します。

違いは、ibm-web-bnd.xmlファイルはサーブレットなどのWebモジュールで使用されるリソース用です。Java EE 7から、WebモジュールにEJBを埋め込むことができますが、依然として独自の注釈を使用します/参照のためのデプロイメント記述子。なぜ、EJBのための別個のバインディングファイルがあるのか​​。

関連する問題