Долгосрочный планировщик генерирует исключение при доступе к объекту jpa / ejb - PullRequest
1 голос
/ 25 сентября 2019

У меня есть объект планировщика для выполнения некоторых задач.Выглядит это так

@Singleton
public class BackgroundScheduler
{
    @EJB(beanName = "myPersistenceService")
    private PersistenceService dbService;   //persistence object to do some db inserts


    //runs every 30 minutes 
    @Schedule(hour="*", minute="*/30", second="0", persistent=false)
    public void BackgroundJob()
    {
        logger.debug("Waking up to do to chores");
        DoChores();
    }

    private void DoChores()
    {
        entityObj entity;
        //do some stuff here
        doStuff();

        //write to db
        dbService.writeStuff(entity);
    }
}

Это прекрасно работает, если doStuff () выполняется за 5 минут.Когда doStuff () занимает больше этого, я получаю исключение в dbService.writeStuff (entity)

[9/24/19 20:35:09:993 EDT] 000000b6 BusinessExcep E   CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "writeStuff" on bean "BeanId(MYAPPEJB.jar#myPersistenceService, null)". Exception data: javax.persistence.TransactionRequiredException: No active transaction for PuId=MYAPPEJB.jar#APPCMN
    at com.ibm.ws.jpa.management.JPATxEntityManager.getEMInvocationInfo(JPATxEntityManager.java:233)
    at com.ibm.ws.jpa.management.JPATxEntityManager.getEMInvocationInfo(JPATxEntityManager.java:191)
    at com.ibm.ws.jpa.management.JPAEntityManager.persist(JPAEntityManager.java:143)

Я пытался @TransactionAttribute (TransactionAttributeType.NOT_SUPPORTED) на обоих (BackgroundScheduler и myPersistenceService).Я установил «Общее время жизни транзакции» (серверы приложений <> служба транзакций) на 0. Я также попытался установить время ожидания пула соединений на 0.

У меня нет идей относительно того, какие настройки времени ожидания вызывают это.

Любая помощь будет оценена.Спасибо.

1 Ответ

1 голос
/ 25 сентября 2019

Когда вы устанавливаете «общее время ожидания транзакции» на 0, оно затем переходит к «максимальному времени ожидания транзакции», которое по умолчанию составляет 300 секунд или 5 минут.См. Эту документацию .Попробуйте увеличить это значение.

...