Tôi đang sử dụng jboss 5.1.x, EJB3.0Giao dịch đang xen kẽ Thời gian chờ
Tôi có MDB lắng nghe hàng đợi JMS. khi MDB nhận một tin nhắn, nó sẽ gửi một thông điệp qua TCP tới một số modem. đôi khi Modem doesnt phản ứng khi máy chủ đang chờ đợi một câu trả lời:
byte[] byteData = receive(is);
coz tôi không thể thiết lập thời gian chờ trên InputStream.
vì vậy, nhờ vào vùng chứa EJB, thời gian chờ giao dịch (mặc định có sẵn) quay trở lại hoạt động và sau đó thử lại được thực hiện lại.
cơ chế này theo mặc định hoạt động tốt đối với tôi, vấn đề là:
Đôi khi các giao dịch không bao giờ hết thời gian, và sau một thời gian dài tôi nhận được sau msg trong giao diện điều khiển:
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
Bất kỳ ý tưởng gì vậy? và tại sao đôi khi nó hoạt động và đôi khi nó không thành công?
cảm ơn,
ray.
Làm thế nào tôi sẽ xử lý nó? Tôi muốn nó 'ngắt' luồng đang chạy. 10x – rayman
sử dụng cờ để biểu thị ngắt và dựa trên đó, luồng phải dừng tác vụ hiện đang thực thi của nó nếu nó được đặt. –
Có, nhưng vẫn Bạn nói rằng thời gian chờ giao dịch sẽ không thể timeout cũng bổ sung chủ đề đang chạy trong thread nó tự. Tôi muốn đạt được điều này, làm thế nào tôi có thể thực hiện điều đó? 10x. – rayman