我正在使用EJB 3.0计时器。当我的Timeout方法被调用时,我使用JPA在其中一个表中插入一条记录。我使用JPA来持久保存数据。我在无状态会话Bean中定义了持久化代码并调用了我的超时方法中的本地接口。当线程超出超时方法时,我得到以下异常:
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事务。我们使用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 :(得分:1)
我也面临同样的问题。您需要将JPA实体操作保存在单独的会话bean中,它才能正常工作。
http://prasunejohn.blogspot.in/2014/02/understanding-ejb-timer-service-31.html