[jboss-cvs] jboss-seam/src/main/org/jboss/seam/contexts ...
Gavin King
gavin.king at jboss.com
Tue Dec 12 23:57:59 EST 2006
User: gavin
Date: 06/12/12 23:57:59
Added: src/main/org/jboss/seam/contexts PassivatedEntity.java
Log:
maintain referential integrity for entity beans in conversation context
Revision Changes Path
1.1 date: 2006/12/13 04:57:59; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/contexts/PassivatedEntity.java
Index: PassivatedEntity.java
===================================================================
/**
*
*/
package org.jboss.seam.contexts;
import java.io.Serializable;
import javax.persistence.EntityManager;
import org.hibernate.Session;
import org.jboss.seam.Component;
import org.jboss.seam.Seam;
import org.jboss.seam.core.PersistenceContexts;
import org.jboss.seam.persistence.PersistenceProvider;
public class PassivatedEntity implements Serializable
{
private Object id;
private String persistenceContext;
private String fieldName;
private Class<?> entityClass;
private PassivatedEntity(Object id, Class<?> entityClass, String persistenceContext, String fieldName)
{
this.id = id;
this.persistenceContext = persistenceContext;
this.fieldName = fieldName;
this.entityClass = entityClass;
}
public String getPersistenceContext()
{
return persistenceContext;
}
public Object getId()
{
return id;
}
public String getFieldName()
{
return fieldName;
}
public Class<?> getEntityClass()
{
return entityClass;
}
public Object toEntityReference()
{
Object persistenceContext = Component.getInstance( getPersistenceContext() );
if ( persistenceContext==null )
{
return null;
}
else
{
if (persistenceContext instanceof EntityManager)
{
EntityManager em = (EntityManager) persistenceContext;
return em.isOpen() ?
em.getReference( getEntityClass(), getId() ) : null;
}
else
{
Session session = (Session) persistenceContext;
return session.isOpen() ?
session.load( getEntityClass(), (Serializable) getId() ) : null;
}
}
}
public static PassivatedEntity createPassivatedEntity(Object value, String fieldName)
{
Class entityClass = Seam.getEntityClass( value.getClass() );
if (entityClass!=null)
{
for ( String persistenceContextName: PersistenceContexts.instance().getTouchedContexts() )
{
Object persistenceContext = Component.getInstance(persistenceContextName);
boolean managed;
Object id;
if (persistenceContext instanceof EntityManager)
{
EntityManager em = (EntityManager) persistenceContext;
try
{
managed = em.isOpen() && em.contains(value);
}
catch (RuntimeException re)
{
//workaround for bug in HEM! //TODO; deleteme
managed = false;
}
id = managed ? PersistenceProvider.instance().getId(value, em) : null;
}
else
{
Session session = (Session) persistenceContext;
try
{
managed = session.isOpen() && session.contains(value);
}
catch (RuntimeException re)
{
//just in case! //TODO; deleteme
managed = false;
}
id = managed ? session.getIdentifier(value) : null;
}
if (managed)
{
if (id==null)
{
throw new IllegalStateException("could not get id of: " + /*beanClass.getName() + '.' +*/ fieldName);
}
return new PassivatedEntity( id, entityClass, persistenceContextName, fieldName );
}
}
}
return null;
}
}
More information about the jboss-cvs-commits
mailing list