2015-06-18 65 views
0

EJB組件上是否有超時設置?EJB組件上是否有任何超時設置?

在這個EJB組件中,有一個運行sql超過30分鐘的代碼。 因此,超時是觸發器,每個sql語句都回滾。

我已經將JPA超時設置爲1小時,但似乎在EJB中還有另外的設置。

Tqs。 吉米

+0

你是如何設置JPA超時的?在Jboss中,你可以[以其特定的方式]設置它(https://developer.jboss.org/wiki/TransactionTimeout)。 –

+0

你使用了哪個應用程序服務器? –

+0

即時通訊使用weblogic,我已經將JPA超時在weblogic中設置爲一個小時。但是,該錯誤是從EJB組件拋出的。 –

回答

0

由於EJB 3.1這是可以實現與@Asyncrhonous(http://docs.oracle.com/javaee/7/api/javax/ejb/Asynchronous.html

@Asynchronous 
public Future<ResultObject> longRunningMethod() { 

} 

然後你就可以用

Future<ResultObject> result = ejb.longRunningMethod(); 
result.get(15, TimeUnit.SECONDS); 

注意,對於longRunningMethod默認的交易模式將REQUIRED_NEW叫它。這可能會讓事情變得棘手。

除此之外,所有容器都提供了設置事務超時的方法。但這並不如預期的那樣。該方法不會返回,它只是在超時持續時間後被標記爲失敗,並且在方法完成後引發事務超時異常,並且不會在超過超時後立即引發。

通常,如果您的數據庫事務運行時間超過30分鐘。和ejb方法不是要走的路。這看起來像一個批處理過程。

+0

真的沒辦法?也許把註釋或XML放在某個地方。 –

+0

不是我所知道的。 – rangalo

+0

但我們的解決方案似乎不能增加超時設置。 –

相關問題