У меня есть объект планировщика для выполнения некоторых задач.Выглядит это так
@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.
У меня нет идей относительно того, какие настройки времени ожидания вызывают это.
Любая помощь будет оценена.Спасибо.