zoukankan      html  css  js  c++  java
  • Transactional ejb 事务陷阱

    对应ejb,默认是对整个类使用事务。所以所有方法都开启事务。

    而对于用TransactionAttribute注释来引用容器管理的事务,只能在第一级的方法中使用。对应类中的方法再调用其它类中方法,注释事务就不起作用了。

    代码示例如下:

    在一个没有事务的类中调用:

    @TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
    @Stateless

    public class MyTask{

    @Inject Task t;

    t.doTask();

    }

    @TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
    @Stateless
    public class Task {

    public void doTask(){

    job();

    }

    @TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRED)

    public void job(){

    //db insert operation ....

    }

    }

    这个调用将会抛出:

    ERROR [org.jboss.as.ejb3.invocation] (Batch Thread - 9) WFLYEJB0034: EJB Invocation failed on component PeekCompute for method public void com.italktv.colnv.stat.task.PeekCompute.start(java.lang.String): javax.ejb.EJBException: javax.persistence.TransactionRequiredException: Executing an update/delete query
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInNoTx(CMTTxInterceptor.java:213)

    但是,如果MyTask里面直接调用 t.job(),那么是成功的。

  • 相关阅读:
    【转】JSP三种页面跳转方式
    我要从头做起
    转载:用 Tomcat 和 Eclipse 开发 Web 应用程序
    html的style属性
    Java连接oracle数据库
    tomcat遇到的问题(总结)
    ceshi
    今天要小结一下
    argument.callee.caller.arguments[0]与window.event
    JavaScript事件冒泡简介及应用
  • 原文地址:https://www.cnblogs.com/bigben0123/p/7133339.html
Copyright © 2011-2022 走看看