繁体   English   中英

XA数据源不创建事务

[英]XA Datasource does not create a transaction

我在Wildfly 8.2中有一个XA数据源设置。 一切正常,但是当我打电话时:

sql.query("LOCK TABLE table_name IN EXCLUSIVE MODE").execute();

我得到一个异常,表明Wildfly 尚未创建事务:

org.postgresql.util.PSQLException:错误:LOCK TABLE只能在事务块中使用

如果我在锁定查询周围使用BEGINCOMMIT手动创建事务,那么一切都会按预期进行-但我希望Wildfly自动为我执行此操作。

Wildfly为什么不自动创建交易,我需要怎么做才能解决该问题?


作为参考,该代码在以下方法中调用:

@RequestScoped
@Path("abc")
public class Controller {

@PUT
public Response m(Object data) {
  //HERE
}

如果希望Wildfly为您创建事务,请使用ejb Bean。例如,注入@Stateless会话Bean应该可以工作(因为您使用的是RequestScoped,而无状态会话Bean具有相似的生命周期)

默认情况下,无状态ejb的每种方法都会为您创建一个事务,或者如果客户端已经具有当前事务,它将使用它。

代码示例:

@RequestScoped
@Path("abc")
public class Controller {

    @EJB
    private YourStatelessEJB statelessBean;

    @PUT
    public Response m(Object data) {
      //HERE
      statelessBean.doSomething(data)
}

@Stateless
@LocalBean
public class YourStatelessEJB {

    @PersistenceContext
    private EntityManager em;

    public YourStatelessEJB() {

    }

    public void doSomething(Object data) {
        // here you already have a transaction, created by the ejbcontainer
        ...
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM