Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa EJJB计时器事务-XA异常_Jpa_Ejb 3.0_Weblogic 10.x - Fatal编程技术网

Jpa EJJB计时器事务-XA异常

Jpa EJJB计时器事务-XA异常,jpa,ejb-3.0,weblogic-10.x,Jpa,Ejb 3.0,Weblogic 10.x,我使用的是EJB 3.0计时器。当调用超时方法时,我使用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

我使用的是EJB 3.0计时器。当调用超时方法时,我使用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()
方法


如果我遗漏了什么,请告诉我?

我也面临同样的问题。您需要将JPA实体操作保存在一个单独的会话bean中,这样它就可以工作了


我可以通过让计时器非事务性,让我的SessionBean创建一个新事务来实现这一点。这是一个解决方案。当然,如果您的外部事务回滚,计时器仍将被创建,因此您的超时方法将需要处理该场景(如果需要)。最好弄清楚如何为XA启用数据源。