You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/07/09 23:43:34 UTC

svn commit: r1359418 - in /incubator/isis/trunk/framework/runtimes/dflt: objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/ objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/ objectstor...

Author: danhaywood
Date: Mon Jul  9 21:43:33 2012
New Revision: 1359418

URL: http://svn.apache.org/viewvc?rev=1359418&view=rev
Log:
ISIS-14: ResolveState refactorings (PersistorUtil.startStateTransition)

Renamed PersistorUtil#startStateTransition -> #startResolving (since only ever called with Resolving state)
Renamed PersistorUtil#endStateTransition -> #endResolving (similarly)
Simplified SQL OS internals, removing the "markAsResolved" boolean in various methods since is always set to true
Put calls to PersistorUtil#start/end in try...finally block since should be 'transactional'.

Modified:
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStore.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStore.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryObjectStore.java Mon Jul  9 21:43:33 2012
@@ -32,7 +32,6 @@ import org.apache.isis.core.commons.debu
 import org.apache.isis.core.commons.debug.DebugUtils;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
@@ -249,29 +248,25 @@ public class InMemoryObjectStore impleme
     @Override
     public void resolveImmediately(final ObjectAdapter adapter) throws ObjectPersistenceException {
 
-        // this is a nasty hack, but even though this method is called by
+        // these diagnostics are because, even though this method is called by
         // PersistenceSessionObjectStore#resolveImmediately which has a check,
         // seem to be hitting a race condition with another thread that is
-        // resolving the object
-        // before I get here.
-        // as belt-n-braces, have also made PSOS#resolveImmediately synchronize
-        // on
-        // the object being resolved.
+        // resolving the object before I get here.
         if (adapter.canTransitionToResolving()) {
-            LOG.debug("resolve " + adapter);
-
-            PersistorUtil.startStateTransition(adapter, ResolveState.RESOLVING);
-            PersistorUtil.endStateTransition(adapter); // moves to RESOLVED
+            if(LOG.isDebugEnabled()) {
+                LOG.debug("resolve " + adapter);
+            }
         } else {
             LOG.warn("resolveImmediately ignored, " + "adapter's current state is: " + adapter.getResolveState() + " ; oid: " + adapter.getOid());
         }
+        
+        adapter.markAsResolvedIfPossible();
     }
 
     @Override
     public void resolveField(final ObjectAdapter object, final ObjectAssociation field) throws ObjectPersistenceException {
-        final ObjectAdapter reference = field.get(object);
-        PersistorUtil.startStateTransition(reference, ResolveState.RESOLVING);
-        PersistorUtil.endStateTransition(reference);
+        final ObjectAdapter referenceAdapter = field.get(object);
+        referenceAdapter.markAsResolvedIfPossible();
     }
 
 
@@ -324,10 +319,7 @@ public class InMemoryObjectStore impleme
 
     private static List<ObjectAdapter> resolved(final List<ObjectAdapter> instances) {
         for (ObjectAdapter adapter: instances) {
-            if (adapter.canTransitionToResolving()) {
-                PersistorUtil.startStateTransition(adapter, ResolveState.RESOLVING);
-                PersistorUtil.endStateTransition(adapter);
-            }
+            adapter.markAsResolvedIfPossible();
         }
         return instances;
     }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/CollectionMapper.java Mon Jul  9 21:43:33 2012
@@ -24,7 +24,7 @@ import org.apache.isis.core.metamodel.ad
 
 public interface CollectionMapper {
 
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent, final boolean makeResolved);
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent);
 
     public void saveInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java Mon Jul  9 21:43:33 2012
@@ -83,7 +83,7 @@ public class AutoCollectionMapper extend
     }
 
     @Override
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter, final boolean makeResolved) {
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter) {
         final ObjectAdapter collectionAdapter = field.get(parentAdapter);
         if (!collectionAdapter.canTransitionToResolving()) {
             return;
@@ -92,31 +92,32 @@ public class AutoCollectionMapper extend
         if(LOG.isDebugEnabled()) {
             LOG.debug("loading internal collection " + field);
         }
-        collectionAdapter.changeState(ResolveState.RESOLVING);
-
-        final StringBuffer sql = new StringBuffer();
-        sql.append("select ");
-        idMapping.appendColumnNames(sql);
-        sql.append(", ");
-        elementMapping.appendColumnNames(sql);
-        sql.append(" from ");
-        sql.append(tableName);
-
-        final Results rs = connector.select(sql.toString());
-        final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
-        while (rs.next()) {
-            final ObjectAdapter element = ((JdbcObjectReferenceMapping) elementMapping).initializeField(rs);
-            if(LOG.isDebugEnabled()) {
-                LOG.debug("  element  " + element.getOid());
-            }
-            list.add(element);
-        }
-        final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
-        collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
-        rs.close();
         
-        if (makeResolved) {
-            PersistorUtil.endStateTransition(collectionAdapter);
+        try {
+            PersistorUtil.startResolving(collectionAdapter);
+            
+            final StringBuffer sql = new StringBuffer();
+            sql.append("select ");
+            idMapping.appendColumnNames(sql);
+            sql.append(", ");
+            elementMapping.appendColumnNames(sql);
+            sql.append(" from ");
+            sql.append(tableName);
+            
+            final Results rs = connector.select(sql.toString());
+            final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
+            while (rs.next()) {
+                final ObjectAdapter element = ((JdbcObjectReferenceMapping) elementMapping).initializeField(rs);
+                if(LOG.isDebugEnabled()) {
+                    LOG.debug("  element  " + element.getOid());
+                }
+                list.add(element);
+            }
+            final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
+            collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
+            rs.close();
+        } finally {
+            PersistorUtil.endResolving(collectionAdapter);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java Mon Jul  9 21:43:33 2012
@@ -27,7 +27,6 @@ import org.apache.isis.applib.Identifier
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
@@ -306,28 +305,31 @@ public class AutoMapper extends Abstract
         return sql.toString();
     }
 
-    protected void loadFields(final ObjectAdapter object, final Results rs) {
-        PersistorUtil.startStateTransition(object, ResolveState.RESOLVING);
-        for (final FieldMapping mapping : fieldMappingByField.values()) {
-            mapping.initializeField(object, rs);
+    protected void loadFields(final ObjectAdapter adapter, final Results rs) {
+        PersistorUtil.startResolving(adapter);
+        try {
+            for (final FieldMapping mapping : fieldMappingByField.values()) {
+                mapping.initializeField(adapter, rs);
+            }
+            /*
+             * for (int i = 0; i < oneToManyProperties.length; i++) { /* Need to set
+             * up collection to be a ghost before we access as below
+             */
+            // CollectionAdapter collection = (CollectionAdapter)
+            /*
+             * oneToManyProperties[i].get(object); }
+             */
+            adapter.setVersion(versionMapping.getLock(rs));
+        } finally {
+            PersistorUtil.endResolving(adapter);
         }
-        /*
-         * for (int i = 0; i < oneToManyProperties.length; i++) { /* Need to set
-         * up collection to be a ghost before we access as below
-         */
-        // CollectionAdapter collection = (CollectionAdapter)
-        /*
-         * oneToManyProperties[i].get(object); }
-         */
-        object.setVersion(versionMapping.getLock(rs));
-        PersistorUtil.endStateTransition(object);
     }
 
     // KAM
     private void loadCollections(final DatabaseConnector connector, final ObjectAdapter instance) {
 
         for (final CollectionMapper mapper : collectionMappers) {
-            mapper.loadInternalCollection(connector, instance, true);
+            mapper.loadInternalCollection(connector, instance);
         }
     }
 
@@ -378,7 +380,7 @@ public class AutoMapper extends Abstract
             rs.close();
 
             for (final CollectionMapper collectionMapper : collectionMappers) {
-                collectionMapper.loadInternalCollection(connector, object, true);
+                collectionMapper.loadInternalCollection(connector, object);
             }
         } else {
             rs.close();
@@ -391,7 +393,7 @@ public class AutoMapper extends Abstract
         if (collectionMappers.length > 0) {
             final DatabaseConnector secondConnector = connector.getConnectionPool().acquire();
             for (final CollectionMapper collectionMapper : collectionMappers) {
-                collectionMapper.loadInternalCollection(secondConnector, object, true);
+                collectionMapper.loadInternalCollection(secondConnector, object);
             }
             connector.getConnectionPool().release(secondConnector);
         }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java Mon Jul  9 21:43:33 2012
@@ -28,7 +28,6 @@ import org.apache.log4j.Logger;
 
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -189,7 +188,7 @@ public class ForeignKeyCollectionMapper 
     }
 
     @Override
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter, final boolean makeResolved) {
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter) {
 
         final ObjectAdapter collectionAdapter = field.get(parentAdapter);
         if (!collectionAdapter.canTransitionToResolving()) {
@@ -199,33 +198,33 @@ public class ForeignKeyCollectionMapper 
         if(LOG.isDebugEnabled()) {
             LOG.debug("loading internal collection " + field);
         }
-        PersistorUtil.startStateTransition(collectionAdapter, ResolveState.RESOLVING);
-
         final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
-
-        loadCollectionIntoList(connector, parentAdapter, makeResolved, table, specification, getIdMapping(), fieldMappingByField, versionMapping, list);
-
-        final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
-        collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
-        PersistorUtil.endStateTransition(collectionAdapter);
+        try {
+            PersistorUtil.startResolving(collectionAdapter);
+            
+            loadCollectionIntoList(connector, parentAdapter, table, specification, getIdMapping(), fieldMappingByField, versionMapping, list);
+            
+            final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
+            collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
+            
+        } finally {
+            PersistorUtil.endResolving(collectionAdapter);
+        }
 
         // TODO: Need to finalise this behaviour. At the moment, all
         // collections will get infinitely resolved. I
-        // don't think this is desirable. Sub-collections should be left
-        // "Partially Resolved".
-        if (makeResolved) {
-            for (final ObjectAdapter field : list) {
-                // final ObjectMapping mapping =
-                // objectMappingLookup.getMapping(field, connector);
-                if (field.getSpecification().isOfType(parentAdapter.getSpecification())) {
-                    loadInternalCollection(connector, field, true);
-                }
+        // don't think this is desirable.
+        for (final ObjectAdapter field : list) {
+            // final ObjectMapping mapping =
+            // objectMappingLookup.getMapping(field, connector);
+            if (field.getSpecification().isOfType(parentAdapter.getSpecification())) {
+                loadInternalCollection(connector, field);
             }
         }
     }
 
-    protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final boolean makeResolved, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField,
-            final VersionMapping versionMapping, final List<ObjectAdapter> list) {
+    protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField, final VersionMapping versionMapping,
+            final List<ObjectAdapter> list) {
 
         final StringBuffer sql = new StringBuffer();
         sql.append("select ");
@@ -247,25 +246,26 @@ public class ForeignKeyCollectionMapper 
         while (rs.next()) {
             final Oid oid = idMappingAbstract.recreateOid(rs, specification);
             final ObjectAdapter element = getAdapter(specification, oid);
-            loadFields(element, rs, makeResolved, fieldMappingByField);
+            loadFields(element, rs, fieldMappingByField);
             LOG.debug("  element  " + element.getOid());
             list.add(element);
         }
         rs.close();
     }
 
-    protected void loadFields(final ObjectAdapter adapter, final Results rs, final boolean makeResolved, final Map<ObjectAssociation, FieldMapping> fieldMappingByField) {
+    protected void loadFields(final ObjectAdapter adapter, final Results rs, final Map<ObjectAssociation, FieldMapping> fieldMappingByField) {
         if (!adapter.canTransitionToResolving()) {
             return;
         }
-        
-        PersistorUtil.startStateTransition(adapter, ResolveState.RESOLVING);
-        for (final FieldMapping mapping : fieldMappingByField.values()) {
-            mapping.initializeField(adapter, rs);
-        }
-        adapter.setVersion(versionMapping.getLock(rs));
-        if (makeResolved) {
-            PersistorUtil.endStateTransition(adapter);
+
+        try {
+            PersistorUtil.startResolving(adapter);
+            for (final FieldMapping mapping : fieldMappingByField.values()) {
+                mapping.initializeField(adapter, rs);
+            }
+            adapter.setVersion(versionMapping.getLock(rs));
+        } finally {
+            PersistorUtil.endResolving(adapter);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java Mon Jul  9 21:43:33 2012
@@ -192,8 +192,8 @@ public class PolymorphicForeignKeyInChil
     }
 
     @Override
-    protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final boolean makeResolved, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField,
-            final VersionMapping versionMapping, final List<ObjectAdapter> list) {
+    protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField, final VersionMapping versionMapping,
+            final List<ObjectAdapter> list) {
         LOG.debug("Loading polymorphic list");
 
         final StringBuffer sql = new StringBuffer();

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java Mon Jul  9 21:43:33 2012
@@ -184,8 +184,8 @@ public class PolymorphicForeignKeyInChil
     }
 
     @Override
-    protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final boolean makeResolved, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField,
-            final VersionMapping versionMapping, final List<ObjectAdapter> superList) {
+    protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField, final VersionMapping versionMapping,
+            final List<ObjectAdapter> superList) {
         final List<ObjectAdapter> list = Lists.newArrayList();
         
         for (int i = 0; i < tables.size(); i++) {
@@ -193,7 +193,7 @@ public class PolymorphicForeignKeyInChil
             final AutoMapper mapper = (AutoMapper) subClassMappers.get(i);
             final String mapperTable = tables.get(i);
 
-            super.loadCollectionIntoList(connector, parent, makeResolved, mapperTable, currentTableSpecification, mapper.getIdMapping(), mapper.fieldMappingByField, mapper.getVersionMapping(), list);
+            super.loadCollectionIntoList(connector, parent, mapperTable, currentTableSpecification, mapper.getIdMapping(), mapper.fieldMappingByField, mapper.getVersionMapping(), list);
 
             superList.addAll(list);
             list.clear();

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java Mon Jul  9 21:43:33 2012
@@ -27,7 +27,6 @@ import org.apache.log4j.Logger;
 
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.version.SerialNumberVersion;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -88,62 +87,69 @@ public class ReversedAutoAssociationMapp
     }
 
     @Override
-    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter, final boolean makeResolved) {
+    public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter) {
         final ObjectAdapter collectionAdapter = field.get(parentAdapter);
-        
         if (!collectionAdapter.canTransitionToResolving()) {
             return;
         } 
         if(LOG.isDebugEnabled()) {
             LOG.debug("loading internal collection " + field);
         }
+        
+        try {
+            // added, since was missing (presumably an error given similarity with other 'Mapper' impls?)
+            PersistorUtil.startResolving(collectionAdapter);
+            
+            final StringBuffer sql = new StringBuffer();
+            sql.append("select ");
+            idMapping.appendColumnNames(sql);
+            sql.append(", ");
+            sql.append(columnList(fieldMappingByField));
+            sql.append(" from ");
+            sql.append(table);
+            sql.append(" where ");
+            idMapping.appendUpdateValues(connector, sql, parentAdapter);
+            
+            final Results rs = connector.select(sql.toString());
+            final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
+            while (rs.next()) {
+                final Oid oid = idMapping.recreateOid(rs, specification);
+                final ObjectAdapter element = getAdapter(specification, oid);
+                loadFields(element, rs);
+                if(LOG.isDebugEnabled()) {
+                    LOG.debug("  element  " + element.getOid());
+                }
+                list.add(element);
+            }
+            final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
+            collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
+            rs.close();
+        } finally {
+            PersistorUtil.endResolving(collectionAdapter);
+        }
 
-        final StringBuffer sql = new StringBuffer();
-        sql.append("select ");
-        idMapping.appendColumnNames(sql);
-        sql.append(", ");
-        sql.append(columnList(fieldMappingByField));
-        sql.append(" from ");
-        sql.append(table);
-        sql.append(" where ");
-        idMapping.appendUpdateValues(connector, sql, parentAdapter);
+    }
 
-        final Results rs = connector.select(sql.toString());
-        final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
-        while (rs.next()) {
-            final Oid oid = idMapping.recreateOid(rs, specification);
-            final ObjectAdapter element = getAdapter(specification, oid);
-            loadFields(element, rs, makeResolved);
-            if(LOG.isDebugEnabled()) {
-                LOG.debug("  element  " + element.getOid());
+    protected void loadFields(final ObjectAdapter object, final Results rs) {
+        try {
+            PersistorUtil.startResolving(object);
+            for (final FieldMapping mapping : fieldMappingByField.values()) {
+                mapping.initializeField(object, rs);
             }
-            list.add(element);
+            /*
+             * for (int i = 0; i < oneToManyProperties.length; i++) { /* Need to set
+             * up collection to be a ghost before we access as below
+             */
+            // CollectionAdapter collection = (CollectionAdapter)
+            /*
+             * oneToManyProperties[i].get(object); }
+             */
+            
+            object.setVersion(versionMapping.getLock(rs));
+            
+        } finally {
+            PersistorUtil.endResolving(object);
         }
-        final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
-        collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
-        rs.close();
-        PersistorUtil.endStateTransition(collectionAdapter);
-    }
-
-    protected void loadFields(final ObjectAdapter object, final Results rs, final boolean makeResolved) {
-        PersistorUtil.startStateTransition(object, ResolveState.RESOLVING);
-        for (final FieldMapping mapping : fieldMappingByField.values()) {
-            mapping.initializeField(object, rs);
-        }
-        /*
-         * for (int i = 0; i < oneToManyProperties.length; i++) { /* Need to set
-         * up collection to be a ghost before we access as below
-         */
-        // CollectionAdapter collection = (CollectionAdapter)
-        /*
-         * oneToManyProperties[i].get(object); }
-         */
-
-        object.setVersion(versionMapping.getLock(rs));
-        if (makeResolved) {
-            PersistorUtil.endStateTransition(object);
-        }
-
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java Mon Jul  9 21:43:33 2012
@@ -147,36 +147,38 @@ public class XmlObjectStore implements O
         if (!adapter.canTransitionToResolving()) {
             return;
         } 
-        PersistorUtil.startStateTransition(adapter, ResolveState.RESOLVING);
-
-        final List<ObjectAssociation> fields = adapter.getSpecification().getAssociations();
-        for (int i = 0; i < fields.size(); i++) {
-            final ObjectAssociation field = fields.get(i);
-            if (field.isNotPersisted()) {
-                continue;
-            }
+        try {
+            PersistorUtil.startResolving(adapter);
+            final List<ObjectAssociation> fields = adapter.getSpecification().getAssociations();
+            for (int i = 0; i < fields.size(); i++) {
+                final ObjectAssociation field = fields.get(i);
+                if (field.isNotPersisted()) {
+                    continue;
+                }
 
-            final ObjectSpecification fieldSpecification = field.getSpecification();
-            if (fieldSpecification.isEncodeable()) {
-                final EncodableFacet encoder = fieldSpecification.getFacet(EncodableFacet.class);
-                ObjectAdapter value;
-                final String valueData = data.value(field.getId());
-                if (valueData != null) {
-                    if (valueData.equals("NULL")) {
-                        value = null;
-                    } else {
-                        value = encoder.fromEncodedString(valueData);
+                final ObjectSpecification fieldSpecification = field.getSpecification();
+                if (fieldSpecification.isEncodeable()) {
+                    final EncodableFacet encoder = fieldSpecification.getFacet(EncodableFacet.class);
+                    ObjectAdapter value;
+                    final String valueData = data.value(field.getId());
+                    if (valueData != null) {
+                        if (valueData.equals("NULL")) {
+                            value = null;
+                        } else {
+                            value = encoder.fromEncodedString(valueData);
+                        }
+                        ((OneToOneAssociation) field).initAssociation(adapter, value);
                     }
-                    ((OneToOneAssociation) field).initAssociation(adapter, value);
+                } else if (field.isOneToManyAssociation()) {
+                    initObjectSetupCollection(adapter, data, field);
+                } else if (field.isOneToOneAssociation()) {
+                    initObjectSetupReference(adapter, data, field);
                 }
-            } else if (field.isOneToManyAssociation()) {
-                initObjectSetupCollection(adapter, data, field);
-            } else if (field.isOneToOneAssociation()) {
-                initObjectSetupReference(adapter, data, field);
             }
+            adapter.setVersion(data.getVersion());
+        } finally {
+            PersistorUtil.endResolving(adapter);
         }
-        adapter.setVersion(data.getVersion());
-        PersistorUtil.endStateTransition(adapter);
     }
 
     private void initObjectSetupReference(final ObjectAdapter object, final ObjectData data, final ObjectAssociation field) {
@@ -237,21 +239,24 @@ public class XmlObjectStore implements O
             return;
         } 
         
-        PersistorUtil.startStateTransition(collectionAdapter, ResolveState.RESOLVING);
-        final int size = refs == null ? 0 : refs.size();
-        final ObjectAdapter[] elements = new ObjectAdapter[size];
-        for (int j = 0; j < size; j++) {
-            final RootOid elementOid = refs.elementAt(j);
-            ObjectAdapter adapter;
-            adapter = getAdapterManager().getAdapterFor(elementOid);
-            if (adapter == null) {
-                adapter = getObject(elementOid);
+        try {
+            PersistorUtil.startResolving(collectionAdapter);
+            final int size = refs == null ? 0 : refs.size();
+            final ObjectAdapter[] elements = new ObjectAdapter[size];
+            for (int j = 0; j < size; j++) {
+                final RootOid elementOid = refs.elementAt(j);
+                ObjectAdapter adapter;
+                adapter = getAdapterManager().getAdapterFor(elementOid);
+                if (adapter == null) {
+                    adapter = getObject(elementOid);
+                }
+                elements[j] = adapter;
             }
-            elements[j] = adapter;
+            final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collectionAdapter);
+            facet.init(collectionAdapter, elements);
+        } finally {
+            PersistorUtil.endResolving(collectionAdapter);
         }
-        final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collectionAdapter);
-        facet.init(collectionAdapter, elements);
-        PersistorUtil.endStateTransition(collectionAdapter);
     }
 
     // /////////////////////////////////////////////////////////

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java Mon Jul  9 21:43:33 2012
@@ -33,7 +33,6 @@ import org.apache.isis.core.commons.enco
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -265,14 +264,18 @@ public class Memento implements Serializ
         boolean dataIsTransient = data.getOid().isTransient();
         
         if (!dataIsTransient) {
-            PersistorUtil.startStateTransition(objectAdapter, ResolveState.RESOLVING);
-            updateFields(objectAdapter, data);
-            PersistorUtil.endStateTransition(objectAdapter);
+            try {
+                PersistorUtil.startResolving(objectAdapter);
+                updateFields(objectAdapter, data);
+            } finally {
+                PersistorUtil.endResolving(objectAdapter);
+            }
             
         } else if (objectAdapter.isTransient() && dataIsTransient) {
             updateFields(objectAdapter, data);
             
         } else if (objectAdapter.isParented()) {
+            // this branch is kind-a wierd, I think it's to handle aggregated adapters.
             updateFields(objectAdapter, data);
             
         } else {

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java?rev=1359418&r1=1359417&r2=1359418&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java Mon Jul  9 21:43:33 2012
@@ -36,7 +36,8 @@ public class PersistorUtil {
     // update resolve state
     // //////////////////////////////////////////////////////////////////
 
-    public static void startStateTransition(final ObjectAdapter adapter, final ResolveState state) {
+    public static void startResolving(final ObjectAdapter adapter) {
+        final ResolveState state = ResolveState.RESOLVING;
         if (LOG.isTraceEnabled()) {
             LOG.trace("start " + adapter + " as " + state.name());
         }
@@ -48,7 +49,7 @@ public class PersistorUtil {
      * as specified by the second parameter. Attempting to specify any other
      * state throws a run time exception.
      */
-    public static void endStateTransition(final ObjectAdapter adapter) {
+    public static void endResolving(final ObjectAdapter adapter) {
         final ResolveState endState = adapter.getResolveState().getEndState();
         Assert.assertNotNull("end state required", endState);
         if (LOG.isTraceEnabled()) {