Transactions EJB事务问题

Transactions EJB事务问题,transactions,jpa-2.0,ejb-3.1,Transactions,Jpa 2.0,Ejb 3.1,我有一个EJB,其目的是通过创建丢失的用户或更新具有相同id的现有用户,将用户从另一个系统复制到我的系统。使用三种方法: @Schedule(second = "0", minute = "0", hour = "0", persistent = false) @TransactionAttribute(TransactionAttributeType.SUPPORTS) public void timer(){ updateUserDB(); // Some other stu

我有一个EJB,其目的是通过创建丢失的用户或更新具有相同id的现有用户,将用户从另一个系统复制到我的系统。使用三种方法:

@Schedule(second = "0", minute = "0", hour = "0", persistent = false)
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public void timer(){
    updateUserDB();
    // Some other stuff
}

@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public void updateUserDB(boolean delta) {
    // Find users in external system
    for(every user in the external system) {
        createUser(externalUser);
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void createUser(User externalUser) {
    try{
        em.persist(user);
        em.flush();
        return;
    }catch(Exception e){} // Logs
    em.clear(); // Make sure the user is removed from the persistence context (or it will try to add it again if an error occured at the next flush
    context.setRollbackOnly(); // Rollback if error occured
我正在寻找的场景是持久化所有用户,如果发生错误,我希望记录此操作并回滚单个持久化,然后继续对其余用户进行操作。因此需要在createUser上创建新的。换句话说,启动的事务总数应该是x,其中x是用户数

问题

EJB文档只涉及被调用的方法是否应该启动事务,但我应该如何注释调用的客户机方法;计时器和updateUserDB是否正确?NOT_SUPPORTS和SUPPORTS导致ejb在到达createUser内部的em.persistuser时抛出TransactionRequiredException,我认为这没有意义,因为当从SUPPORTS方法调用createUser时,应该允许createUser启动新事务。如果我用REQUIRED注释调用方法,则根本不会持久化任何用户,回滚似乎会影响更大的事务,而不是每个用户的小事务

如何对这三种方法进行注释以获得所需的效果

编辑 将两个调用方法都设置为Required会使JTA不会抛出异常,但由于某种原因,每次都会回滚事务,即使我删除了context.setRollbackOnly