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)