[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...

Gavin King gavin.king at jboss.com
Sat Sep 23 11:41:39 EDT 2006


  User: gavin   
  Date: 06/09/23 11:41:39

  Modified:    src/main/org/jboss/seam/core   
                        ManagedPersistenceContext.java
                        ManagedHibernateSession.java
  Added:       src/main/org/jboss/seam/core    TouchedContexts.java
  Log:
  support @PrePassivate, @PostActivate, @PostConstruct for JavaBean components
  fix bug in replication of Seam-managed PC used by SFSB
  more efficient replication of extended Seam-managed PCs
  
  Revision  Changes    Path
  1.17      +34 -6     jboss-seam/src/main/org/jboss/seam/core/ManagedPersistenceContext.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ManagedPersistenceContext.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/ManagedPersistenceContext.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -b -r1.16 -r1.17
  --- ManagedPersistenceContext.java	13 Jul 2006 00:58:55 -0000	1.16
  +++ ManagedPersistenceContext.java	23 Sep 2006 15:41:39 -0000	1.17
  @@ -1,10 +1,12 @@
  -//$Id: ManagedPersistenceContext.java,v 1.16 2006/07/13 00:58:55 gavin Exp $
  +//$Id: ManagedPersistenceContext.java,v 1.17 2006/09/23 15:41:39 gavin Exp $
   package org.jboss.seam.core;
   
   import static org.jboss.seam.InterceptionType.NEVER;
   
   import java.io.Serializable;
   
  +import javax.ejb.PostActivate;
  +import javax.ejb.PrePassivate;
   import javax.naming.NamingException;
   import javax.persistence.EntityManager;
   import javax.persistence.EntityManagerFactory;
  @@ -53,6 +55,18 @@
            persistenceUnitJndiName = "java:/" + componentName;
         }
         
  +      createEntityManager();
  +      
  +      TouchedContexts.instance().add(componentName);
  +      
  +      if ( log.isDebugEnabled() )
  +      {
  +         log.debug("created seam managed persistence context for persistence unit: "+ persistenceUnitJndiName);
  +      }
  +   }
  +
  +   private void createEntityManager()
  +   {
         try
         {
            entityManager = getEntityManagerFactory().createEntityManager();
  @@ -73,11 +87,6 @@
               entityManager.setFlushMode(FlushModeType.COMMIT); 
               break;
         }
  -      
  -      if ( log.isDebugEnabled() )
  -      {
  -         log.debug("created seam managed persistence context for persistence unit: "+ persistenceUnitJndiName);
  -      }
      }
   
      @Unwrap
  @@ -90,6 +99,25 @@
         return entityManager;
      }
      
  +   @PrePassivate
  +   public void passivate()
  +   {
  +      if ( !Conversation.instance().getFlushMode().dirtyBetweenTransactions() ) //unfortunately, we have no isDirty() method!
  +      {
  +         entityManager.close();
  +         entityManager = null;
  +      }
  +   }
  +   
  +   @PostActivate
  +   public void activate()
  +   {
  +      if (entityManager==null)
  +      {
  +         createEntityManager();
  +      }
  +   }
  +   
      @Destroy
      public void destroy()
      {
  
  
  
  1.18      +34 -6     jboss-seam/src/main/org/jboss/seam/core/ManagedHibernateSession.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ManagedHibernateSession.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/ManagedHibernateSession.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -b -r1.17 -r1.18
  --- ManagedHibernateSession.java	13 Jul 2006 00:58:55 -0000	1.17
  +++ ManagedHibernateSession.java	23 Sep 2006 15:41:39 -0000	1.18
  @@ -1,10 +1,12 @@
  -//$Id: ManagedHibernateSession.java,v 1.17 2006/07/13 00:58:55 gavin Exp $
  +//$Id: ManagedHibernateSession.java,v 1.18 2006/09/23 15:41:39 gavin Exp $
   package org.jboss.seam.core;
   
   import static org.jboss.seam.InterceptionType.NEVER;
   
   import java.io.Serializable;
   
  +import javax.ejb.PostActivate;
  +import javax.ejb.PrePassivate;
   import javax.naming.NamingException;
   
   import org.apache.commons.logging.Log;
  @@ -52,6 +54,18 @@
         {
            sessionFactoryJndiName = "java:/" + componentName;
         }
  +      createSession();
  +      
  +      TouchedContexts.instance().add(componentName);
  +      
  +      if ( log.isDebugEnabled() )
  +      {
  +         log.debug("created seam managed session for session factory: "+ sessionFactoryJndiName);
  +      }
  +   }
  +
  +   private void createSession()
  +   {
         try
         {
            session = getSessionFactory().openSession();
  @@ -67,11 +81,6 @@
            case MANUAL: session.setFlushMode(FlushMode.NEVER); break;
            case COMMIT: session.setFlushMode(FlushMode.COMMIT); break;
         }
  -      
  -      if ( log.isDebugEnabled() )
  -      {
  -         log.debug("created seam managed session for session factory: "+ sessionFactoryJndiName);
  -      }
      }
      
      @Unwrap
  @@ -81,6 +90,25 @@
         return session;
      }
      
  +   @PrePassivate
  +   public void passivate()
  +   {
  +      if ( !session.isDirty() )
  +      {
  +         session.close();
  +         session = null;
  +      }
  +   }
  +   
  +   @PostActivate
  +   public void activate()
  +   {
  +      if (session==null)
  +      {
  +         createSession();
  +      }
  +   }
  +   
      @Destroy
      public void destroy()
      {
  
  
  
  1.1      date: 2006/09/23 15:41:39;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/TouchedContexts.java
  
  Index: TouchedContexts.java
  ===================================================================
  package org.jboss.seam.core;
  
  import static org.jboss.seam.InterceptionType.NEVER;
  
  import java.util.HashSet;
  import java.util.Set;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Mutable;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.annotations.Unwrap;
  
  @Name("touchedContexts")
  @Scope(ScopeType.CONVERSATION)
  @Intercept(NEVER)
  @Mutable
  public class TouchedContexts
  {
     private Set<String> set = new HashSet<String>();
     
     @Unwrap
     public Set<String> getTouchedContexts()
     {
        return set;
     }
     
     public static Set<String> instance()
     {
        return (Set<String>) Component.getInstance(TouchedContexts.class);
     }
     
  }
  
  
  



More information about the jboss-cvs-commits mailing list