2011-08-09 46 views
2

我使用EJB 3.0 timer.When我超時方法被調用,我使用JPA在table.I的一個插入一條記錄使用JPA來持久data.I定義的堅持代碼無狀態會話bean,並調用本地接口我超時method.I得到下面的異常裏面當線程出來超時方法:EJJB定時器交易-XA異常

javax.transaction.xa.XAException: JDBC driver does not support XA, hence cannot be a participant in two-phase commit. 
    To force this participation, set the GlobalTransactionsProtocol attribute to LoggingLastResource (recommended) or EmulateTwoPhaseCommit for the Data Source 

我們的數據庫不支持XA transaction.We使用WL 10.3.1 。這裏是我的代碼:

@EJB 
private MyejbLocal myejbLocal 

@Timeout 
public void callEjb(timer) { 
    try { 
    myejbLocal .store(); 

    } catch (EntityExistsException e) { 
     e.getMessage(); 

    } catch (Exception ex) { 
     ex.getCause(); 
    } 
} 

這是我的實現:

@Override 
public void Store() { 
    try { 
     Mytable mytable= new Mytable (new Date()); 
     persist(mytable); 

    } catch (EntityExistsException e) { 
     e.getMessage(); 

    } catch (Exception ex) { 
     ex.getCause(); 
    } 

} 

我不叫flush()方法。

請讓我知道如果我錯過了任何?

+0

我能夠通過具有定時器非事務性和有我sesssionBean創建一個新的交易得到這個工作。 – user874722

+0

這是一個解決方案。當然,如果你的外部事務回滾時,計時器仍然會被創建的,因此超時方法將需要處理那種情況下(如有必要)。最好找出如何爲XA啓用數據源。 –

回答