3 Replies Latest reply on Sep 25, 2006 9:24 AM by pmuir

    Beginners Problem: Stateful component was removed...

    martin_g

      Hello,
      I currently evaluate SEAM. I startet with the reading the docs and trying he
      booking and dvdstore examples.
      After that I startet with my own small demo app.
      I developed a simple Entity-Bean and two SFSBs. The first with a pageflow to insert an Entity, the second load the values in a form to update/modify the Entity.
      The SFBS with the pageflow to create a new Entity works fine.
      But the second to load a created Entity to a Webform and update it does not!
      When I select the Entity from the list the begin() Method of the second pageflow is called but never reaches the selectSkill Method...

      The server.log shows that the editSkill component first created and then immidiatly removed??
      -->Stateful component was removed: editSkill

      I think it is a stupid beginners error but I can't figure it out...
      I hope somebody can give me a hint!

      Here is the stacktrace from the server.log

      2006-09-22 11:10:16,177 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
      2006-09-22 11:10:16,177 DEBUG [org.hibernate.jdbc.JDBCContext] successfully registered Synchronization
      2006-09-22 11:10:16,177 DEBUG [org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor] ++++ LongLivedSessionPropagationInterceptor
      2006-09-22 11:10:16,177 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
      2006-09-22 11:10:16,177 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Transaction already joined
      2006-09-22 11:10:16,177 DEBUG [org.jboss.seam.contexts.Contexts] found in session context: skillList
      2006-09-22 11:10:16,177 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@18b492, cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader@4301c9{ url=null ,addedOrder=0}
      2006-09-22 11:10:16,177 INFO [STDOUT] -------------------------------
      2006-09-22 11:10:16,177 INFO [STDOUT] ---> start pageflow EditSkill
      2006-09-22 11:10:16,177 INFO [STDOUT] -------------------------------
      2006-09-22 11:10:16,177 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@18b492, cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader@12a375b{ url=null ,addedOrder=0}
      2006-09-22 11:10:16,177 DEBUG [org.jboss.seam.interceptors.RemoveInterceptor] Stateful component was removed: editSkill
      2006-09-22 11:10:16,192 ERROR [STDERR] java.lang.RuntimeException: org.hibernate.TransactionException: Could not register synchronization
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulBeanContext.remove(StatefulBeanContext.java:273)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.ejb3.AbstractPool.remove(AbstractPool.java:171)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.ejb3.cache.simple.SimpleStatefulCache.remove(SimpleStatefulCache.java:299)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulInstanceInterceptor.invoke(StatefulInstanceInterceptor.java:89)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      2006-09-22 11:10:16,192 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
      2006-09-22 11:10:16,208 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulContainer.localInvoke(StatefulContainer.java:188)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulLocalProxy.invoke(StatefulLocalProxy.java:98)
      2006-09-22 11:10:16,223 ERROR [STDERR] at $Proxy104.begin(Unknown Source)
      2006-09-22 11:10:16,223 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      2006-09-22 11:10:16,223 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      2006-09-22 11:10:16,223 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      2006-09-22 11:10:16,223 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.util.Reflections.invoke(Reflections.java:13)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:32)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.Component.callComponentMethod(Component.java:1334)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.Component.callCreateMethod(Component.java:1322)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.Component.newInstance(Component.java:1312)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.Component.getInstance(Component.java:1263)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.Component.getInstance(Component.java:1246)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.jsf.SeamVariableResolver.resolveVariable(SeamVariableResolver.java:44)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.el.ValueBindingImpl$ELVariableResolver.resolveVariable(ValueBindingImpl.java:569)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.el.ValueBindingImpl.resolveToBaseAndProperty(ValueBindingImpl.java:450)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.el.MethodBindingImpl.resolveToBaseAndProperty(MethodBindingImpl.java:180)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:114)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.core.Pages.callAction(Pages.java:212)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.jsf.AbstractSeamPhaseListener.callPageActions(AbstractSeamPhaseListener.java:127)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.jsf.AbstractSeamPhaseListener.beforeRender(AbstractSeamPhaseListener.java:98)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:50)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener.beforePhase(SeamExtendedManagedPersistencePhaseListener.java:38)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.lifecycle.LifecycleImpl.informPhaseListenersBefore(LifecycleImpl.java:520)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:342)
      2006-09-22 11:10:16,223 ERROR [STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
      2006-09-22 11:10:16,223 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
      2006-09-22 11:10:16,223 ERROR [STDERR] Caused by: org.hibernate.TransactionException: Could not register synchronization
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.hibernate.transaction.CMTTransaction.registerSynchronization(CMTTransaction.java:159)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:59)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulBeanContext.closeExtendedPCs(StatefulBeanContext.java:284)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulBeanContext.remove(StatefulBeanContext.java:268)
      2006-09-22 11:10:16,223 ERROR [STDERR] ... 65 more
      2006-09-22 11:10:16,223 ERROR [STDERR] Caused by: javax.transaction.RollbackException: Already marked for rollback TransactionImpl:XidImpl[FormatId=257, GlobalId=korkng/35, BranchQual=, localId=35]
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.jboss.tm.TransactionImpl.registerSynchronization(TransactionImpl.java:635)
      2006-09-22 11:10:16,223 ERROR [STDERR] at org.hibernate.transaction.CMTTransaction.registerSynchronization(CMTTransaction.java:156)
      2006-09-22 11:10:16,223 ERROR [STDERR] ... 68 more
      2006-09-22 11:10:16,223 ERROR [org.jboss.seam.servlet.SeamExceptionFilter] uncaught exception handled by Seam
      javax.servlet.ServletException: Exception while invoking expression #{editSkill.selectSkill}
       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:121)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
       at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
       at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
       at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
       at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
       at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
       at java.lang.Thread.run(Thread.java:595)
      


      The section from the dataTable with the "Bearbeiten" (edit) link:
       <h:dataTable id="skills" value="#{skills}" var="s" rendered="#{skills.rowCount>0}">
       <h:column>
       <f:facet name="header">Name</f:facet>
       #{s.name}
       </h:column>
       <h:column>
       <f:facet name="header">Beschreibung</f:facet>
       #{s.beschreibung}
       </h:column>
       <h:column>
       <f:facet name="header">Bearbeiten</f:facet>
       <s:link id="selectSkill" value="Bearbeiten" action="#{editSkill.selectSkill}"/>
       </h:column>
      
       </h:dataTable>
      

      The pageflow:
      <?xml version="1.0"?>
      
      <pageflow-definition name="EditSkill">
       <start-page name="start" view-id="/skill_list.xhtml">
       <redirect/>
       <transition name="EnterSkill" to="EnterSkillPage"/>
      
       </start-page>
      
       <page name="EnterSkillPage" view-id="/editskill_form.xhtml">
       <redirect/>
       <transition name="CheckSkill" to="SaveSkill" >
       <action expression="#{editSkill.updateSkill}" />
       </transition>
       </page>
      
      
       <page name="SaveSkill" view-id="/skill_list.xhtml">
       <redirect/>
       <end-conversation/>
       </page>
      </pageflow-definition>
      



      Here is the SFSB:
      package activegroup.seam.business;
      
      import java.io.Serializable;
      
      import javax.annotation.Resource;
      import javax.ejb.Remove;
      import javax.ejb.SessionContext;
      import javax.ejb.Stateful;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      import javax.persistence.PersistenceContextType;
      
      import org.jboss.seam.ScopeType;
      import org.jboss.seam.annotations.Begin;
      import org.jboss.seam.annotations.Conversational;
      import org.jboss.seam.annotations.Create;
      import org.jboss.seam.annotations.Destroy;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Out;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.log.Log;
      
      import activegroup.seam.model.Skill;
      
      @Stateful
      @Name("editSkill")
      @Scope(ScopeType.CONVERSATION)
      @Conversational(ifNotBegunOutcome="skill_list")
      public class EditSkillAction implements EditSkill,Serializable{
      
       private static final long serialVersionUID = 1L;
      
       @Logger
       private Log log;
      
       @PersistenceContext(type=PersistenceContextType.EXTENDED)
       private EntityManager em;
      
       @Resource
       private SessionContext ctx;
      
       @In(required=false)
       @Out
       private Skill skill;
      
       @In
       private SkillList skillList;
      
       @Create
       @Begin(pageflow="EditSkill")
       public void begin()
       {
       System.out.println("-------------------------------");
       System.out.println("---> start pageflow EditSkill");
       System.out.println("-------------------------------");
       }
      
       public String selectSkill()
       {
       System.out.println("-------------------------------");
       System.out.println("---> selectSkill called");
       System.out.println("-------------------------------");
       this.skill=em.merge(this.skillList.getSelectedSkill());
       System.out.println("-------------------------------");
       System.out.println("---> selected skill="+this.skill.getName()+" merged... return EnterSkill");
       System.out.println("-------------------------------");
       return "EnterSkill";
       }
      
       public void updateSkill()
       {
       log.debug("updateSkill");
       try {
       em.merge(this.skill);
       } catch (RuntimeException e) {
       e.printStackTrace();
       log.error(e.getMessage());
       ctx.setRollbackOnly();
       }
      
       }
       @Destroy @Remove
       public void destroy() {}
      
      }