java - EJB timer ignores TransactionTimeout -


i have ejb timer in ear, deployed on jboss 6.4. in 99% of cases timer works fine, takes bit long finish , throws persistenceexception: transaction rolled in different thread!.

i have found due transacion timeout value low. not want edit default value rather override method-specific timeout. solve split functionality 2 methods: 1 method annotated @timeout , 1 work.

here timer implememntation:

@singleton public class mytimer implements sometimerinterface {      @ejb     private somemanager mymanager;      @resource     private timerservice timerservice;      private timer timer;      @override     public void starttimer() {          // timer scheduled fire every 7th minute         scheduleexpression schedule = new scheduleexpression();         schedule = schedule.hour("*").minute("*/7").second("00");          timerconfig config = new timerconfig();         config.setpersistent(false);          timer = timerservice.createcalendartimer(schedule, config);     }      @timeout     @accesstimeout(value = 20, unit = timeunit.minutes)     public void handletimeout() {          workinnewthread();     }      @transactionattribute(transactionattributetype.requires_new)     @transactiontimeout(unit = timeunit.seconds, value = 900)     public void workinnewthread() {          // can take 1 sec 15 min.         list<object> objects = mymanager.getallthedatabaseobjects();     } } 

however, timer seems ignore transactiontimeout still times out after 5 minutes (default value). how can override default timeout make sure timer finishes job?

not sure whether correct. code call workinnewthread() @timeout method, there method cleanup() tx attribute.

i guess call methods in same bean @timeout. in case annotations, neither @txattribute nor txtimeout, take effect container not control internal method invocation. need use different ejb or self reference let controller work. other option annotate timeout method directly.


Comments