La transaction est en alternance
Je suis à l'aide de jboss 5.1.x, EJB3.0
J'ai MDB qui est à l'écoute de file d'attente JMS. lorsque le MDB prendre un message, il envoi un msg via TCP de certains le modem.
parfois, ce Modem ne marche pas de réponse lorsque le serveur est en attente d'une réponse:
byte[] byteData = receive(is);
coz je ne peux pas régler timeout sur InputStream.
donc merci pour le conteneur d'EJB le délai d'expiration de transaction(qui est là par défaut) la restauration de l'opération, puis une nouvelle tentative de nouveau exécutée.
ce mécanisme par défaut fonctionne très bien pour moi, le problème est:
Parfois à la transaction, jamais dépassé, et après beaucoup de temps, j'ai le
msg dans la console:
15:18:22,578 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TransactionReaper_18] - TransactionReaper::check timeout for TX a6b2232:5f8:4d3591c6:76 in state RUN
15:18:22,578 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_58] - Abort of action id a6b2232:5f8:4d3591c6:76 invoked while multiple threads active within it.
15:18:22,578 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.CheckedAction_2] - CheckedAction::check - atomic action a6b2232:5f8:4d3591c6:76 aborting with 1 threads active!
15:18:22,578 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TransactionReaper_7] - TransactionReaper::doCancellations worker Thread[Thread-10,5,jboss] successfully canceled TX a6b2232:5f8:4d3591c6:76
Aucune idée de quel est le problème? et pourquoi parfois ça marche et parfois ça ne marche pas?
merci,
ray.
source d'informationauteur rayman
Vous devez vous connecter pour publier un commentaire.
JBossAS qui utilise le Arjuna du Gestionnaire de Transactions. Dans EJB3 intercepteur de la chaîne serait de commencer à dérouler et finalement frappé le gestionnaire de transactions intercepteurs dont c'est le travail pour annuler la transaction.
Pour MDB vous pouvez annote avec
@ActivationConfigProperty(propertyName="transactionTimeout" value="1500")
Pour d'autres haricots, vous pouvez avoir
@TransactionTimeout(1500)
au niveau de la classe ou au niveau de la méthode.Lorsque la transaction manager détecte que l'opération a expiré et puis quitte à partir un thread asynchrone (différent du thread en cours d'exécution dans la méthode), mais il n'envoie jamais une interruption pour le thread en cours d'exécution.
Donc : appelée alors que plusieurs threads actif au sein de il ... l'abandon avec 1 threads actifs!
Edit :
Il donnera la liste des autres threads actifs aussi comme Référence du Gestionnaire, Finaliseur, Répartiteur de Signal etc.