After all...I found a possibillity to solve this problem...Here comes a 
question for the developers:

The error is thrown in Timerservicebean. First, the EJB Timer becomes cancled 
in 'cancelTimersByName'. Afterwards method  'deleteTimersForProcessInstance' is 
called and while executing TimerInfo timerInfo = (TimerInfo) 
ejbTimer.getInfo(); an error is thrown (in weblogic not in jboss), because 
there is no timer object for operation left. 

I don't understand this behaviour...so I insert a try...catch block in the 
second method and all works fine.

Can somebody explain it to me?

Here are the methods (with my 'correction')
  
  | public void cancelTimersByName(String timerName, Token token) {  
  |     // TODO make the scanning of timers for cancellation optional by only 
deleting the timerjobs in the db.
  |   // of course, the corresponding ejb timer notifications have to be 
ignored. 
  | 
  | log.debug("cancelling timers with name "+timerName+" from the ejb timer 
service");
  | 
  |     TimerService timerService = sessionContext.getTimerService();
  | 
  |   Iterator iter = timerService.getTimers().iterator();
  | 
  |   while (iter.hasNext()) {
  |       javax.ejb.Timer ejbTimer = (javax.ejb.Timer) iter.next();
  |     if (ejbTimer.getInfo() instanceof TimerInfo) {
  |       TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
  |       if (timerInfo.matchesName(timerName, token)) {
  |               ejbTimer.cancel();
  |       }
  |     }
  |   }       
  | }
  | 
 


  | public void deleteTimersForProcessInstance(ProcessInstance processInstance) 
{
  | 
  | // TODO make the scanning of timers for cancellation optional by only 
deleting the timerjobs in the db.
  | // of course, the corresponding ejb timer notifications have to be ignored. 
  | 
  |     log.debug("deleting timers for process instance "+processInstance+" 
from the ejb timer service");         
  |   TimerService timerService = sessionContext.getTimerService();    
  |   Iterator iter = timerService.getTimers().iterator();
  |  
  |   while (iter.hasNext()) {      
  |     javax.ejb.Timer ejbTimer = (javax.ejb.Timer) iter.next();
  |     try {
  |             if (ejbTimer.getInfo() instanceof TimerInfo) {                  
  
  |             TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();           
   
  |         if (timerInfo.matchesProcessInstance(processInstance)) {            
    
  |             ejbTimer.cancel();
  |         }
  |       }
  |     } catch (Exception e) {
  |       System.out.println("CATCH!");
  |     }
  | }
  | 




View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4060585#4060585

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4060585
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to