2013-09-25 7 views
0

У нас есть таймер, который запускает задание и выполняет некоторую обработку импорта/экспорта. Но при фиксации мы открываем сообщение об ошибке в заголовке. Мы пытались несколько решений уже:ARJUNA016053: Не удалось совершить транзакцию - таймер JavaEE6

1.) Создан 2 класс:

@Stateless 
public class MyBean { 
    @Inject 
    @JpaForJobs 
    private EntityManager em; 

    @Inject 
    private MyService1 service1; 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void migrate(...) { 
     service1.create(...); 
    } 
} 
@Startup 
@Singleton 
public class MyService1 implements Job { 
    @Resource 
    TimerService timerService; 

    @Inject 
    private MyBean myBean; 

    @Timeout 
    public void trigger(Timer timer) { 
     migrate(); 
    } 

    private void migrate() { 
     myBean.migrate(); 
    } 
} 

работы иногда, но когда отношения осложнится это потерпеть неудачу. Пример. У клиента есть родители, у которых есть кошки.

Я также попробовал боб удалось сделку, но такой же конец:

@Stateless 
@TransactionManagement(TransactionManagementType.BEAN) 
public class MyBean { 
    @Inject 
    @JpaForJobs 
    private EntityManager em; 

    @Inject 
    private MyService1 service1; 

    public void migrate(...) { 
     utx.begin(); 
     service1.create(...); 
     utx.commit(); 
    } 
} 
@Startup 
@Singleton 
public class MyService1 implements Job { 
    @Resource 
    TimerService timerService; 

    @Inject 
    private MyBean myBean; 

    @Timeout 
    public void trigger(Timer timer) { 
     migrate(); 
    } 

    private void migrate() { 
     myBean.migrate(); 
    } 
} 

Любая идея или предложения? Благодарю.

ответ

0

Оказывается, что подход 1 работает, и это только мне нужно заменить:

@TransactionAttribute (TransactionAttributeType.REQUIRED)

с

@TransactionAttribute (TransactionAttributeType.REQUIRES_NEW)

Также У меня возникла проблема с анализом xml-файлов. Остерегайтесь ленивых полей и BeanUtils.cloneBean.