如何在EJB中提交事务?
我有以下场景,
public void someEjbMethod1() { for (int i=0; i=10; i++) { em.merge(arr[i]); em.flush(); } }
我需要分别合并( arr[i]
)的每个对象。 因为上面的代码将提交函数末尾的所有arr[i]
实例。
我想做以下事情:
public void someEjbMethod1() { for (int i=0; i=10; i++) { saveObj(arr[i]); } } // should I use a transaction attribute here?? public void saveObj(SomeObject obj) { em.merge(arr[i]); em.flush(); }
如果需要容器管理的事务,可以使用值为TransactionAttributeType.REQUIRES_NEW的@TransactionAttribute来将saveObj
方法注释为:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void saveObj(SomeObject obj) { ... }
这将确保每次调用saveObj
方法时都会启动一个新事务。 在每次调用saveObj
方法之前,将暂停与someEjbMethod
关联的现有事务。 为saveObj
方法启动的每个事务都将在返回时提交,因此每个实体都将在其自己的事务中在数据库中更新。
您可以请求UserTransaction,看看这里有一些灵感。
- 在Java类中注入EJB时出现NullPointerException
- multithreading事务在持久化实体中通过wildfly挂起到postgresql
- 如何从客户端创建远程会话EJB
- 在EJB 3中使用客户端jar和设计模式
- ejb查找失败,出现NamingException
- javax.security.sasl.SaslException:Authentic从远程客户端连接到Jboss 7服务器时失败
- EJB客户端如何在没有url的情况下找到EJB服务器?
- Java EE 6:如何从无状态会话Bean调用有状态会话Bean?
- 如何从同一GlassFish Server上的其他应用程序注入EJB?