首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pojo中的Java-ee事务

pojo中的Java-ee事务
EN

Stack Overflow用户
提问于 2017-05-27 21:06:42
回答 2查看 620关注 0票数 0

有没有可能在不使用ejb的情况下在pojo中使用java-ee进行事务处理?代码看起来会是什么样子?我只将pojos用于我的业务流程,而不是创建任何ejb。这样做明智吗?

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2017-05-28 05:37:22

如果您使用的是JavaEE7,任何托管bean (或bean方法)都可以使用@Transactional注释让容器管理事务。因此,这将适用于WebServlet、任何注入的bean/pojo以及EJB。下面是一个JAX-RS控制器bean的示例:

代码语言:javascript
复制
@Path("/debug")
public class DebugController {

    @PersistenceContext
    EntityManager entityManager;

    @GET
    @Transactional
    public String insertPerson() {

        Person person = new Person();
        person.setName("peter");
        entityManager.persist(person);
        return "OK";

    }
}

在这种情况下,容器将创建和管理JPA的EntityManager持久化操作所需的事务,以便在数据库中存储Person

您还可以@Inject UserTransaction (或在JNDI中查找它)并自己管理事务的作用域,但是这需要您的事务资源显式地加入事务,在这种情况下,示例将如下所示:

代码语言:javascript
复制
@Path("/debug")
public class DebugController {

    @PersistenceContext
    EntityManager entityManager;

    @Inject
    UserTransaction utx;

    @GET
    public String insertPerson() throws Exception {

        utx.begin();
        try {
            entityManager.joinTransaction();
            Person person = new Person();
            person.setName("peter");
            entityManager.persist(person);
            utx.commit();
        } catch (RuntimeException e) {
            utx.rollback();
            throw e;
        }
        return "OK";

    }
}

注意异常处理的不同。这是因为当抛出RuntimeException时,容器将自动回滚使用@Transactional创建的事务(根据JTA规范的3.7节),如果您直接使用UserTransaction,这是您的责任。

票数 2
EN

Stack Overflow用户

发布于 2017-05-28 00:13:59

可以在任何“容器托管”的类中使用Java事务,这允许您查找或注入对象。

我认为使用Java事务的最直接的示例是在servlet中使用JNDI查找:

代码语言:javascript
复制
public class MyServlet extends HttpServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    UserTransaction tran = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
    tran.begin();
    // do some stuff
    tran.commit();
  }
}

这基本上就是EJB及其事务注释在幕后发生的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44217246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档