Problem when destroying conversational SB
codest Jun 7, 2007 11:01 AMHi all,
with a certain component I always get the following exception, even though I followed all the guidance in http://wiki.jboss.org/wiki/Wiki.jsp?page=JbossTimeoutSettingForSeam.
Could not destroy component: interview javax.ejb.EJBNoSuchObjectException: Could not find Stateful bean: 3j001-6m3jlm-f2n4k957-1-f2nc99l9-2c at org.jboss.ejb3.cache.simple.SimpleStatefulCache.get(SimpleStatefulCache.java:268) at org.jboss.ejb3.stateful.StatefulRemoveInterceptor.removeSession(StatefulRemoveInterceptor.java:127) at org.jboss.ejb3.stateful.StatefulRemoveInterceptor.invoke(StatefulRemoveInterceptor.java:87) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:102) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateful.StatefulContainer.localInvoke(StatefulContainer.java:203) at org.jboss.ejb3.stateful.StatefulLocalProxy.invoke(StatefulLocalProxy.java:98) at $Proxy1051.destroy(Unknown Source)
A strange thing I noticed is, that also there exists only one interview component in conversation scope (checked via debug page), every log message appears two times:
16:38:46,827 INFO [InterviewAction] Creating class de.codest.easyCV.logic.InterviewAction - hashCode: 23232015 16:38:46,827 INFO [InterviewAction] Creating class de.codest.easyCV.logic.InterviewAction - hashCode: 23232015 ... 16:38:47,620 INFO [InterviewAction] Started interview. 16:38:47,620 INFO [InterviewAction] Started interview. ... 16:44:47,780 INFO [InterviewAction] Destroying class de.codest.easyCV.logic.InterviewAction - 6459176 16:44:47,780 INFO [InterviewAction] Destroying class de.codest.easyCV.logic.InterviewAction - 6459176 16:44:47,781 INFO [InterviewAction] EMERGENY SENDING profile to mail@somewhere.com 16:44:47,781 INFO [InterviewAction] EMERGENY SENDING profile to mail@somewhere.com 16:44:47,795 WARN [Contexts] Could not destroy component: interview javax.ejb.EJBNoSuchObjectException: Could not find Stateful bean: 3j001-6m3jlm-f2n4k957-1-f2nc99l9-2c at org.jboss.ejb3.cache.simple.SimpleStatefulCache.get(SimpleStatefulCache.java:268) ...
But the exception shows only once.
This is the bean code (excerpt):
@Stateful @Name("interview") @Scope(ScopeType.CONVERSATION) @Conversational(ifNotBegunOutcome="home") @CacheConfig(idleTimeoutSeconds=1800) public class InterviewAction implements Interview { ProfileInterface profile; @Create public void init() { log.info("Creating "+this.getClass()+" - "+this.hashCode()); } @Begin(ifOutcome="startInterview") public String startInterview() { .... log.info("Started interview."); state = Status.Interviewing; return "startInterview"; } @Remove @Destroy /** This method is used to send the input data (= profile) by mail to the user if the session should expire unexpectedly **/ public void destroy() { log.info("Destroying "+this.getClass()+" - "+this.hashCode()); // emergency sending of profile when destroyed from interview state if (isInterviewing()) { log.info("EMERGENY SENDING profile to "+getEmail()); // forced interrupt profile.interrupt(); sendProfileToUser(); } }
So there should be sent a mail, when the bean is destroyed from the "interviewing" state, but this doesn't happen (though it did already work sometimes).
If you need further information I'll be glad to give it to you. Thanks in advance for any comments and help.
Regards,
Jörg