2016-10-25 29 views
0

WebSphere Liberty Profile 8.5.5で動作するJEE7アプリケーションを作成しています。 JPA(WLPのEclipselinkで実装されている)を使用しています。複数の永続性ユニット用にEntityManagerを取得する方法

同じ 'persistence.xml'ファイルに複数の永続性ユニットがあります。同じクラスのユニットのうちの2つにアクセスする必要もあります。私はこのエラーを取り除くにはどうすればよい

@PersistenceContext(unitName = "wwer-list") 
private EntityManager entityManagerWwerList; 
@PersistenceContext(unitName = "main-dashboard") 
private EntityManager entityManagerMainDashboard; 

E WTRN0062E: An illegal attempt to use multiple resources that have only one-phase capability has occurred within a global transaction. 

:私は2番目のEntityManagerを使用しようとすると

私はランタイムエラーを取得していますか?

また、私が使用しているテーブルはすべて、読書のためだけに必要です。では、JPAへの読み取り専用アクセスのみを指定するにはどうすればよいですか。

+0

これはエラーメッセージから得られます。 http://www-01.ibm.com/support/docview.wss?uid=swg21247192私が理解していることは、分散トランザクションが2つの永続ユニット間で動作する必要があるということです。 – kjsebastian

+0

あなたのpersistence.xmlはどのように見えるのですか?Bitronixトランザクションマネージャのようなものを使用しなければならないかもしれません。 –

+0

<永続ユニット名= "WWERリスト"> com.ibm.youribm.services.expensesaggregator.ejb.dao \t JDBC/WWERリスト .jpa.entity。WwerEntity <永続ユニット名= "メインダッシュボード"> \t \t JDBC /メインダッシュボード \t \t com.ibm.youribm.services.expensesaggregator.ejb.dao.jpa.entity.DashboardEntity ... – Westy

答えて

0

この問題は、ConnectionPoolDataSourceなどを使用して(1段階コミット)として設定されたデータソースの1つがXADataSourceで設定されているためにプロンプ​​トが表示されます。

同じデータソース設定を続行する場合は、サーバー構成を「ヒューリスティックな危険を受け入れる」に更新する必要があります。

管理コンソールで、EARをクリックし、[ヒューリスティックハザードを受け入れる]チェックボックスをオンにします。サーバーを再起動します。

最後の参加者サポートを有効にするこのリンクも役立ちます。 http://www.ibm.com/support/knowledgecenter/SSAW57_7.0.0/com.ibm.websphere.nd.doc/info/ae/webui_pme/ui/ueac_laoextensionsettings.html

+0

ありがとうございます。しかし、私はXADataSourceを意図的に設定していませんでした。私は、データソースを読む必要があります、更新されることはありません。 – Westy

0

私はあなたのpersistence.xmlとserver.xmlを設定せずに確実に伝えることはできませんが、それはあなたの<persistence-unit>設定をバックアップ<dataSource>要素のように見えるが可能XAではありません。

は、デフォルトでは、<dataSource>は、あなたがのXADataSourceの実装を提供していないJDBCドライバを使用している場合javax.sql.XADataSource(したがって可能XA)、しかし、リバティは、シンプルなDataSource実装を選択しますする必要があります(つまりjavax.sql.ConnectionPoolDataSourceまたはプレーンjavax.sql.DataSource) 。

グローバル取引は、UserTransaction.begin()を発行し、commit()またはrollback()を発行するまで続きます。あなたはグローバルトランザクションに入ることができる他の方法もあります。

読み取り専用アクセスが必要なため、データソースをXAに変換することはおそらく過剰です。代わりに、方程式からグローバルトランザクションを排除しようとします。グローバルトランザクションを排除できない場合は、server.xmlで次のようにXADataSourceを指定できます。

<dataSource type="javax.sql.XADataSource" ...> 
    <jdbcDriver .../> 
    <properties .../> 
</dataSource> 
+0

私はグローバルトランザクションを使用していません。少なくとも、目的に沿ったものではありません。これは純粋に読み取り専用のサービスです。では、どうすればグローバルな取引を取り除くことができますか? XAは過剰殺人のように聞こえますが、それは物事を遅くするようなものです。 – Westy

関連する問題