如何在EJB中提交事务?

时间:2011-06-26 12:14:01

标签: 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++)
    {
        saveObj(arr[i]);
    }
}

// should I use a transaction attribute here??
public void saveObj(SomeObject obj)
{
    em.merge(arr[i]);
    em.flush();
}

2 个答案:

答案 0 :(得分:4)

如果您想要容器管理的事务,可以使用值为TransactionAttributeType.REQUIRES_NEW的@TransactionAttribute来注释saveObj方法:

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

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

答案 1 :(得分:1)

您可以请求UserTransaction,看看here以获得灵感。