You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by "Donatas Ciuksys (JIRA)" <ji...@apache.org> on 2014/02/14 13:01:22 UTC
[jira] [Created] (TOMEE-1122) @Timeout & @TA(NOT_SUPPORTED) methods
in @Singleton beans run with transactional context
Donatas Ciuksys created TOMEE-1122:
--------------------------------------
Summary: @Timeout & @TA(NOT_SUPPORTED) methods in @Singleton beans run with transactional context
Key: TOMEE-1122
URL: https://issues.apache.org/jira/browse/TOMEE-1122
Project: TomEE
Issue Type: Bug
Affects Versions: 1.6.0
Environment: Windows 7 x64, jdk1.6.0_45 64 bits
Reporter: Donatas Ciuksys
This component:
@Singleton
@Startup
public class SendSubscriptionsTimer {
@Inject
private Logger logger;
@Resource
private TimerService timerService;
@PostConstruct
private void systemStartup() {
ScheduleExpression schedule = new ScheduleExpression().second("0").minute("*/1").hour("*");
TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);
timerService.createCalendarTimer(schedule, timerConfig);
}
@Resource
private TransactionSynchronizationRegistry tx;
@Timeout
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
private void timerFired() {
logger.info("TIMER START");
logger.info("Transaction: {}", tx.getTransactionKey().toString());
}
}
logs:
INFO 2014-02-14 13:46:00,025 TIMER START
INFO 2014-02-14 13:46:00,026 Transaction: [Xid:globalId=5000000047544d4944000000000000000000000000000000000000000000000000000,length=64,branchId=0000000000000000000000000000000000000000000000000000000000000000,length=64]
Additionally, if this timerFired method performs some lengthy task (in my case duration is 30 minutes), I get this:
2014-02-14 06.22.41 org.apache.openejb.core.timer.EjbTimerServiceImpl ejbTimeout
WARNING: Exception occured while completing container transaction
javax.transaction.RollbackException: Unable to commit: transaction marked for rollback
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:272)
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
at org.apache.openejb.core.timer.EjbTimerServiceImpl.ejbTimeout(EjbTimerServiceImpl.java:801)
at org.apache.openejb.core.timer.EjbTimeoutJob.execute(EjbTimeoutJob.java:39)
at org.quartz.core.JobRunShell.run(JobRunShell.java:207)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.Exception: Transaction has timed out
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:266)
... 7 more
As a result, the @Timeout method gets called the second time (per EJB spec: if exception is thrown, server must retry at least once).
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)