[jboss-cvs] jboss-seam/src/main/org/jboss/seam/contexts ...
Gavin King
gavin.king at jboss.com
Thu Jun 21 17:45:30 EDT 2007
User: gavin
Date: 07/06/21 17:45:30
Modified: src/main/org/jboss/seam/contexts EntityBean.java
EntityBeanList.java EntityBeanMap.java
EntityBeanSet.java PassivatedEntity.java
Wrapper.java
Added: src/main/org/jboss/seam/contexts
AbstractEntityBeanCollection.java
Log:
better design
Revision Changes Path
1.12 +12 -6 jboss-seam/src/main/org/jboss/seam/contexts/EntityBean.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityBean.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBean.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- EntityBean.java 21 Jun 2007 20:32:00 -0000 1.11
+++ EntityBean.java 21 Jun 2007 21:45:30 -0000 1.12
@@ -26,13 +26,18 @@
//TODO: use @Unwrap
public Object getInstance()
{
+ if ( passivatedEntity!=null && !passivatedEntity.isVersioned() )
+ {
+ //non-versioned entities can be lazily unpassivated
+ instance = passivatedEntity.toEntityReference(true);
+ }
return instance;
}
public boolean passivate()
{
- /*if (passivatedEntityKey==null) (ie. its new) or the version number changed!
- {*/
+ if ( passivatedEntity==null || passivatedEntity.isVersioned() ) //and the version number changed!
+ {
if ( PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
{
passivatedEntity = null;
@@ -43,17 +48,18 @@
if (passivatedEntity!=null) instance = null;
}
return true;
- /*}
+ }
else
{
return false;
- }*/
+ }
}
public void activate()
{
- //TODO: if not versioned, we can do this lazily!
- if (passivatedEntity!=null)
+ //versioned entities must be unpassivated at the beginning
+ //of the request
+ if ( passivatedEntity!=null && passivatedEntity.isVersioned() )
{
instance = passivatedEntity.toEntityReference(true);
}
1.5 +51 -42 jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanList.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityBeanList.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanList.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- EntityBeanList.java 21 Jun 2007 20:32:00 -0000 1.4
+++ EntityBeanList.java 21 Jun 2007 21:45:30 -0000 1.5
@@ -12,71 +12,80 @@
* @author Gavin King
*
*/
-class EntityBeanList implements Wrapper
+class EntityBeanList extends AbstractEntityBeanCollection
{
private static final long serialVersionUID = -2884601453783925804L;
- private List instance;
+ private List list;
private List<PassivatedEntity> passivatedEntityList;
public EntityBeanList(List instance)
{
- this.instance = instance;
+ this.list = instance;
}
- public void activate()
+ @Override
+ protected Iterable<PassivatedEntity> getPassivatedEntities()
{
- if (passivatedEntityList!=null)
- {
- for (int i=0; i<passivatedEntityList.size(); i++)
- {
- PassivatedEntity passivatedEntity = passivatedEntityList.get(i);
- if (passivatedEntity!=null)
- {
- instance.set( i, passivatedEntity.toEntityReference(true) );
+ return passivatedEntityList;
}
+
+ @Override
+ protected Object getEntityCollection()
+ {
+ return list;
}
+
+ @Override
+ protected void clearPassivatedEntities()
+ {
passivatedEntityList = null;
}
- }
- public Object getInstance()
+ @Override
+ protected boolean isPassivatedEntitiesInitialized()
{
- return instance;
+ return passivatedEntityList!=null;
}
- public boolean passivate()
+ @Override
+ protected void activateAll()
{
- if ( PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
+ for (int i=0; i<passivatedEntityList.size(); i++)
{
- passivatedEntityList = null;
+ PassivatedEntity passivatedEntity = passivatedEntityList.get(i);
+ if (passivatedEntity!=null)
+ {
+ list.set( i, passivatedEntity.toEntityReference(true) );
+ }
+ }
}
- else
+
+ @Override
+ protected void passivateAll()
{
- passivatedEntityList = new ArrayList<PassivatedEntity>( instance.size() );
+ passivatedEntityList = new ArrayList<PassivatedEntity>( list.size() );
boolean found = false;
- for (int i=0; i<instance.size(); i++ )
+ for (int i=0; i<list.size(); i++ )
{
- Object value = instance.get(i);
+ Object value = list.get(i);
PassivatedEntity passivatedEntity = null;
if (value!=null)
{
passivatedEntity = PassivatedEntity.passivateEntity(value);
if (passivatedEntity!=null)
{
- if (!found) instance = new ArrayList(instance);
+ if (!found) list = new ArrayList(list);
found=true;
//this would be dangerous, except that we
//are doing it to a copy of the original
//list:
- instance.set(i, null);
+ list.set(i, null);
}
}
passivatedEntityList.add(passivatedEntity);
}
if (!found) passivatedEntityList=null;
}
- return true;
- }
}
1.5 +48 -35 jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanMap.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityBeanMap.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanMap.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- EntityBeanMap.java 21 Jun 2007 20:32:00 -0000 1.4
+++ EntityBeanMap.java 21 Jun 2007 21:45:30 -0000 1.5
@@ -13,43 +13,58 @@
* @author Gavin King
*
*/
-class EntityBeanMap implements Wrapper
+class EntityBeanMap extends AbstractEntityBeanCollection
{
private static final long serialVersionUID = -2884601453783925804L;
- private Map instance;
+ private Map map;
private Map<Object, PassivatedEntity> passivatedEntityMap;
public EntityBeanMap(Map instance)
{
- this.instance = instance;
+ this.map = instance;
}
- public void activate()
+ @Override
+ protected Iterable<PassivatedEntity> getPassivatedEntities()
{
- if (passivatedEntityMap!=null)
- {
- for ( Map.Entry<Object, PassivatedEntity> me: passivatedEntityMap.entrySet() )
+ return passivatedEntityMap.values();
+ }
+
+ @Override
+ protected Object getEntityCollection()
{
- instance.put( me.getKey(), me.getValue().toEntityReference(true) );
+ return map;
}
+
+ @Override
+ protected void clearPassivatedEntities()
+ {
passivatedEntityMap = null;
}
- }
- //TODO: use @Unwrap
- public Object getInstance()
+ @Override
+ protected boolean isPassivatedEntitiesInitialized()
{
- return instance;
+ return passivatedEntityMap!=null;
}
- public boolean passivate()
+ @Override
+ protected void activateAll()
{
- if ( !PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
+ for ( Map.Entry<Object, PassivatedEntity> me: passivatedEntityMap.entrySet() )
+ {
+ map.put( me.getKey(), me.getValue().toEntityReference(true) );
+ }
+ clearPassivatedEntities();
+ }
+
+ @Override
+ protected void passivateAll()
{
- passivatedEntityMap = new HashMap<Object, PassivatedEntity>( instance.size() );
+ passivatedEntityMap = new HashMap<Object, PassivatedEntity>( map.size() );
boolean found = false;
- for ( Map.Entry me: (Set<Map.Entry>) instance.entrySet() )
+ for ( Map.Entry me: (Set<Map.Entry>) map.entrySet() )
{
Object value = me.getValue();
if (value!=null)
@@ -57,19 +72,17 @@
PassivatedEntity passivatedEntity = PassivatedEntity.passivateEntity(value);
if (passivatedEntity!=null)
{
- if (!found) instance = new HashMap(instance);
+ if (!found) map = new HashMap(map);
found=true;
//this would be dangerous, except that we
//are doing it to a copy of the original
//list:
- instance.remove( me.getKey() );
+ map.remove( me.getKey() );
passivatedEntityMap.put( me.getKey(), passivatedEntity );
}
}
}
- if (!found) passivatedEntityMap=null;
- }
- return true;
+ if (!found) clearPassivatedEntities();
}
}
1.4 +47 -34 jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanSet.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityBeanSet.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanSet.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- EntityBeanSet.java 21 Jun 2007 20:32:00 -0000 1.3
+++ EntityBeanSet.java 21 Jun 2007 21:45:30 -0000 1.4
@@ -14,62 +14,75 @@
* @author Gavin King
*
*/
-class EntityBeanSet implements Wrapper
+class EntityBeanSet extends AbstractEntityBeanCollection
{
private static final long serialVersionUID = -2884601453783925804L;
- private Set instance;
+ private Set set;
private List<PassivatedEntity> passivatedEntityList;
public EntityBeanSet(Set instance)
{
- this.instance = instance;
+ this.set = instance;
}
- public void activate()
+ @Override
+ protected Iterable<PassivatedEntity> getPassivatedEntities()
{
- if (passivatedEntityList!=null)
- {
- for ( PassivatedEntity pe: passivatedEntityList )
+ return passivatedEntityList;
+ }
+
+ @Override
+ protected Object getEntityCollection()
{
- instance.add( pe.toEntityReference(true) );
+ return set;
}
+
+ @Override
+ protected void clearPassivatedEntities()
+ {
passivatedEntityList = null;
}
- }
- //TODO: use @Unwrap
- public Object getInstance()
+ @Override
+ protected boolean isPassivatedEntitiesInitialized()
{
- return instance;
+ return passivatedEntityList!=null;
}
- public boolean passivate()
+ @Override
+ protected void activateAll()
{
- if ( !PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
+ for ( PassivatedEntity pe: passivatedEntityList )
{
- passivatedEntityList = new ArrayList<PassivatedEntity>( instance.size() );
+ set.add( pe.toEntityReference(true) );
+ }
+ passivatedEntityList = null;
+ }
+
+ @Override
+ protected void passivateAll()
+ {
+ passivatedEntityList = new ArrayList<PassivatedEntity>( set.size() );
boolean found = false;
- for ( Object value: instance )
+ for ( Object value: set )
{
if (value!=null)
{
PassivatedEntity passivatedEntity = PassivatedEntity.passivateEntity(value);
if (passivatedEntity!=null)
{
- if (!found) instance = new HashSet(instance);
+ if (!found) set = new HashSet(set);
found=true;
//this would be dangerous, except that we
//are doing it to a copy of the original
//list:
- instance.remove(value);
+ set.remove(value);
passivatedEntityList.add(passivatedEntity);
}
}
}
if (!found) passivatedEntityList=null;
}
- return true;
- }
}
1.17 +5 -0 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.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- PassivatedEntity.java 21 Jun 2007 20:32:00 -0000 1.16
+++ PassivatedEntity.java 21 Jun 2007 21:45:30 -0000 1.17
@@ -54,6 +54,11 @@
return entityClass;
}
+ public boolean isVersioned()
+ {
+ return version!=null;
+ }
+
public Object toEntityReference(boolean checkVersion)
{
Object persistenceContext = Component.getInstance( getPersistenceContext() );
1.4 +3 -1 jboss-seam/src/main/org/jboss/seam/contexts/Wrapper.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Wrapper.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/Wrapper.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- Wrapper.java 21 Jun 2007 20:32:00 -0000 1.3
+++ Wrapper.java 21 Jun 2007 21:45:30 -0000 1.4
@@ -1,7 +1,9 @@
package org.jboss.seam.contexts;
+import java.io.Serializable;
-interface Wrapper
+
+interface Wrapper extends Serializable
{
public Object getInstance();
public void activate();
1.1 date: 2007/06/21 21:45:30; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/contexts/AbstractEntityBeanCollection.java
Index: AbstractEntityBeanCollection.java
===================================================================
package org.jboss.seam.contexts;
abstract class AbstractEntityBeanCollection implements Wrapper
{
public final void activate()
{
if ( isPassivatedEntitiesInitialized() && isAnyVersioned() )
{
activateAll();
}
}
public final Object getInstance()
{
if ( isPassivatedEntitiesInitialized() && !isAnyVersioned() )
{
activateAll();
}
return getEntityCollection();
}
public final boolean passivate()
{
if ( PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
{
clearPassivatedEntities();
}
else
{
passivateAll();
}
return true;
}
private boolean isAnyVersioned()
{
for ( PassivatedEntity passivatedEntity: getPassivatedEntities() )
{
if ( passivatedEntity!=null && passivatedEntity.isVersioned() ) return true;
}
return false;
}
protected abstract void activateAll();
protected abstract void passivateAll();
protected abstract Iterable<PassivatedEntity> getPassivatedEntities();
protected abstract void clearPassivatedEntities();
protected abstract boolean isPassivatedEntitiesInitialized();
protected abstract Object getEntityCollection();
}
More information about the jboss-cvs-commits
mailing list