Sto usando 5.1.x JBoss, EJB3.0transazione è alternata Timeout
Ho MDB che ascolta la coda JMS. quando MDB riceve un messaggio, invia un messaggio via TCP ad un modem. volte che pretende molto Modem risposta quando il server è in attesa di una risposta:
byte[] byteData = receive(is);
coz smusso impostare il timeout su InputStream.
quindi, grazie al contenitore EJB, il timeout della transazione (che è presente di default) ripristinando l'operazione e quindi un nuovo tentativo eseguito nuovamente.
questo meccanismo di default funziona bene per me, il problema è:
A volte la transazione non scaduta, e dopo tanto tempo ho il seguente msg nella 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
Qualsiasi idea cosa c'è che non va? e perché a volte funziona e a volte non lo fa?
grazie,
raggio.
Come dovrei gestire la cosa? Voglio che "interrompa" il thread attualmente in esecuzione. 10x – rayman
utilizzare un flag per indicare l'interruzione e in base a ciò, il thread deve interrompere l'attività attualmente in esecuzione se è impostato. –
Sì, ma ancora Si dice che il timeout della transazione non sarà in grado di timeout anche i thread aggiuntivi in esecuzione nel thread stesso. Voglio realizzare questo, come potrei implementarlo? 10x. – rayman