2011-08-09 37 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启用数据源。 –

回答