[jbossseam-issues] [JBoss JIRA] Closed: (JBSEAM-426) Stateful bean destruction wants extended EM to join a transaction and fails

Gavin King (JIRA) jira-events at jboss.com
Wed Nov 15 18:15:41 EST 2006


     [ http://jira.jboss.com/jira/browse/JBSEAM-426?page=all ]

Gavin King closed JBSEAM-426.
-----------------------------

    Fix Version/s: 1.1.0.BETA2
       Resolution: Done
         Assignee: Gavin King

this was already fixed.

> Stateful bean destruction wants extended EM to join a transaction and fails
> ---------------------------------------------------------------------------
>
>                 Key: JBSEAM-426
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-426
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1.0.BETA1
>            Reporter: Christian Bauer
>         Assigned To: Gavin King
>             Fix For: 1.1.0.BETA2
>
>
> @Name("register")
> @Scope(ScopeType.CONVERSATION)
> @Stateful
> public class RegisterBean implements Register {
>     @In
>     private User currentUser;
>     @In(create = true)
>     private EntityManager caveatEmptorEM;
>     @In(create=true)
>     private transient FacesMessages facesMessages;
>     private String verifyPassword;
>     public String getVerifyPassword() {
>         return verifyPassword;
>     }
>     public void setVerifyPassword(String verifyPassword) {
>         this.verifyPassword = verifyPassword;
>     }
>     @Begin(join = true, flushMode = FlushModeType.MANUAL)
>     public String enterAccount() {
>         System.out.println("################### FLUSHMODE" +
>             ((HibernateEntityManager)caveatEmptorEM).getSession().getFlushMode());
>         if (
>             verifyPasswordMismatch(currentUser.getPassword())
>             ||
>             usernameExists(currentUser.getUsername())
>         ) {
>             return null; // Redisplay page
>         } else {
>             return "profile";
>         }
>     }
>     @IfInvalid(outcome = Outcome.REDISPLAY)
>     public String enterProfile() {
>         return "confirm";
>     }
>     @End
>     public String doRegister() {
>         System.out.println("################### FLUSHMODE" +
>             ((HibernateEntityManager)caveatEmptorEM).getSession().getFlushMode()); // This is also wrong, different issue
>         if ( usernameExists(currentUser.getUsername()) )
>             return "register";
>         caveatEmptorEM.persist(currentUser);
>         caveatEmptorEM.flush();
>         // Remove the "currentUser" from the session context. This is a detached object
>         // after this method returns. We don't want it to leak into the next conversation!
>         Contexts.getSessionContext().remove("currentUser");
>         facesMessages
>               .addFromResourceBundle("SuccessfulRegistration");
>         return "login";
>     }
>     @Remove @Destroy
>     public void destroy() {}
> ...
> }
> Exception during @Destroy:
> 00:03:34,505 DEBUG [org.jboss.seam.contexts.Contexts] destroying: conversation
> 00:03:34,505 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preDestroy.conversation
> 00:03:34,505 DEBUG [org.jboss.seam.contexts.Contexts] destroying: register
> 00:03:34,505 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preDestroy.register
> 00:03:34,506 DEBUG [org.jboss.seam.Component] trying to inject with hierarchical context search: caveatEmptorEM
> 00:03:34,506 DEBUG [org.jboss.seam.contexts.Contexts] found in conversation context: caveatEmptorEM
> 00:03:34,507 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
> 00:03:34,507 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preRemoveVariable.register
> 00:03:34,507 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.postRemoveVariable.register
> 00:03:34,507 DEBUG [org.jboss.seam.interceptors.RemoveInterceptor] Stateful component was removed: register
> 00:03:34,508 WARN  [org.jboss.seam.contexts.Contexts] Could not destroy component: register
> javax.ejb.EJBException: java.lang.IllegalStateException: EntityManager is closed
>         at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
> ...
> Caused by: java.lang.IllegalStateException: EntityManager is closed
>         at org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java:42)
>         at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:447)
>         at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:442)
>         at org.jboss.seam.core.ManagedPersistenceContext.getEntityManager(ManagedPersistenceContext.java:91)
>         at sun.reflect.GeneratedMethodAccessor328.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.jboss.seam.util.Reflections.invoke(Reflections.java:17)
>         at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:101)
>         at org.jboss.seam.Component.callComponentMethod(Component.java:1642)
>         at org.jboss.seam.Component.unwrap(Component.java:1663)
>         at org.jboss.seam.Component.getInstance(Component.java:1501)
>         at org.jboss.seam.Component.getInstance(Component.java:1461)
>         at org.jboss.seam.Component.getInstanceToInject(Component.java:1688)
>         at org.jboss.seam.Component.injectFields(Component.java:1218)
>         at org.jboss.seam.Component.inject(Component.java:988)
>         at org.jboss.seam.interceptors.BijectionInterceptor.bijectTargetComponent(BijectionInterceptor.java:48)
> I can't make the doRegister() method @End @Remove @Destroy, it throws exceptions.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list