Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在EJB中提交事务?_Java_Transactions_Ejb - Fatal编程技术网

Java 如何在EJB中提交事务?

Java 如何在EJB中提交事务?,java,transactions,ejb,Java,Transactions,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++) {

我有下面的场景

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();
}

您可以请求UserTransaction,看看是否有灵感。

如果您想要容器管理的事务,您可以使用@TransactionaAttribute和值将
saveObj
方法注释为:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void saveObj(SomeObject obj)
{
    ...
}

这将确保每次调用
saveObj
方法时都会启动一个新事务。与
somejbmethod
关联的现有事务将在每次调用
saveObj
方法之前暂停。为
saveObj
方法启动的每个事务都将在返回时提交,因此每个实体都将在其自己的事务中在数据库中更新。

您所说的“仍然不工作”是什么意思?事务创建是否在每次调用或其他操作时失败?此外,考虑允许JTA协调员进行更精细的调试;您将能够确定是否正在启动新事务。我的意思是,不会在每次退出
saveObj
时更新数据库。但是,在app server日志中,已打印更新sql查询。您使用的JPA提供程序是什么?如果您使用EclipseLink,您是否将提供程序与集成?我使用oc4j 10.1.3.4作为EJB容器,并将其捆绑的toplink作为JPA实现。我可以想到一个可能的原因-是否有一个
EJB jar.xml
orion EJB jar.xml
文件,其条目将覆盖注释?通常,容器使用注释中声明的属性,除非有描述这些值的部署描述符。发生冲突时,部署描述符中的值优先。