[jboss-cvs] jboss-seam/src/main/org/jboss/seam/contexts ...
Gavin King
gavin.king at jboss.com
Mon Jun 18 16:38:22 EDT 2007
User: gavin
Date: 07/06/18 16:38:22
Modified: src/main/org/jboss/seam/contexts PassivatedEntity.java
Log:
JBSEAM-1489
Revision Changes Path
1.13 +120 -68 jboss-seam/src/main/org/jboss/seam/contexts/PassivatedEntity.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PassivatedEntity.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/PassivatedEntity.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- PassivatedEntity.java 18 Jun 2007 15:53:55 -0000 1.12
+++ PassivatedEntity.java 18 Jun 2007 20:38:22 -0000 1.13
@@ -3,7 +3,6 @@
import java.io.Serializable;
import javax.persistence.EntityManager;
-import javax.persistence.OptimisticLockException;
import org.hibernate.Session;
import org.jboss.seam.Component;
@@ -64,39 +63,60 @@
}
else
{
- Object result = null;
- Object version = null;
if (persistenceContext instanceof EntityManager)
{
- EntityManager em = (EntityManager) persistenceContext;
- if ( em.isOpen() )
- {
- result = em.getReference( getEntityClass(), getId() );
- if (result!=null)
+ return getEntityFromEntityManager(persistenceContext);
+ }
+ else
{
- version = PersistenceProvider.instance().getVersion(result, em);
+ return getEntityFromHibernate(persistenceContext);
}
}
}
- else
+
+ private Object getEntityFromHibernate(Object persistenceContext)
{
//TODO: split this out to somewhere to isolate the Hibernate dependency!!
Session session = (Session) persistenceContext;
if ( session.isOpen() )
{
- result = session.load( getEntityClass(), (Serializable) getId() );
+ Object result = session.load( getEntityClass(), (Serializable) getId() );
if (result!=null)
{
- version = HibernatePersistenceProvider.getVersion(result, session);
+ Object version = HibernatePersistenceProvider.getVersion(result, session);
+ if (version!=null)
+ {
+ HibernatePersistenceProvider.checkVersion(result, session, this.version, version);
}
}
+ return result;
}
- if ( result!=null && this.version!=null && !this.version.equals(version) )
+ else
{
- throw new OptimisticLockException("current database version number does not match passivated version number");
+ return null;
+ }
+ }
+
+ private Object getEntityFromEntityManager(Object persistenceContext)
+ {
+ EntityManager em = (EntityManager) persistenceContext;
+ if ( em.isOpen() )
+ {
+ Object result = em.getReference( getEntityClass(), getId() );
+ if (result!=null)
+ {
+ Object version = PersistenceProvider.instance().getVersion(result, em);
+ if (version!=null)
+ {
+ PersistenceProvider.instance().checkVersion(result, em, this.version, version);
+ }
}
return result;
}
+ else
+ {
+ return null;
+ }
}
public static PassivatedEntity createPassivatedEntity(Object value)
@@ -107,31 +127,40 @@
for ( String persistenceContextName: PersistenceContexts.instance().getTouchedContexts() )
{
Object persistenceContext = Component.getInstance(persistenceContextName);
- boolean managed;
- Object id = null;
- Object version = null;
+ PassivatedEntity result;
if (persistenceContext instanceof EntityManager)
{
- EntityManager em = (EntityManager) persistenceContext;
- try
- {
- managed = em.isOpen() && em.contains(value);
+ result = createUsingEntityManager(value, entityClass, persistenceContextName, persistenceContext);
}
- catch (RuntimeException re)
+ else
{
- //workaround for bug in HEM! //TODO; deleteme
- managed = false;
+ result = createUsingHibernate(value, entityClass, persistenceContextName, persistenceContext);
}
- if (managed)
- {
- id = PersistenceProvider.instance().getId(value, em);
- version = PersistenceProvider.instance().getVersion(value, em);
+ if (result!=null) return result;
}
}
- else
+ return null;
+ }
+
+ private static PassivatedEntity createUsingHibernate(Object value, Class entityClass, String persistenceContextName, Object persistenceContext)
{
//TODO: split this out to somewhere to isolate the Hibernate dependency!!
Session session = (Session) persistenceContext;
+ if ( isManaged(value, session) )
+ {
+ Object id = session.getIdentifier(value);
+ Object version = HibernatePersistenceProvider.getVersion(value, session);
+ return create(entityClass, persistenceContextName, id, version);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private static boolean isManaged(Object value, Session session)
+ {
+ boolean managed;
try
{
managed = session.isOpen() && session.contains(value);
@@ -141,13 +170,40 @@
//just in case! //TODO; deleteme
managed = false;
}
- if (managed)
+ return managed;
+ }
+
+ private static PassivatedEntity createUsingEntityManager(Object value, Class entityClass, String persistenceContextName, Object persistenceContext)
+ {
+ EntityManager em = (EntityManager) persistenceContext;
+ if ( isManaged(value, em) )
+ {
+ Object id = PersistenceProvider.instance().getId(value, em);
+ Object version = PersistenceProvider.instance().getVersion(value, em);
+ return create(entityClass, persistenceContextName, id, version);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private static boolean isManaged(Object value, EntityManager em)
{
- id = session.getIdentifier(value);
- version = HibernatePersistenceProvider.getVersion(value, session);
+ boolean managed;
+ try
+ {
+ managed = em.isOpen() && em.contains(value);
}
+ catch (RuntimeException re)
+ {
+ //workaround for bug in HEM! //TODO; deleteme
+ managed = false;
}
- if (managed)
+ return managed;
+ }
+
+ private static PassivatedEntity create(Class entityClass, String persistenceContextName, Object id, Object version)
{
if (id==null)
{
@@ -159,10 +215,6 @@
return new PassivatedEntity(id, version, entityClass, persistenceContextName);
}
}
- }
- }
- return null;
- }
public static boolean isTransactionRolledBackOrMarkedRollback()
{
More information about the jboss-cvs-commits
mailing list