2013-01-21 66 views
6

पर 5MINUTES के भीतर लॉक प्राप्त नहीं कर सका। मेरे पास jboss 6.1 पर चल रहा एक एप्लिकेशन है जो स्टार्टअप पर बहुत से डायनामिक टाइमर को परिभाषित करता है (उदाहरण के लिए हर मिनट कुछ करना) सूचनाओं के आधार पर पहले से ही जारी रहना डेटाबेस। टाइमर बनाई प्रोग्राम के रूप में इन जानकारियां पर आधारित हैं:टाइमर के लिए टाइमआउट का आह्वान करने में त्रुटि - EJB 3 timerservice

TimerConfig timerConfig = new TimerConfig(); 
timerConfig.setInfo(info); 
timerConfig.setPersistent(false); 
Timer timer = timerService.createCalendarTimer(scheduleExpression, 
      timerConfig); 

आज मैंने पाया है कि "हर मिनट" बनाया टाइमर अब और काम नहीं कर रहा था। कल लॉग जाँच हो रही है, मैं इस अजीब त्रुटि (नीचे पूर्ण Strack ट्रेस)

Error invoking timeout for timer: [id=32b0902e-d1ee-4090-9938-98349a20340d timedObjectId=jboss.j2ee:ear=myear.ear,jar=myjar.jar,name=AppScheduler,service=EJB3 auto-timer?:false persistent?:false 
[email protected]36a060 initialExpiration=Thu Jan 17 00:00:00 GMT-02:00 2013 intervalDuration(in milli sec)=0 nextExpiration=Sun Jan 20 06:06:00 GMT-02:00 2013 timerState=IN_TIMEOUT: 
javax.ejb.ConcurrentAccessTimeoutException: EJB 3.1 PFD2 4.8.5.5.1 
concurrent access timeout on [advisedMethod=public void my.app.AppScheduler.process(javax.ejb.Timer), unadvisedMethod=public void my.app.AppScheduler.process(javax.ejb.Timer), metadata=null, [email protected], arguments=[Ljava.lang.Object;@3f661630] 
- could not obtain lock within 5MINUTES 
    at org.jboss.ejb3.concurrency.aop.interceptor.ContainerManagedConcurrencyInterceptor.invoke(ContainerManagedConcurrencyInterceptor.java:176) [:1.0.0-alpha-4] 
    at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) [:1.7.21] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.tx.StatelessBMTInterceptor.handleInvocation(StatelessBMTInterceptor.java:100) [:1.0.4] 
    at org.jboss.ejb3.tx.BMTInterceptor.invoke(BMTInterceptor.java:57) [:1.0.4] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.tx2.aop.NoOpInterceptor.invoke(NoOpInterceptor.java:45) [:0.0.2] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) [:1.0.0.GA] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41) [:1.7.21] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67) [:1.7.21] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.core.context.CurrentInvocationContextInterceptor.invoke(CurrentInvocationContextInterceptor.java:47) [:1.7.21] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67) [:1.0.1] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.interceptor.EJB3TCCLInterceptor.invoke(EJB3TCCLInterceptor.java:86) [:1.7.21] 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.2.GA] 
    at org.jboss.ejb3.singleton.aop.impl.AOPBasedInterceptorRegistry.intercept(AOPBasedInterceptorRegistry.java:111) [:1.0.2] 
    at org.jboss.ejb3.singleton.impl.container.SingletonContainer.invoke(SingletonContainer.java:206) [:1.0.2] 
    at org.jboss.ejb3.singleton.aop.impl.AOPBasedSingletonContainer.callTimeout(AOPBasedSingletonContainer.java:888) [:1.0.2] 
    at org.jboss.ejb3.singleton.aop.impl.AOPBasedSingletonContainer.callTimeout(AOPBasedSingletonContainer.java:837) [:1.0.2] 
    at org.jboss.ejb3.timerservice.mk2.task.CalendarTimerTask.callTimeout(CalendarTimerTask.java:84) [:1.0.0-alpha-13] 
    at org.jboss.ejb3.timerservice.mk2.task.TimerTask.run(TimerTask.java:127) [:1.0.0-alpha-13] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [:1.6.0_24] 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [:1.6.0_24] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) [:1.6.0_24] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) [:1.6.0_24] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) [:1.6.0_24] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_24] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_24] 
    at java.lang.Thread.run(Thread.java:662) [:1.6.0_24] 

पाया मुख्य समस्या एक भी निष्पादन पर त्रुटि नहीं है, लेकिन इस समस्या के बाद टाइमर काम करना बंद कि और केवल तभी फिर से चलने शुरू होता है jboss पुनरारंभ किया गया है। कोई भी इस व्यवहार को रोकने के लिए एक रास्ता जानता है? अपवाद में 5 मिनट का टाइमआउट दिया गया है लेकिन मुझे नहीं पता कि यह कहां बदलना है।

अग्रिम धन्यवाद।

उत्तर

14

यहाँ विनिर्देश इस अपवाद

4.8.5.5.1 समवर्ती पहुँच टाइमआउट

एक समवर्ती पहुँच प्रयास है कि तुरंत उचित ताला नहीं प्राप्त कर सकते हैं अवरुद्ध है जब तक यह आगे कर सकते हैं के बारे में कहते हैं है प्रगति। @AccessTimeout का प्रयोग समय प्रयास से पहले अवरुद्ध होने से पहले निर्दिष्ट करने के लिए किया जाता है। एक्सेस टाइमआउट केवल कंटेनर प्रबंधित समेकन के साथ सिंगलटन बीन पर concurrency ताले के लिए योग्य विधियों पर लागू होते हैं। यदि कोई एक्सेस प्रयास समय समाप्त हो जाता है, तो कंटेनर क्लाइंट को javax.ejb.ConcurrentAccessTimeoutException फेंकता है। @AccessTimeout किसी व्यापार विधि या बीन क्लास (या सुपर-क्लास) पर निर्दिष्ट किया जा सकता है। एक कक्षा पर निर्दिष्ट @AccessTimeout उस कक्षा के सभी व्यावसायिक तरीकों तक पहुंच टाइमआउट लागू करता है। यदि @AccessTimeout क्लास और उस वर्ग की व्यावसायिक विधि दोनों पर निर्दिष्ट है, तो विधि-स्तर एनोटेशन प्राथमिकता लेता है। एक @AccessTimeout मान -1 का संकेत देता है कि प्रगति को आगे बढ़ाए जाने तक ग्राहक अनुरोध अनिश्चित काल तक अवरुद्ध हो जाएगा। 0 का @AccessTimeout मान इंगित करता है कि समवर्ती पहुंच की अनुमति नहीं है। एक javax.ejb.ConcurrentAccessException में 0 परिणाम की एक टाइमआउट मान के साथ तरीकों पर पहुंच का प्रयास किया

तो, मैं सिर्फ अपनी समस्या को हल करने के लिए (5 मिनट डिफ़ॉल्ट समय विक्रेता विशिष्ट है) पहुँच टाइमआउट शामिल थे।

@Timeout 
@AccessTimeout(value = 20, unit = TimeUnit.MINUTES) 
public void process(Timer timer) { 
//code here 
} 
+0

प्रिय @ जॉन्फोर्नारी कृपया मेरे प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/42242037/parameterize-ejb-scheduler-with-schedule-expression –

0

मेरे मामले में समस्या अंतिम अचानक बंद होने से संबंधित थी। मैंने टाइमर को wildfly/standalone/data/timer-service-data के तहत हटा दिया और फिर से तैनात किया।