2016-07-06 1 views
1

Mon scénario: une application Java EE qui appelle une méthode à partir d'un EJB, tous deux hébergés sur un serveur JBoss AS 7.1.1. Pendant les opérations d'insertion et de mise à jour dans une page CRUD, l'application JSF doit enregistrer ses propres données à l'aide de sa propre source de données et enregistrer d'autres données dans d'autres applications en appelant des méthodes EJB qui utiliseront d'autres sources de données. Les deux DataSources configurées comme utilisent JTA (Case à cocher JTA marquée dans les paramètres JBoss DataSource);Comment configurer correctement les transactions distribuées dans JBoss AS 7.1?

Seulement pendant mettre à jour les opérations, la tentative de sauvegarde de données déclenche une exception. Les dernières parties de la pile d'exception sont les suivantes:

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 connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnect[email protected] 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 

Lorsque je désactive JTA dans le DataSource EJB, le problème disparaît.

Quel est le problème avec mon environnement?

Merci d'avance!

Mise à jour 1

m'a demandé de donner plus d'informations, donc là il va.

Tel est le cas d'utilisation qui rend le problème se produise:

  1. utilisateur clique dans un lien sur l'écran pour le conduire/elle à une page d'édition
  2. Dans la page d'édition, l'utilisateur modifie les valeurs et clique sur le bouton enregistrer
  3. le bouton enregistrer appelle la méthode update() dans le bean géré qui sert la page
  4. la méthode de mise à jour commence une transaction et exécute deux autres méthodes: on agit sur la DS a déclaré pour l'application Web (pour sauver données locales), l'autre est un EJB méthode qui expose certaines fonctionnalités de une autre application (pour enregistrer les données dans le contexte de l'autre application)

Les deux sont sectionneurs chemin le même serveur de données et les applications sont hébergées dans la même instance JBoss.

La première méthode fonctionne correctement, la seconde produit l'erreur. Depuis qu'une exception est levée, la transaction entière est annulée et rien ne se passe réellement dans la base de données. À mon avis, il s'agit d'un cas simple d'intégration d'applications, où une application s'intègre à une autre en utilisant une technologie standard Java EE, qui est un appel EJB. J'espère que cela aidera à obtenir mon cas.

+0

D'où obtenez-vous la transaction à l'étape 4? –

Répondre

0

Je n'ai pas compris exactement à quoi ressemblait la séquence. Je suppose que votre application JSF utilise un EJB qui utilise une autre DS, non? Donc c'est la même application et le même serveur.

Si vous avez plus d'un DS, vous avez besoin d'une source de données xa, l'avez-vous eu? S'il vous plaît partager votre configuration DS et plus d'informations sur votre config/app et les avertissements dans votre logile (mieux est la séquence d'appel complète) si vous avez d'autres questions.