2013-05-13 32 views
0

我正在嘗試使用MDB(onMessage)來運行長時間運行的JDBC sql查詢並將輸出導出到磁盤。JBoss 4.2.2 MDB長時間運行OnMesage

我正在用onMessage運行超時,因爲確認發生在成功完成onMessage之後。理想情況下,我想立即確認消息,因爲處理工作(JDBC查詢導出)有其自己的重試/錯誤處理內置。

是否有一種方法與MDB onMessage,這將允許此即時確認或一些在Java EE空間內處理長時間運行的進程的異步運行的更好方法。

+0

這個問題提到JDBC和SQL,但它有什麼用Microsoft Access? (「mdb」標記當前被定義爲「ms-access」的別名,並自動轉換。) – 2013-05-13 17:31:32

+0

我的錯誤是,mdb用於消息驅動Bean。我會嘗試更新這些標籤。謝謝! – 2013-05-13 18:27:29

回答

0

,您可以手動確認該消息使用TransactionManagementType.BEAN:

@MessageDriven 
@TransactionManagement(TransactionManagementType.BEAN) 
public class TestMDB implements MessageListener { 
    @Resource 
    UserTransaction tx; 

    @Override 
    public void onMessage(Message msg) { 
     String txt=""; 
     try { 
      tx.begin();  
      TextMessage txtMsg = (TextMessage) msg; 
      txt = txtMsg.getText(); 
      tx.commit(); 
     } catch (Exception e) { 
      try { 
       tx.rollback(); 
      } catch (Exception e1) { 
       //.... 
      } 
     } 
     // call some EJB transactional method 
     // or 
     try { 
      tx.begin(); 
      //do some db stuff 
      tx.commit(); 
     }catch(Exception e){ 
      //... 
     } 
    } 
}