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()) {