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/03/24 15:01:52 UTC
svn commit: r1304796 [10/16] - in /incubator/isis/trunk/framework:
applib/src/main/java/org/apache/isis/applib/
applib/src/test/java/org/apache/isis/applib/
core/commons/src/main/java/org/apache/isis/core/commons/config/
core/commons/src/main/java/org/...
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerPersist.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerPersist.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerPersist.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerPersist.java Sat Mar 24 14:01:35 2012
@@ -19,11 +19,11 @@
package org.apache.isis.runtimes.dflt.runtime.persistence.adaptermanager;
+import org.apache.isis.applib.annotation.Aggregated;
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.runtimes.dflt.runtime.system.persistence.AdapterManager;
-import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
+import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.algorithm.PersistAlgorithm;
import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
/**
@@ -32,25 +32,19 @@ import org.apache.isis.runtimes.dflt.run
public interface AdapterManagerPersist {
/**
- * Remaps the {@link ObjectAdapter adapter} and any associated aggregated
- * (collection) adapters using a new value for the {@link Oid} provided by
- * the {@link OidGenerator}.
+ * Remaps the {@link ObjectAdapter adapter} and any associated
+ * (collection) adapters (ie, those that wrap the List/Set instances).
*
* <p>
- * The {@link Oid} of the supplied {@link ObjectAdapter adapter} should be
- * in such a state that it can be
- * {@link OidGenerator#convertTransientToPersistentOid(Oid) converted from
- * transient to persistent}. Note that some {@link Oid} implementations
- * require an initial state call to do this (eg to read from a database
- * identity or sequence value).
+ * Note that it isn't necessary to remap any aggregated adapters (as per
+ * {@link Aggregated} annotation; the {@link PersistAlgorithm} calls this
+ * method and takes responsibility for locating the graph of transient
+ * objects that needs to be remapped.
*
* <p>
- * The adapter is remapped in the {@link AdapterManager}, and the
- * {@link Oid#getPrevious() previous} is set to its transient value).
- * Similarly for any aggregated adapters. This is needed for client/server
- * so that the client can remap a changed object.
- *
- * @see AdapterManagerProxy#remapUpdated(Oid)
+ * As a consequence of this call, the adapter's {@link Oid} will be
+ * {@link ObjectAdapter#replaceOid(Oid) replaced} (Oids are now immutable).
+ * The same is true of the associated collection adapters.
*/
void remapAsPersistent(ObjectAdapter adapter);
@@ -70,6 +64,6 @@ public interface AdapterManagerPersist {
* {@link ResolveState} will be {@link ResolveState#GHOST} if a persistent
* {@link Oid}, or {@link ResolveState#TRANSIENT} otherwise.
*/
- ObjectAdapter recreateRootAdapter(Oid oid, Object pojo);
+ ObjectAdapter recreateAdapter(Oid oid, Object pojo);
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerProxy.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerProxy.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerProxy.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerProxy.java Sat Mar 24 14:01:35 2012
@@ -25,7 +25,10 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
/**
- * API used solely by the {@link PersistenceSession}.
+ * API used solely by the {@link PersistenceSession}, for remoting support.
+ *
+ * <p>
+ * *** THIS INTERFACE IS NO LONGER IMPLEMENTED, SINCE REMOTING SUPPORT HAS BEEN REMOVED. ***
*/
public interface AdapterManagerProxy extends ObjectAdapterLookup {
@@ -40,6 +43,6 @@ public interface AdapterManagerProxy ext
*
* @see AdapterManagerPersist#remapAsPersistent(ObjectAdapter)
*/
- public void remapUpdated(Oid oid);
+ public void remapUpdated(Oid rootOid);
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerTestSupport.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerTestSupport.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerTestSupport.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AdapterManagerTestSupport.java Sat Mar 24 14:01:35 2012
@@ -21,28 +21,29 @@ package org.apache.isis.runtimes.dflt.ru
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
public interface AdapterManagerTestSupport {
/**
* For testing purposes, creates an {@link ObjectAdapter adapter} for the
- * supplied domain object with the specified {@link Oid}.
+ * supplied domain object with the specified {@link RootOid}
*
* <p>
* The usual way of creating {@link ObjectAdapter adapter}s is using
* {@link #adapterFor(Object)}, using the <tt>OidGenerator</tt> to obtain an
- * {@link Oid}. This test-support method differs because it allows the
- * {@link Oid} to be specified explicitly.
+ * {@link RootOid}. This test-support method differs because it allows the
+ * {@link RootOid} to be specified explicitly.
*
* <p>
- * Note that the {@link Oid} must represent a {@link Oid#isTransient()
+ * Note that the {@link RootOid} must represent a {@link Oid#isTransient()
* transient} object. If an {@link ObjectAdapter adapter} is required for a
- * persistent {@link Oid}, just use
- * {@link #recreateRootAdapter(Object, Oid)}.
+ * persistent {@link RootOid}, just use
+ * {@link #recreateAdapter(Object, RootOid)}.
*
* @see #adapterFor(Object)
- * @see #recreateRootAdapter(Object, Oid)
+ * @see #recreateAdapter(Object, RootOid)
*/
- ObjectAdapter testCreateTransient(Object pojo, Oid oid);
+ ObjectAdapter testCreateTransient(Object pojo, RootOid oid);
}
Copied: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java (from r1301918, incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AggregateAdapters.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java?p2=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java&p1=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AggregateAdapters.java&r1=1301918&r2=1304796&rev=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/AggregateAdapters.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java Sat Mar 24 14:01:35 2012
@@ -21,36 +21,45 @@ package org.apache.isis.runtimes.dflt.ru
import java.util.Collections;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+import com.google.common.collect.Maps;
+
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapterLookup;
+import org.apache.isis.core.metamodel.adapter.oid.CollectionOid;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-public class AggregateAdapters implements Iterable<ObjectAdapter> {
-
- private final ObjectAdapter rootAdapter;
- private final Map<OneToManyAssociation, ObjectAdapter> collectionAdapters = new LinkedHashMap<OneToManyAssociation, ObjectAdapter>();
-
- public AggregateAdapters(final ObjectAdapter rootAdapter) {
- Assert.assertNotNull(rootAdapter);
- this.rootAdapter = rootAdapter;
+/**
+ * A root {@link ObjectAdapter adapter} along with aggregated {@link ObjectAdapter adapters}
+ * for any of its {@link OneToManyAssociation collection}s that are currently present in
+ * the {@link ObjectAdapterLookup map}s.
+ *
+ * <p>
+ * Used for "impact analysis" when persisting transient root objects; all aggregated adapters
+ * must also be persisted.
+ */
+public class RootAndCollectionAdapters implements Iterable<ObjectAdapter> {
+
+ private final ObjectAdapter parentAdapter;
+ private final Oid rootAdapterOid;
+
+ private final Map<OneToManyAssociation, ObjectAdapter> collectionAdapters = Maps.newLinkedHashMap();
+
+ public RootAndCollectionAdapters(ObjectAdapter parentAdapter, ObjectAdapterLookup objectAdapterLookup) {
+ Assert.assertNotNull(parentAdapter);
+ final Oid oid = parentAdapter.getOid();
+ this.parentAdapter = parentAdapter;
+ this.rootAdapterOid = (RootOid) oid;
+ addCollectionAdapters(objectAdapterLookup);
}
public ObjectAdapter getRootAdapter() {
- return rootAdapter;
- }
-
- public void addCollectionAdapter(final OneToManyAssociation otma, final ObjectAdapter collectionAdapter) {
- Assert.assertNotNull(otma);
- Assert.assertNotNull(collectionAdapter);
- collectionAdapters.put(otma, collectionAdapter);
- }
-
- public Map<OneToManyAssociation, ObjectAdapter> getCollectionAdapters() {
- return Collections.unmodifiableMap(collectionAdapters);
+ return parentAdapter;
}
/**
@@ -64,11 +73,48 @@ public class AggregateAdapters implement
return getCollectionAdapters().values().iterator();
}
+ /**
+ * Which collections are present?
+ * @return
+ */
public Set<OneToManyAssociation> getCollections() {
return getCollectionAdapters().keySet();
}
+ /**
+ * Corresponding adapter for each collection (values).
+ *
+ * @see #getCollections()
+ */
public ObjectAdapter getCollectionAdapter(final OneToManyAssociation otma) {
return collectionAdapters.get(otma);
}
+
+
+ ////////////////////////////////////////////////////////////////////////
+ // Helpers
+ ////////////////////////////////////////////////////////////////////////
+
+ private void addCollectionAdapters(ObjectAdapterLookup objectAdapterLookup) {
+ for (final OneToManyAssociation otma : parentAdapter.getSpecification().getCollections()) {
+ final CollectionOid collectionOid = new CollectionOid(rootAdapterOid, otma);
+ final ObjectAdapter collectionAdapter = objectAdapterLookup.getAdapterFor(collectionOid);
+ if (collectionAdapter != null) {
+ // collection adapters are lazily created and so there may not be one.
+ addCollectionAdapter(otma, collectionAdapter);
+ }
+ }
+ }
+
+ private void addCollectionAdapter(final OneToManyAssociation otma, final ObjectAdapter collectionAdapter) {
+ Assert.assertNotNull(otma);
+ Assert.assertNotNull(collectionAdapter);
+ collectionAdapters.put(otma, collectionAdapter);
+ }
+
+ private Map<OneToManyAssociation, ObjectAdapter> getCollectionAdapters() {
+ return Collections.unmodifiableMap(collectionAdapters);
+ }
+
+
}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterHashMap.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterHashMap.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterHashMap.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterHashMap.java Sat Mar 24 14:01:35 2012
@@ -19,10 +19,11 @@
package org.apache.isis.runtimes.dflt.runtime.persistence.adaptermanager.internal;
-import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
+import com.google.common.collect.Maps;
+
import org.apache.log4j.Logger;
import org.apache.isis.core.commons.debug.DebugBuilder;
@@ -33,21 +34,10 @@ import org.apache.isis.core.metamodel.sp
public class OidAdapterHashMap implements OidAdapterMap {
private static final Logger LOG = Logger.getLogger(OidAdapterHashMap.class);
- private static final int DEFAULT_OID_ADAPTER_MAP_SIZE = 10;
+ public static final int DEFAULT_OID_ADAPTER_MAP_SIZE = 100;
- private final Hashtable<Oid, ObjectAdapter> adapterByOidMap;
+ private final Map<Oid, ObjectAdapter> adapterByOidMap = Maps.newHashMapWithExpectedSize(DEFAULT_OID_ADAPTER_MAP_SIZE);
- // ///////////////////////////////////////////////////////
- // Constructors
- // ///////////////////////////////////////////////////////
-
- public OidAdapterHashMap() {
- this(DEFAULT_OID_ADAPTER_MAP_SIZE);
- }
-
- public OidAdapterHashMap(final int capacity) {
- adapterByOidMap = new Hashtable<Oid, ObjectAdapter>(capacity);
- }
// ///////////////////////////////////////////////////////
// open, close
@@ -109,6 +99,7 @@ public class OidAdapterHashMap implement
return adapterByOidMap.remove(oid) != null;
}
+
// ///////////////////////////////////////////////////////
// getAdapter
// ///////////////////////////////////////////////////////
@@ -149,4 +140,5 @@ public class OidAdapterHashMap implement
}
}
+
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterMap.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterMap.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterMap.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/OidAdapterMap.java Sat Mar 24 14:01:35 2012
@@ -42,9 +42,11 @@ public interface OidAdapterMap extends D
*/
public boolean remove(final Oid oid);
+
/**
* Get the adapter identified by the specified OID.
*/
public ObjectAdapter getAdapter(final Oid oid);
+
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/PojoAdapterHashMap.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/PojoAdapterHashMap.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/PojoAdapterHashMap.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/adaptermanager/internal/PojoAdapterHashMap.java Sat Mar 24 14:01:35 2012
@@ -23,6 +23,8 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import com.google.common.collect.Maps;
+
import org.apache.commons.collections.map.IdentityMap;
import org.apache.log4j.Logger;
@@ -54,7 +56,7 @@ public class PojoAdapterHashMap implemen
}
private static final Logger LOG = Logger.getLogger(PojoAdapterHashMap.class);
- public static final int DEFAULT_POJO_ADAPTER_MAP_SIZE = 10;
+ public static final int DEFAULT_POJO_ADAPTER_MAP_SIZE = OidAdapterHashMap.DEFAULT_OID_ADAPTER_MAP_SIZE;
protected final Map<Object, ObjectAdapter> adapterByPojoMap;
@@ -67,8 +69,7 @@ public class PojoAdapterHashMap implemen
}
public PojoAdapterHashMap(final int capacity) {
- adapterByPojoMap = new HashMap<Object, ObjectAdapter>(capacity);
- // adapterByPojoMap = new IdentityMap(capacity);
+ adapterByPojoMap = Maps.newHashMapWithExpectedSize(capacity);
}
@Override
@@ -115,7 +116,9 @@ public class PojoAdapterHashMap implemen
@Override
public void add(final Object pojo, final ObjectAdapter adapter) {
adapterByPojoMap.put(key(pojo), adapter);
- LOG.debug("add adapter: #" + Long.toHexString(pojo.hashCode()) + " -> #" + Long.toHexString(adapter.hashCode()));
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("add adapter: #" + Long.toHexString(pojo.hashCode()) + " -> #" + Long.toHexString(adapter.hashCode()));
+ }
// log at end so that if toString needs adapters they're in maps.
if (adapter.getResolveState().isResolved()) {
if (LOG.isDebugEnabled()) {
@@ -126,7 +129,9 @@ public class PojoAdapterHashMap implemen
@Override
public void remove(final ObjectAdapter object) {
- LOG.debug("remove adapater: " + object);
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("remove adapter: " + object);
+ }
adapterByPojoMap.remove(key(object.getObject()));
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/internal/RuntimeContextFromSession.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/internal/RuntimeContextFromSession.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/internal/RuntimeContextFromSession.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/internal/RuntimeContextFromSession.java Sat Mar 24 14:01:35 2012
@@ -51,6 +51,7 @@ import org.apache.isis.core.metamodel.sp
import org.apache.isis.core.metamodel.spec.ObjectInstantiator;
import org.apache.isis.core.metamodel.spec.ObjectInstantiatorAbstract;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.runtimes.dflt.runtime.persistence.container.DomainObjectContainerObjectChanged;
import org.apache.isis.runtimes.dflt.runtime.persistence.container.DomainObjectContainerResolve;
import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
@@ -103,13 +104,13 @@ public class RuntimeContextFromSession e
}
@Override
- public ObjectAdapter adapterForAggregated(final Object domainObject, final ObjectAdapter parent) {
- return getRuntimeAdapterManager().adapterForAggregated(domainObject, parent);
- };
+ public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter) {
+ return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter);
+ }
@Override
- public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final IdentifiedHolder identifiedHolder) {
- return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter, identifiedHolder);
+ public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final ObjectAssociation association) {
+ return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter, association);
}
};
this.objectInstantiator = new ObjectInstantiatorAbstract() {
@@ -159,7 +160,7 @@ public class RuntimeContextFromSession e
@Override
public ObjectAdapter createAggregatedInstance(final ObjectSpecification spec, final ObjectAdapter parent) {
- return getPersistenceSession().createAggregatedInstance(spec, parent);
+ return getPersistenceSession().createInstance(spec, parent);
};
@Override
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreDelegating.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreDelegating.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreDelegating.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreDelegating.java Sat Mar 24 14:01:35 2012
@@ -24,6 +24,7 @@ import java.util.List;
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.CreateObjectCommand;
@@ -166,13 +167,13 @@ public abstract class IsisStoreDelegatin
// ////////////////////////////////////////////////
@Override
- public Oid getOidForService(ObjectSpecification serviceSpecification, final String name) {
- return underlying.getOidForService(serviceSpecification, name);
+ public RootOid getOidForService(ObjectSpecification serviceSpecification) {
+ return underlying.getOidForService(serviceSpecification);
}
@Override
- public void registerService(final String name, final Oid oid) {
- underlying.registerService(name, oid);
+ public void registerService(final RootOid rootOid) {
+ underlying.registerService(rootOid);
}
// ////////////////////////////////////////////////
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreLogger.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreLogger.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreLogger.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/IsisStoreLogger.java Sat Mar 24 14:01:35 2012
@@ -26,6 +26,7 @@ import org.apache.isis.core.commons.debu
import org.apache.isis.core.commons.factory.InstanceCreationException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.runtime.logging.Logger;
@@ -57,9 +58,9 @@ public class IsisStoreLogger extends Log
}
@Override
- public void registerService(final String name, final Oid oid) {
- log("register service " + name + " as " + oid);
- decorated.registerService(name, oid);
+ public void registerService(final RootOid rootOid) {
+ log("registering service: " + rootOid.enString());
+ decorated.registerService(rootOid);
}
@Override
@@ -103,10 +104,10 @@ public class IsisStoreLogger extends Log
}
@Override
- public Oid getOidForService(ObjectSpecification serviceSpecification, final String name) {
- final Oid oid = decorated.getOidForService(serviceSpecification, name);
- log("get OID for service " + name + ": " + oid);
- return oid;
+ public RootOid getOidForService(ObjectSpecification serviceSpec) {
+ final RootOid serviceOid = decorated.getOidForService(serviceSpec);
+ log("get OID for service: " + serviceOid.enString());
+ return serviceOid;
}
@Override
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/ObjectStorePersistence.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/ObjectStorePersistence.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/ObjectStorePersistence.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/ObjectStorePersistence.java Sat Mar 24 14:01:35 2012
@@ -21,10 +21,13 @@ package org.apache.isis.runtimes.dflt.ru
import java.util.List;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.components.SessionScopedComponent;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.debug.DebuggableWithTitle;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.runtimes.dflt.runtime.persistence.ObjectNotFoundException;
@@ -48,7 +51,7 @@ public interface ObjectStorePersistence
* up objects.
*
* <p>
- * This method is called only once after the {@link #init()} has been
+ * This method is called only once after the {@link #openSession(TestProxyReflector, IsisConfiguration, TestProxyPersistenceSessionFactory, TestProxyPersistenceSession, TestUserProfileStore, AuthenticationSession)} has been
* called. If it returns <code>false</code> then the framework will run the
* fixtures to initialise the object store.
*/
@@ -186,12 +189,11 @@ public interface ObjectStorePersistence
// Services
// ///////////////////////////////////////////////////////
- void registerService(String id, Oid oid);
+ void registerService(RootOid rootOid);
/**
* Returns the OID for the adapted service.
- * @param serviceSpecification TODO
*/
- Oid getOidForService(ObjectSpecification serviceSpecification, String id);
+ RootOid getOidForService(ObjectSpecification serviceSpec);
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStore.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/PersistenceSessionObjectStore.java Sat Mar 24 14:01:35 2012
@@ -26,9 +26,10 @@ import static org.hamcrest.CoreMatchers.
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
-import java.util.HashMap;
import java.util.Map;
+import com.google.common.collect.Maps;
+
import org.apache.log4j.Logger;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -39,6 +40,7 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
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.object.callbacks.CallbackUtils;
import org.apache.isis.core.metamodel.facets.object.callbacks.LoadedCallbackFacet;
import org.apache.isis.core.metamodel.facets.object.callbacks.LoadingCallbackFacet;
@@ -75,7 +77,7 @@ public class PersistenceSessionObjectSto
private static final Logger LOG = Logger.getLogger(PersistenceSessionObjectStore.class);
private final PersistAlgorithm persistAlgorithm;
private final ObjectStorePersistence objectStore;
- private final Map<String, Oid> services = new HashMap<String, Oid>();
+ private final Map<String, RootOid> servicesByObjectType = Maps.newHashMap();
/**
* Initialize the object store so that calls to this object store access
@@ -345,7 +347,7 @@ public class PersistenceSessionObjectSto
@Override
public void objectChanged(final ObjectAdapter adapter) {
- if (adapter.isTransient() || (adapter.isAggregated() && adapter.getAggregateRoot().isTransient())) {
+ if (adapter.isTransient() || (adapter.isParented() && adapter.getAggregateRoot(getAdapterManager()).isTransient())) {
addObjectChangedForPresentationLayer(adapter);
return;
}
@@ -540,22 +542,23 @@ public class PersistenceSessionObjectSto
// ///////////////////////////////////////////////////////////////////////////
@Override
- protected Oid getOidForService(ObjectSpecification serviceSpecification, final String name) {
- return getOidForServiceFromPersistenceLayer(serviceSpecification, name);
+ protected RootOid getOidForService(ObjectSpecification serviceSpec) {
+ return getOidForServiceFromPersistenceLayer(serviceSpec);
}
- private Oid getOidForServiceFromPersistenceLayer(ObjectSpecification serviceSpecification, final String name) {
- Oid oid = services.get(name);
+ private RootOid getOidForServiceFromPersistenceLayer(ObjectSpecification serviceSpecification) {
+ final String objectType = serviceSpecification.getObjectType();
+ RootOid oid = servicesByObjectType.get(objectType);
if (oid == null) {
- oid = objectStore.getOidForService(serviceSpecification, name);
- services.put(name, oid);
+ oid = objectStore.getOidForService(serviceSpecification);
+ servicesByObjectType.put(objectType, oid);
}
return oid;
}
@Override
- protected void registerService(final String name, final Oid oid) {
- objectStore.registerService(name, oid);
+ protected void registerService(final RootOid rootOid) {
+ objectStore.registerService(rootOid);
}
// ///////////////////////////////////////////////////////////////////////////
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java Sat Mar 24 14:01:35 2012
@@ -22,6 +22,7 @@ package org.apache.isis.runtimes.dflt.ru
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
public interface PersistAlgorithm {
+
public void makePersistent(final ObjectAdapter object, final ToPersistObjectSet adders);
public String name();
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithmAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithmAbstract.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithmAbstract.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/PersistAlgorithmAbstract.java Sat Mar 24 14:01:35 2012
@@ -90,7 +90,7 @@ public abstract class PersistAlgorithmAb
}
private boolean objectSpecNotPersistable(final ObjectAdapter adapter) {
- return !adapter.getSpecification().persistability().isPersistable() || adapter.isAggregated();
+ return !adapter.getSpecification().persistability().isPersistable() || adapter.isParented();
}
private boolean objectSpecIsService(final ObjectAdapter adapter) {
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/dflt/DefaultPersistAlgorithm.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/dflt/DefaultPersistAlgorithm.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/dflt/DefaultPersistAlgorithm.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/dflt/DefaultPersistAlgorithm.java Sat Mar 24 14:01:35 2012
@@ -45,22 +45,24 @@ public class DefaultPersistAlgorithm ext
}
@Override
- public void makePersistent(final ObjectAdapter object, final ToPersistObjectSet toPersistObjectSet) {
- if (object.getSpecification().isCollection()) {
- LOG.debug("persist " + object);
- if (object.getResolveState() == ResolveState.GHOST) {
- object.changeState(ResolveState.RESOLVING);
- object.changeState(ResolveState.RESOLVED);
- } else if (object.getResolveState() == ResolveState.TRANSIENT) {
- object.changeState(ResolveState.RESOLVED);
+ public void makePersistent(final ObjectAdapter adapter, final ToPersistObjectSet toPersistObjectSet) {
+ if (adapter.getSpecification().isCollection()) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("persist " + adapter);
}
- final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(object);
- for (final ObjectAdapter element : facet.iterable(object)) {
+ if (adapter.getResolveState() == ResolveState.GHOST) {
+ adapter.changeState(ResolveState.RESOLVING);
+ adapter.changeState(ResolveState.RESOLVED);
+ } else if (adapter.getResolveState() == ResolveState.TRANSIENT) {
+ adapter.changeState(ResolveState.RESOLVED);
+ }
+ final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(adapter);
+ for (final ObjectAdapter element : facet.iterable(adapter)) {
persist(element, toPersistObjectSet);
}
} else {
- assertObjectNotPersistentAndPersistable(object);
- persist(object, toPersistObjectSet);
+ assertObjectNotPersistentAndPersistable(adapter);
+ persist(adapter, toPersistObjectSet);
}
}
@@ -71,7 +73,9 @@ public class DefaultPersistAlgorithm ext
final List<ObjectAssociation> fields = object.getSpecification().getAssociations();
if (!object.getSpecification().isEncodeable() && fields.size() > 0) {
- LOG.debug("make persistent " + object);
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("make persistent " + object);
+ }
CallbackUtils.callCallback(object, PersistingCallbackFacet.class);
toPersistObjectSet.remapAsPersistent(object);
object.changeState(ResolveState.SERIALIZING_RESOLVED);
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/topdown/TopDownPersistAlgorithm.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/topdown/TopDownPersistAlgorithm.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/topdown/TopDownPersistAlgorithm.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/algorithm/topdown/TopDownPersistAlgorithm.java Sat Mar 24 14:01:35 2012
@@ -39,6 +39,7 @@ import org.apache.isis.runtimes.dflt.run
import org.apache.isis.runtimes.dflt.runtime.transaction.ObjectPersistenceException;
public class TopDownPersistAlgorithm extends PersistAlgorithmAbstract {
+
private static final Logger LOG = Logger.getLogger(TopDownPersistAlgorithm.class);
@Override
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransaction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransaction.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransaction.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/objectstore/transaction/ObjectStoreTransaction.java Sat Mar 24 14:01:35 2012
@@ -19,35 +19,75 @@
package org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction;
-import java.util.ArrayList;
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+
import java.util.Collections;
import java.util.List;
+import com.google.common.collect.Lists;
+
import org.apache.log4j.Logger;
import org.apache.isis.core.commons.lang.ToString;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ResolveState;
import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStoreTransactionManagement;
+import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction;
import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
import org.apache.isis.runtimes.dflt.runtime.system.transaction.MessageBroker;
import org.apache.isis.runtimes.dflt.runtime.system.transaction.UpdateNotifier;
-import org.apache.isis.runtimes.dflt.runtime.transaction.IsisTransactionAbstract;
-public class ObjectStoreTransaction extends IsisTransactionAbstract {
+public class ObjectStoreTransaction implements IsisTransaction {
+
private static final Logger LOG = Logger.getLogger(ObjectStoreTransaction.class);
private final ObjectStoreTransactionManagement objectStore;
- private final List<PersistenceCommand> commands = new ArrayList<PersistenceCommand>();
+ private final List<PersistenceCommand> commands = Lists.newArrayList();
+ private final IsisTransactionManager transactionManager;
+ private final MessageBroker messageBroker;
+ private final UpdateNotifier updateNotifier;
+
+ private State state;
+
+ private RuntimeException cause;
public ObjectStoreTransaction(final IsisTransactionManager transactionManager, final MessageBroker messageBroker, final UpdateNotifier updateNotifier, final ObjectStoreTransactionManagement objectStore) {
- super(transactionManager, messageBroker, updateNotifier);
+
+ ensureThatArg(transactionManager, is(not(nullValue())), "transaction manager is required");
+ ensureThatArg(messageBroker, is(not(nullValue())), "message broker is required");
+ ensureThatArg(updateNotifier, is(not(nullValue())), "update notifier is required");
+
+ this.transactionManager = transactionManager;
+ this.messageBroker = messageBroker;
+ this.updateNotifier = updateNotifier;
+
+ this.state = State.IN_PROGRESS;
+
this.objectStore = objectStore;
if (LOG.isDebugEnabled()) {
LOG.debug("new transaction " + this);
}
}
+ // ////////////////////////////////////////////////////////////////
+ // State
+ // ////////////////////////////////////////////////////////////////
+
+ @Override
+ public State getState() {
+ return state;
+ }
+
+ private void setState(final State state) {
+ this.state = state;
+ }
+
+
+
// //////////////////////////////////////////////////////////
// Commands
// //////////////////////////////////////////////////////////
@@ -111,20 +151,51 @@ public class ObjectStoreTransaction exte
commands.add(command);
}
- // //////////////////////////////////////////////////////////
- // abort
- // //////////////////////////////////////////////////////////
- @Override
- public void doAbort() {
- }
- // //////////////////////////////////////////////////////////
- // commit
- // //////////////////////////////////////////////////////////
+ // ////////////////////////////////////////////////////////////////
+ // flush
+ // ////////////////////////////////////////////////////////////////
- @Override
- public void doFlush() {
+ public final void flush() {
+ ensureThatState(getState().canFlush(), is(true), "state is: " + getState());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("flush transaction " + this);
+ }
+
+ try {
+ doFlush();
+ } catch (final RuntimeException ex) {
+ setState(State.MUST_ABORT);
+ setAbortCause(ex);
+ throw ex;
+ }
+ }
+
+ /**
+ * Mandatory hook method for subclasses to persist all pending changes.
+ *
+ * <p>
+ * Called by both {@link #commit()} and by {@link #flush()}:
+ * <table>
+ * <tr>
+ * <th>called from</th>
+ * <th>next {@link #getState() state} if ok</th>
+ * <th>next {@link #getState() state} if exception</th>
+ * </tr>
+ * <tr>
+ * <td>{@link #commit()}</td>
+ * <td>{@link State#COMMITTED}</td>
+ * <td>{@link State#ABORTED}</td>
+ * </tr>
+ * <tr>
+ * <td>{@link #flush()}</td>
+ * <td>{@link State#IN_PROGRESS}</td>
+ * <td>{@link State#MUST_ABORT}</td>
+ * </tr>
+ * </table>
+ */
+ private void doFlush() {
if (commands.size() > 0) {
objectStore.execute(Collections.unmodifiableList(commands));
@@ -132,7 +203,7 @@ public class ObjectStoreTransaction exte
for (final PersistenceCommand command : commands) {
if (command instanceof DestroyObjectCommand) {
final ObjectAdapter adapter = command.onObject();
- adapter.setOptimisticLock(null);
+ adapter.setVersion(null);
adapter.changeState(ResolveState.DESTROYED);
}
}
@@ -140,6 +211,69 @@ public class ObjectStoreTransaction exte
}
}
+
+
+ // ////////////////////////////////////////////////////////////////
+ // commit
+ // ////////////////////////////////////////////////////////////////
+
+ public final void commit() {
+ ensureThatState(getState().canCommit(), is(true), "state is: " + getState());
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("commit transaction " + this);
+ }
+
+ if (getState() == State.COMMITTED) {
+ if (LOG.isInfoEnabled()) {
+ LOG.info("already committed; ignoring");
+ }
+ return;
+ }
+
+ try {
+ doFlush();
+ setState(State.COMMITTED);
+ } catch (final RuntimeException ex) {
+ setAbortCause(ex);
+ throw ex;
+ }
+ }
+
+
+ // ////////////////////////////////////////////////////////////////
+ // abort
+ // ////////////////////////////////////////////////////////////////
+
+ public final void abort() {
+ ensureThatState(getState().canAbort(), is(true), "state is: " + getState());
+ if (LOG.isInfoEnabled()) {
+ LOG.info("abort transaction " + this);
+ }
+
+ setState(State.ABORTED);
+ }
+
+
+
+ protected void setAbortCause(final RuntimeException cause) {
+ this.cause = cause;
+ }
+
+ /**
+ * The cause (if any) for the transaction being aborted.
+ *
+ * <p>
+ * There will be a cause if an exception is thrown either by
+ * {@link #doFlush()} or {@link #doAbort()}.
+ */
+ @Override
+ public RuntimeException getAbortCause() {
+ return cause;
+ }
+
+
+
// //////////////////////////////////////////////////////////
// Helpers
// //////////////////////////////////////////////////////////
@@ -184,11 +318,49 @@ public class ObjectStoreTransaction exte
removeCommand(SaveObjectCommand.class, onObject);
}
+ // ////////////////////////////////////////////////////////////////
+ // toString
+ // ////////////////////////////////////////////////////////////////
+
@Override
+ public String toString() {
+ return appendTo(new ToString(this)).toString();
+ }
+
protected ToString appendTo(final ToString str) {
- super.appendTo(str);
+ str.append("state", state);
str.append("commands", commands.size());
return str;
}
+
+ // ////////////////////////////////////////////////////////////////
+ // Depenendencies (from constructor)
+ // ////////////////////////////////////////////////////////////////
+
+ /**
+ * Injected in constructor
+ */
+ @Override
+ public IsisTransactionManager getTransactionManager() {
+ return transactionManager;
+ }
+
+ /**
+ * Injected in constructor
+ */
+ @Override
+ public MessageBroker getMessageBroker() {
+ return messageBroker;
+ }
+
+ /**
+ * Injected in constructor
+ */
+ @Override
+ public UpdateNotifier getUpdateNotifier() {
+ return updateNotifier;
+ }
+
+
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/OidGeneratorAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/OidGeneratorAbstract.java?rev=1304796&r1=1304795&r2=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/OidGeneratorAbstract.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/OidGeneratorAbstract.java Sat Mar 24 14:01:35 2012
@@ -19,25 +19,16 @@
package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
-import org.apache.isis.core.metamodel.adapter.oid.stringable.hex.OidStringifierHex;
import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
public abstract class OidGeneratorAbstract implements OidGenerator {
private final OidStringifier oidStringifier;
- /**
- * Defaults to using the {@link OidStringifierHex} for
- * {@link #getOidStringifier()}. Subclasses can replace by calling
- * {@link #OidGeneratorAbstract(OidStringifier)} instead.
- */
- public OidGeneratorAbstract() {
- this(new OidStringifierHex());
- }
-
- public OidGeneratorAbstract(final OidStringifier oidStringifier) {
- this.oidStringifier = oidStringifier;
+ public OidGeneratorAbstract(Class<? extends Oid> oidClass) {
+ this.oidStringifier = new OidStringifier(oidClass);
}
// //////////////////////////////////////////////////////////////
@@ -58,12 +49,12 @@ public abstract class OidGeneratorAbstra
public void close() {
}
- /**
- * Default implemenation returns {@link OidStringifierHex}.
- *
- * <p>
- * Subclasses can replace through constructor if required.
- */
+
+ // //////////////////////////////////////////////////////////////
+ // OidStringifier
+ // //////////////////////////////////////////////////////////////
+
+
@Override
public final OidStringifier getOidStringifier() {
return oidStringifier;
Copied: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidDefault.java (from r1301354, incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/simple/SerialOid.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidDefault.java?p2=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidDefault.java&p1=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/simple/SerialOid.java&r1=1301354&r2=1304796&rev=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/simple/SerialOid.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidDefault.java Sat Mar 24 14:01:35 2012
@@ -17,139 +17,147 @@
* under the License.
*/
-package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.simple;
+package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.serial;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
import java.io.IOException;
import java.io.Serializable;
+import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.commons.lang.StringUtils;
+import com.google.common.base.Splitter;
import org.apache.isis.core.commons.encoding.DataInputExtended;
import org.apache.isis.core.commons.encoding.DataOutputExtended;
import org.apache.isis.core.commons.encoding.Encodable;
-import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.stringable.directly.DirectlyStringableOid;
+import org.apache.isis.core.commons.ensure.Ensure;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PojoAdapterBuilder;
-public final class SerialOid implements Encodable, Serializable, DirectlyStringableOid {
+public final class RootOidDefault implements Encodable, Serializable, RootOid {
private static final long serialVersionUID = 1L;
- static enum State {
- PERSISTENT, TRANSIENT;
- public boolean isTransient() {
- return this == TRANSIENT;
- }
- }
-
- public static SerialOid createPersistent(final long serialNo) {
- return new SerialOid(serialNo, State.PERSISTENT);
- }
-
- public static SerialOid createTransient(final long serialNo) {
- return new SerialOid(serialNo, State.TRANSIENT);
- }
+ private final String objectType;
+ private String identifier;
private int hashCode;
private State state;
- private SerialOid previous;
- private long newSerialNo;
- private long serialNo;
private String toString;
private String enString;
-
+
private static final String TOSTRING_SERIAL_NUM_PREFIX = "#";
- private static final String TOSTRING_PREVIOUS_CONCAT = "+";
+ private static final String OBJECT_TYPE_PREFIX = ":";
private static final String ENSTRING_SERIAL_NUM_PREFIX = ":";
- private static final String ENSTRING_SERIAL_NUM_CONCAT = "~";
-
+ // identifier cannot contain @ or #
+ // @ is used by AggregateOid as an appendix
+ // # is used in REST URLs, so want to avoid possible clashes
private static Pattern DESTRING_PATTERN =
Pattern.compile("^" +
- "(T?)OID" + ENSTRING_SERIAL_NUM_PREFIX + "(-?[0-9A-F]+)" +
- "("
- + ENSTRING_SERIAL_NUM_CONCAT + "(T?)OID" + ENSTRING_SERIAL_NUM_PREFIX + "(-?[0-9A-F]+)" +
- ")?" +
+ "(T?)OID" +
+ OBJECT_TYPE_PREFIX + "([^" + ENSTRING_SERIAL_NUM_PREFIX + "]+)" +
+ ENSTRING_SERIAL_NUM_PREFIX + "(-?[^#@]+)" +
"$");
+
// ////////////////////////////////////////////
- // Constructor
- // encode, decode
+ // Constructor, factory methods
// ////////////////////////////////////////////
- private SerialOid(final long serialNo, final State state) {
- this.serialNo = serialNo;
+ public static RootOidDefault create(String objectType, final String identifier) {
+ return new RootOidDefault(objectType, identifier, State.PERSISTENT);
+ }
+
+ public static RootOidDefault createTransient(String objectType, final String identifier) {
+ return new RootOidDefault(objectType, identifier, State.TRANSIENT);
+ }
+
+ /**
+ * Primarily for tests
+ */
+ public static RootOidDefault create(String oidStr) {
+ final Iterator<String> iterator = Splitter.on("|").split(oidStr).iterator();
+ if(!iterator.hasNext()) { throw new IllegalArgumentException("expected oid in form XXX|123; oidStr: " + oidStr); }
+ String objectType = iterator.next();
+ if(!iterator.hasNext()) { throw new IllegalArgumentException("expected oid in form XXX|123; oidStr: " + oidStr); }
+ String identifier = iterator.next();
+ return create(objectType, identifier);
+ }
+
+ /**
+ * Primarily for tests
+ */
+ public static RootOidDefault createTransient(String oidStr) {
+ final Iterator<String> iterator = Splitter.on("|").split(oidStr).iterator();
+ if(!iterator.hasNext()) { throw new IllegalArgumentException("expected oid in form XXX|123; oidStr: " + oidStr); }
+ String objectType = iterator.next();
+ if(!iterator.hasNext()) { throw new IllegalArgumentException("expected oid in form XXX|123; oidStr: " + oidStr); }
+ String identifier = iterator.next();
+ return createTransient(objectType, identifier);
+ }
+
+ public RootOidDefault(String objectType, final String identifier, final State state) {
+ this.objectType = objectType;
+ this.identifier = identifier;
this.state = state;
initialized();
}
- public SerialOid(final DataInputExtended input) throws IOException {
- this.serialNo = input.readLong();
- this.state = input.readBoolean() ? State.TRANSIENT : State.PERSISTENT;
- final boolean hasPrevious = input.readBoolean();
+ private void initialized() {
+ cacheState();
+ }
- if (hasPrevious) {
- final long previousSerialNo = input.readLong();
- final State previousState = input.readBoolean() ? State.TRANSIENT : State.PERSISTENT;
- this.previous = new SerialOid(previousSerialNo, previousState);
- }
+ // ////////////////////////////////////////////
+ // Encodeable, deString'able, enString
+ // ////////////////////////////////////////////
+
+ public RootOidDefault(final DataInputExtended input) throws IOException {
+ this.objectType = input.readUTF();
+ this.identifier = input.readUTF();
+ this.state = input.readBoolean() ? State.TRANSIENT : State.PERSISTENT;
initialized();
}
@Override
public void encode(final DataOutputExtended output) throws IOException {
- output.writeLong(this.serialNo);
+ output.writeUTF(this.objectType);
+ output.writeUTF(this.identifier);
output.writeBoolean(this.state.isTransient());
- final boolean hasPrevious = previous != null;
- output.writeBoolean(hasPrevious);
-
- if (hasPrevious) {
- output.writeLong(previous.serialNo);
- output.writeBoolean(previous.state.isTransient());
- }
}
- private void initialized() {
- cacheState();
- }
// ////////////////////////////////////////////
- // Directly Stringable
+ // deString'able, enString
// ////////////////////////////////////////////
/**
* @see DirectlyStringableOid
* @see #enString()
*/
- public static SerialOid deString(final String oidStr) {
+ public static RootOidDefault deString(final String oidStr) {
final Matcher matcher = DESTRING_PATTERN.matcher(oidStr);
if (!matcher.matches()) {
throw new IllegalArgumentException("Could not parse OID '" + oidStr + "'; should match pattern: " + DESTRING_PATTERN.toString());
}
final String transientStr = matcher.group(1);
- final String serialNumInHexStr = matcher.group(2);
- final String previousStr = matcher.group(3);
-
- final SerialOid oid = createOid(transientStr, serialNumInHexStr);
+ final String objectType = matcher.group(2);
+ final String serialNumInHexStr = matcher.group(3);
- if (!StringUtils.isEmpty(previousStr)) {
- final String previousTransientStr = matcher.group(4);
- final String previousSerialNumInHexStr = matcher.group(5);
-
- oid.previous = createOid(previousTransientStr, previousSerialNumInHexStr);
- }
+ final RootOidDefault oid = createOid(objectType, transientStr, serialNumInHexStr);
return oid;
}
- private static SerialOid createOid(final String transientStr, final String serialNumInHexStr) {
+ private static RootOidDefault createOid(String objectType, final String transientStr, final String identifier) {
final boolean isTransient = "T".equals(transientStr);
- final long serialNum = Long.parseLong(serialNumInHexStr, 16);
- return isTransient ? SerialOid.createTransient(serialNum) : SerialOid.createPersistent(serialNum);
+ return isTransient ? RootOidDefault.createTransient(objectType, identifier) : RootOidDefault.create(objectType, identifier);
}
/**
@@ -174,90 +182,54 @@ public final class SerialOid implements
}
// ////////////////////////////////////////////
- // isTransient
+ // Properties
// ////////////////////////////////////////////
@Override
- public boolean isTransient() {
- return state.isTransient();
+ public String getObjectType() {
+ return objectType;
}
- // ////////////////////////////////////////////
- // copyFrom
- // ////////////////////////////////////////////
@Override
- public void copyFrom(final Oid oid) {
- Assert.assertTrue(oid instanceof SerialOid);
- final SerialOid from = (SerialOid) oid;
- this.serialNo = from.serialNo;
- this.state = from.state;
- cacheState();
+ public boolean isTransient() {
+ return state.isTransient();
}
- // ////////////////////////////////////////////
- // Previous
- // ////////////////////////////////////////////
-
- @Override
- public Oid getPrevious() {
- return previous;
+ public String getIdentifier() {
+ return identifier;
}
- @Override
- public boolean hasPrevious() {
- return previous != null;
- }
-
- @Override
- public void clearPrevious() {
- previous = null;
- }
// ////////////////////////////////////////////
- // SerialNo (not API)
+ // makePersistent
// ////////////////////////////////////////////
- /**
- * Should be called prior to {@link #makePersistent()}
- */
- public void setId(final long serialNo) {
- Assert.assertTrue(state.isTransient());
- this.newSerialNo = serialNo;
- }
-
+
@Override
- public void makePersistent() {
- Assert.assertTrue(state.isTransient());
- Assert.assertTrue(newSerialNo != 0);
- previous = new SerialOid(this.serialNo, state);
- this.serialNo = newSerialNo;
- this.state = State.PERSISTENT;
- cacheState();
- }
+ public RootOidDefault asPersistent(String identifier) {
+ Ensure.ensureThatState(state.isTransient(), is(true));
+ Ensure.ensureThatArg(identifier, is(not(nullValue())));
- public long getSerialNo() {
- return serialNo;
+ return new RootOidDefault(objectType, identifier, State.PERSISTENT);
}
-
+
// ////////////////////////////////////////////
// equals, hashCode
// ////////////////////////////////////////////
private void cacheState() {
hashCode = 17;
- hashCode = 37 * hashCode + (int) (serialNo ^ (serialNo >>> 32));
+ hashCode = 37 * hashCode + objectType.hashCode();
+ hashCode = 37 * hashCode + identifier.hashCode();
hashCode = 37 * hashCode + (isTransient() ? 0 : 1);
- toString = asString(this, TOSTRING_SERIAL_NUM_PREFIX) + (previous == null ? "" : TOSTRING_PREVIOUS_CONCAT);
-
- enString = asString(this, ENSTRING_SERIAL_NUM_PREFIX) + (previous == null ? "" : ENSTRING_SERIAL_NUM_CONCAT + asString(previous, ENSTRING_SERIAL_NUM_PREFIX));
-
- //enString = asString(this, ENSTRING_SERIAL_NUM_PREFIX); //?? what was this
+ toString = asString(this, TOSTRING_SERIAL_NUM_PREFIX);
+ enString = asString(this, ENSTRING_SERIAL_NUM_PREFIX);
}
- private String asString(final SerialOid x, final String serialNumPrefix) {
- return (x.isTransient() ? "T" : "") + "OID" + serialNumPrefix + Long.toString(x.serialNo, 16).toUpperCase();
+ private static String asString(final RootOidDefault x, final String serialNumPrefix) {
+ return (x.isTransient() ? "T" : "") + "OID" + OBJECT_TYPE_PREFIX + x.objectType + serialNumPrefix + x.identifier;
}
/*
@@ -276,16 +248,11 @@ public final class SerialOid implements
if (getClass() != other.getClass()) {
return false;
}
- return equals((SerialOid) other);
+ return equals((RootOidDefault) other);
}
- /**
- * Overloaded to allow compiler to link directly if we know the compile-time
- * type. (possible performance improvement - called 166,000 times in normal
- * ref data fixture.
- */
- public boolean equals(final SerialOid other) {
- return other.serialNo == serialNo && other.state == state;
+ public boolean equals(final RootOidDefault other) {
+ return other.identifier == identifier && other.state == state;
}
@Override
@@ -299,4 +266,5 @@ public final class SerialOid implements
}
+
}
Copied: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGenerator.java (from r1301354, incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/simple/SimpleOidGenerator.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGenerator.java?p2=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGenerator.java&p1=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/simple/SimpleOidGenerator.java&r1=1301354&r2=1304796&rev=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/simple/SimpleOidGenerator.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGenerator.java Sat Mar 24 14:01:35 2012
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.simple;
+package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.serial;
import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
import static org.apache.isis.core.commons.matchers.IsisMatchers.greaterThan;
@@ -25,8 +25,11 @@ import static org.hamcrest.CoreMatchers.
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.stringable.directly.OidStringifierDirect;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.OidGeneratorAbstract;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
/**
@@ -34,10 +37,10 @@ import org.apache.isis.runtimes.dflt.run
*
* <p>
* Specifies the {@link OidStringifierDirect} as the
- * {@link #getOidStringifier() OID stringifier} ({@link SerialOid} is
+ * {@link #getOidStringifier() OID stringifier} ({@link RootOidDefault} is
* conformant)).
*/
-public class SimpleOidGenerator extends OidGeneratorAbstract {
+public class RootOidGenerator extends OidGeneratorAbstract {
public static class Memento {
private final long persistentSerialNumber;
@@ -65,7 +68,7 @@ public class SimpleOidGenerator extends
// constructor
// //////////////////////////////////////////////////////////////
- public SimpleOidGenerator() {
+ public RootOidGenerator() {
this(1);
}
@@ -73,16 +76,16 @@ public class SimpleOidGenerator extends
* Persistent {@link Oid}s count up from the provided seed parameter, while
* {@link Oid#isTransient()} transient {@link Oid}s count down.
*/
- public SimpleOidGenerator(final long seed) {
+ public RootOidGenerator(final long seed) {
this(seed, Long.MIN_VALUE + seed);
}
- public SimpleOidGenerator(final Memento memento) {
+ public RootOidGenerator(final Memento memento) {
this(memento.getPersistentSerialNumber(), memento.getTransientSerialNumber());
}
- private SimpleOidGenerator(final long persistentSerialNumber, final long transientSerialNumber) {
- super(new OidStringifierDirect(SerialOid.class));
+ private RootOidGenerator(final long persistentSerialNumber, final long transientSerialNumber) {
+ super(RootOidDefault.class);
ensureThatArg(persistentSerialNumber, is(greaterThan(0L)));
this.persistentSerialNumber = persistentSerialNumber;
this.transientSerialNumber = transientSerialNumber;
@@ -101,23 +104,21 @@ public class SimpleOidGenerator extends
// //////////////////////////////////////////////////////////////
@Override
- public synchronized SerialOid createTransientOid(final Object object) {
- return SerialOid.createTransient(transientSerialNumber--); // counts
- // down
+ public synchronized RootOid createTransientOid(final Object object) {
+ final ObjectSpecification objectSpec = getSpecificationLoader().loadSpecification(object.getClass());
+ final String objectType = objectSpec.getObjectType();
+
+ return RootOidDefault.createTransient(objectType, "" + (transientSerialNumber--)); // counts down
}
@Override
- public synchronized void convertTransientToPersistentOid(final Oid oid) {
- if (!(oid instanceof SerialOid)) {
- throw new IllegalArgumentException("Oid is not a SerialOid");
- }
- final SerialOid serialOid = (SerialOid) oid;
- serialOid.setId(persistentSerialNumber++); // counts up
- serialOid.makePersistent();
+ public synchronized RootOid asPersistent(final RootOid rootOid) {
+ final long next = persistentSerialNumber++; // counts up
+ return rootOid.asPersistent("" + next);
}
@Override
- public String createAggregateId(final Object pojo) {
+ public String createAggregateLocalId(final Object pojo) {
return Long.toHexString(aggregatedId++);
}
@@ -145,6 +146,10 @@ public class SimpleOidGenerator extends
// debug
// //////////////////////////////////////////////////////////////
+ protected SpecificationLoader getSpecificationLoader() {
+ return IsisContext.getSpecificationLoader();
+ }
+
@Override
public void debugData(final DebugBuilder debug) {
debug.appendln("Persistent", persistentSerialNumber);
Copied: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGeneratorSeededOnCurrentTime.java (from r1301354, incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/timebased/TimeBasedOidGenerator.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGeneratorSeededOnCurrentTime.java?p2=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGeneratorSeededOnCurrentTime.java&p1=incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/timebased/TimeBasedOidGenerator.java&r1=1301354&r2=1304796&rev=1304796&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/timebased/TimeBasedOidGenerator.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/oidgenerator/serial/RootOidGeneratorSeededOnCurrentTime.java Sat Mar 24 14:01:35 2012
@@ -17,28 +17,27 @@
* under the License.
*/
-package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.timebased;
+package org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.serial;
import java.util.Date;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.runtimes.dflt.runtime.persistence.oidgenerator.simple.SimpleOidGenerator;
/**
* Generates {@link Oid}s based on the system clock.
*
* <p>
* The same algorithm and {@link Oid} implementation as
- * {@link SimpleOidGenerator} is used; it just seeds with a different value.
+ * {@link RootOidGenerator} is used; it just seeds with a different value.
*/
-public class TimeBasedOidGenerator extends SimpleOidGenerator {
+public class RootOidGeneratorSeededOnCurrentTime extends RootOidGenerator {
@Override
public String name() {
return "Time Initialised OID Generator";
}
- public TimeBasedOidGenerator() {
+ public RootOidGeneratorSeededOnCurrentTime() {
super(new Date().getTime());
}
}