My scenary:JBoss AS 7.1.1サーバーでホストされているEJBからメソッドを呼び出すJava EEアプリケーション。 CRUDページの挿入操作や更新操作では、JSFアプリケーションは独自のDataSourceを使用して独自のデータを保存し、他のDataSourceを使用するEJBメソッドを呼び出すことによって他のアプリケーションに他のデータを保存する必要があります。 に設定された両方のデータソースは、JTA(JBossのDataSourceパラメータにマークされたJTAチェックボックス)を使用します。JBoss AS 7.1で分散トランザクションを正しく設定する方法は?
の更新操作の間だけ、データを保存しようとすると例外がスローされます。例外スタックの最後の部分は次のとおりです。
Caused by: java.sql.SQLException: javax.resource.ResourceException: IJ000457: Unchecked throwable in managedConnectionReconnected() cl=org[email protected]14729cfa[state=NORMAL managed conn[email protected]6a370d1a connection handles=0 lastUse=1467805740289 trackByTx=false [email protected]7a5d9cca pool internal [email protected][pool=CartaoDS] [email protected][connectionListener=14729cfa connectionManager=4b45c7aa warned=false currentXid=null] txSync=null]
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:147)
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:281)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
... 175 more
Caused by: javax.resource.ResourceException: IJ000457: Unchecked throwable in managedConnectionReconnected() cl=org[email protected]14729cfa[state=NORMAL managed conn[email protected]6a370d1a connection handles=0 lastUse=1467805740289 trackByTx=false [email protected]7a5d9cca pool internal [email protected][pool=CartaoDS] [email protected][connectionListener=14729cfa connectionManager=4b45c7aa warned=false currentXid=null] txSync=null]
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.reconnectManagedConnection(AbstractConnectionManager.java:604)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:467)
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:139)
... 178 more
Caused by: javax.resource.ResourceException: IJ000461: Could not enlist in transaction on entering meta-aware object
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionReconnected(TxConnectionManagerImpl.java:474)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.reconnectManagedConnection(AbstractConnectionManager.java:599)
... 180 more
Caused by: javax.transaction.SystemException: IJ000356: Failed to enlist: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 0:ffff0a0a0546:2fd05d09:577134fa:61c7a status: ActionStatus.ABORT_ONLY >
at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener$TransactionSynchronization.checkEnlisted(TxConnectionListener.java:552)
at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener.enlist(TxConnectionListener.java:282)
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionReconnected(TxConnectionManagerImpl.java:467)
... 181 more
EJB DataSourceでJTAを無効にすると、問題は解決します。
私の環境に何が問題になっていますか?
ありがとうございます!
更新1
これ以上の情報を提供するように求められました。
これは、問題が発生することができユースケースである:画面上のリンクで
- ユーザーのクリックを編集ページで編集ページ
- に彼/彼女をリードして、ユーザーが値を変更し、保存するために(Webアプリケーションのための宣言DSの上で1つの行為:ボタン
- に保存ボタンを保存するには、更新メソッドはトランザクションを開始ページ
- を提供しており、他の二つの方法を実行している管理対象Beanに
update()
メソッドを呼び出すクリックローカルデータ)、その他はEJB 別アプリケーションの一部の機能を公開する方法は、
両方DSSが同じデータ・サーバパスであり、両方のアプリケーションが同じJBossインスタンスでホストされている(他のアプリケーションのコンテキストでデータを保存します)。
最初の方法は正常に動作し、2番目の方法でエラーが発生します。例外がスローされるので、トランザクション全体がロールバックされ、データベース内で実際に何も起こりません。
私の理解では、これはアプリケーションインテグレーションの簡単なケースです.1つのアプリケーションがJava EE標準テクノロジ(EJBコール)を使用して別のアプリケーションに統合されています。
私はこれが私のケースを得るのに役立つことを願っています。
ここで、手順4でトランザクションを取得していますか? –