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 2015/09/14 08:37:18 UTC
[16/23] isis git commit: ISIS-1194: simplifications to AdapterManager
and PersistenceSession
ISIS-1194: simplifications to AdapterManager and PersistenceSession
- removed adapterFor(Objet, ObjectAdapter parent), since identical to adapterFor(Object) (now that we no longer have aggregated objects)
- renamed postStoreProcessing to enlistCreated... in PersistenceSession, and removed unnecessary checks.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/5e9cba77
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/5e9cba77
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/5e9cba77
Branch: refs/heads/ISIS-1194
Commit: 5e9cba77fb873136984fdf3a38119d5d5825cde2
Parents: 04ff36a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Sep 11 19:24:02 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:14 2015 +0100
----------------------------------------------------------------------
.../metamodel/adapter/mgr/AdapterManager.java | 11 +--
.../noruntime/RuntimeContextNoRuntime.java | 5 --
.../specimpl/OneToOneAssociationImpl.java | 2 +-
.../adaptermanager/AdapterManagerDefault.java | 83 +++++++++-----------
.../internal/RuntimeContextFromSession.java | 5 --
.../persistence/IsisLifecycleListener2.java | 4 +-
.../system/persistence/PersistenceSession.java | 23 ++----
...WrapperFactoryDefaultTest_wrappedObject.java | 4 +-
8 files changed, 49 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
index 9b8df59..cc0758b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
@@ -28,7 +28,6 @@ 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.version.ConcurrencyException;
import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
/**
@@ -162,10 +161,7 @@ public interface AdapterManager extends Injectable {
*
* <p>
* The pojo itself is recreated by delegating to a {@link org.apache.isis.core.metamodel.adapter.mgr.AdapterManager}.
- * The default impl just uses the {@link ObjectSpecification#createObject()};
- * however object stores (eg JDO/DataNucleus) can provide alternative implementations
- * in order to ensure that the created pojo is attached to a persistence context.
- *
+ *
* <p>
* The {@link ConcurrencyChecking} parameter determines whether concurrency checking is performed.
* If it is requested, then a check is made to ensure that the {@link Oid#getVersion() version}
@@ -187,11 +183,6 @@ public interface AdapterManager extends Injectable {
ObjectAdapter adapterFor(Object domainObject);
/**
- * Looks up or creates a standalone (value), aggregated or root adapter.
- */
- ObjectAdapter adapterFor(Object domainObject, ObjectAdapter parentAdapter);
-
- /**
* Looks up or creates a collection adapter.
*/
public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter parentAdapter, OneToManyAssociation collection);
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index d750448..fc8bdae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -121,11 +121,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
}
@Override
- public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter) {
- throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
- }
-
- @Override
public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, final OneToManyAssociation collection) {
throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index 963669f..b4deee8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -148,7 +148,7 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
return null;
}
- return getAdapterManager().adapterFor(referencedPojo, ownerAdapter);
+ return getAdapterManager().adapterFor(referencedPojo);
}
// UNUSED
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index bafb47d..96e6336 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -192,53 +192,6 @@ public class AdapterManagerDefault implements AdapterManager,
return mapAndInjectServices(newAdapter);
}
- private ObjectAdapter existingOrValueAdapter(Object pojo) {
-
- // attempt to locate adapter for the pojo
- final ObjectAdapter adapter = getAdapterFor(pojo);
- if (adapter != null) {
- return adapter;
- }
-
- // pojo may have been lazily loaded by object store, but we haven't yet seen it
- final ObjectAdapter lazilyLoadedAdapter =
- pojo instanceof Persistable
- ? persistenceSession.mapPersistent((Persistable) pojo)
- : null;
- if(lazilyLoadedAdapter != null) {
- return lazilyLoadedAdapter;
- }
-
- // need to create (and possibly map) the adapter.
- final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-
- // we create value facets as standalone (so not added to maps)
- if (objSpec.containsFacet(ValueFacet.class)) {
- ObjectAdapter valueAdapter = createStandaloneAdapter(pojo);
- return valueAdapter;
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter parentAdapter) {
-
- Ensure.ensureThatArg(parentAdapter, is(not(nullValue())));
-
- final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
- if(existingOrValueAdapter != null) {
- return existingOrValueAdapter;
- }
-
- final ObjectAdapter newAdapter = createTransientOrViewModelRootAdapter(pojo);
-
- return mapAndInjectServices(newAdapter);
- }
-
/**
* {@inheritDoc}
@@ -295,7 +248,6 @@ public class AdapterManagerDefault implements AdapterManager,
-
@Override
public ObjectAdapter adapterFor(final RootOid rootOid) {
return adapterFor(rootOid, AdapterManager.ConcurrencyChecking.NO_CHECK);
@@ -363,6 +315,41 @@ public class AdapterManagerDefault implements AdapterManager,
return adapter;
}
+
+ private ObjectAdapter existingOrValueAdapter(Object pojo) {
+
+ // attempt to locate adapter for the pojo
+ ObjectAdapter adapter = getAdapterFor(pojo);
+ if (adapter != null) {
+ return adapter;
+ }
+
+ // pojo may have been lazily loaded by object store, but we haven't yet seen it
+ if (pojo instanceof Persistable) {
+ adapter = persistenceSession.mapPersistent((Persistable) pojo);
+
+ // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
+ // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
+ } else {
+ adapter = null;
+ }
+
+ if(adapter != null) {
+ return adapter;
+ }
+
+ // need to create (and possibly map) the adapter.
+ final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
+
+ // we create value facets as standalone (so not added to maps)
+ if (objSpec.containsFacet(ValueFacet.class)) {
+ adapter = createStandaloneAdapter(pojo);
+ return adapter;
+ }
+
+ return null;
+ }
+
private Object recreatePojo(RootOid oid) {
if(oid.isTransient() || oid.isViewModel()) {
return recreatePojoDefault(oid);
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index c9e852b..89a1e7b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -110,11 +110,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
}
@Override
- 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 OneToManyAssociation collection) {
return getRuntimeAdapterManager().adapterFor(pojo, ownerAdapter, collection);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
index 4e400bc..42cb9ff 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLifecycleListener2.java
@@ -85,13 +85,13 @@ public class IsisLifecycleListener2
@Override
public void postStore(InstanceLifecycleEvent event) {
final Persistable pojo = Utils.persistenceCapableFor(event);
- persistenceSession.postStoreProcessingFor(pojo);
+ persistenceSession.enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(pojo);
}
@Override
public void preDirty(InstanceLifecycleEvent event) {
final Persistable pojo = Utils.persistenceCapableFor(event);
- persistenceSession.preDirtyProcessingFor(pojo);
+ persistenceSession.enlistUpdatingAndInvokeIsisUpdatingCallback(pojo);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 0281482..8448ee6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -26,7 +26,6 @@ import java.util.Map;
import javax.jdo.FetchGroup;
import javax.jdo.FetchPlan;
-import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import com.google.common.collect.Lists;
@@ -1324,19 +1323,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* The implementation therefore uses Isis' {@link org.apache.isis.core.metamodel.adapter.oid.Oid#isTransient() oid}
* to determine which callback to fire.
*/
- public void postStoreProcessingFor(final Persistable pojo) {
- ensureRootObject(pojo);
-
- // assert is persistent
- if (!pojo.dnIsPersistent()) {
- throw new IllegalStateException(
- "Pojo JDO state is not persistent! pojo dnOid: " + JDOHelper.getObjectId(pojo));
- }
+ public void enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(final Persistable pojo) {
+ final ObjectAdapter objectAdapter = adapterFor(pojo);
- final ObjectAdapter adapter = getAdapterFor(pojo);
- final RootOid isisOid = (RootOid) adapter.getOid();
+ final ObjectAdapter adapter = objectAdapter;
+ final RootOid rootOid = (RootOid) adapter.getOid(); // ok since this is for a Persistable
- if (isisOid.isTransient()) {
+ if (rootOid.isTransient()) {
// persisting
final RootOid persistentOid = oidGenerator.createPersistentOrViewModelOid(pojo);
@@ -1346,6 +1339,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
final IsisTransaction transaction = getCurrentTransaction();
transaction.enlistCreated(adapter);
+
} else {
// updating;
// the callback and transaction.enlist are done in the preDirty callback
@@ -1358,7 +1352,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
- public void preDirtyProcessingFor(final Persistable pojo) {
+ public void enlistUpdatingAndInvokeIsisUpdatingCallback(final Persistable pojo) {
ObjectAdapter adapter = getAdapterFor(pojo);
if (adapter == null) {
// seen this happen in the case when a parent entity (LeaseItem) has a collection of children
@@ -1387,8 +1381,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
CallbackFacet.Util.callCallback(adapter, UpdatingCallbackFacet.class);
- final IsisTransaction transaction = getCurrentTransaction();
- transaction.enlistUpdating(adapter);
+ getCurrentTransaction().enlistUpdating(adapter);
ensureRootObject(pojo);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5e9cba77/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index 19b6d46..7c3559d 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -262,7 +262,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
context.checking(new Expectations() {
{
- oneOf(mockAdapterManager).adapterFor("Jones", mockEmployeeAdapter);
+ oneOf(mockAdapterManager).adapterFor("Jones");
will(returnValue(mockAdapterForStringJones));
}
});
@@ -359,7 +359,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
private void allowingEmployeeHasSmithAdapter() {
context.checking(new Expectations() {
{
- allowing(mockAdapterManager).adapterFor("Smith", mockEmployeeAdapter);
+ allowing(mockAdapterManager).adapterFor("Smith");
will(returnValue(mockAdapterForStringSmith));
allowing(mockAdapterForStringSmith).getObject();