首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有长操作的托管CDI事务

具有长操作的托管CDI事务
EN

Stack Overflow用户
提问于 2015-03-21 08:42:01
回答 1查看 404关注 0票数 0

假设我有一个CDI需要

  1. 加载一些JPA实体
  2. 使用该JPA实体执行长IO操作(即。调用Web服务)
  3. 更新一些JPA实体的结果为-2-

如果我想在IO操作运行时避免长事务,那么最好的模式是什么?我知道我可以在-2中使用@Transactional(Transactional.TxType.REQUIRES_NEW),但对于我的下一个用户来说,在-1中打开的交易只会暂停。

直到知道我对非容器管理的事务使用了旧的JBoss 4之前,我经常这样做:

  1. 创建entityManager而不打开新事务
  2. 加载JPA实体(没有打开事务)
  3. 执行IO操作(即调用外部Webservice)
  4. 打开事务,更新jpa实体,关闭事务

我知道这种模式可能有一些不相关的数据,因为您更新了在事务之外获得的数据,但是在某些情况下它是可以的。

有什么模式可以模仿旧的非容器管理事务的管理方式。如果不管理分离的实例是可能的话?

在某些情况下,编辑来自@Alexander Langer响应是一个很好的选择。但如果有可能的话,我也想知道一种可以替代的办法,不需要工作。因为point -2- (长IO操作)只能是对外部WS的简单调用,以满足请求。

通常情况下,在这上面持有一笔交易没有任何问题。但是,如果由于某种原因,外部WS无法正常工作,并且需要大量时间来响应,那么如果事务开始累积,这将是一个大问题。事实上,这可能是一个问题,一个简单的事实,即不需要事务并从池中保存数据库连接的EntityManager开放端。

我知道存在超时,但总的来说,我想知道一种可用的模式,以减少简单情况下的事务时间。或者知道它是否简单,一个反模式的EE7,如果不涉及批处理作业。

EN

回答 1

Stack Overflow用户

发布于 2015-03-22 10:11:55

看看Java 7中引入的Java批处理,这正是您想要的。

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

https://stackoverflow.com/questions/29180812

复制
相关文章

相似问题

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