[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