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/11 00:09:12 UTC
[48/50] isis git commit: ISIS-1194: pass PojoAdapter to
PersistenceSession,
rather than use IsisContext (and don't pass in AdapterManager)
ISIS-1194: pass PojoAdapter to PersistenceSession, rather than use IsisContext (and don't pass in AdapterManager)
Also:
- tidy up of comments/regions
- inlining of getters to dependencies used only internally
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/97eed796
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/97eed796
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/97eed796
Branch: refs/heads/master
Commit: 97eed79626f6ee691333ff547d5057beb4a693a2
Parents: 775871c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Sep 10 17:58:53 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Sep 10 17:58:53 2015 +0100
----------------------------------------------------------------------
.../persistence/adapter/PojoAdapter.java | 139 +++++++++----------
.../adaptermanager/AdapterManagerDefault.java | 2 +-
.../system/persistence/PersistenceSession.java | 61 ++++----
.../adapterfactory/pojo/PojoAdapterTest.java | 2 +-
.../transaction/PojoAdapterBuilder.java | 2 +-
5 files changed, 94 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index dc44b22..e41acfc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -29,10 +29,9 @@ import org.apache.isis.core.commons.ensure.Ensure;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.util.ToString;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
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;
@@ -43,7 +42,7 @@ import org.apache.isis.core.metamodel.spec.InstanceAbstract;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.Specification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import static org.hamcrest.CoreMatchers.is;
@@ -53,36 +52,40 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
private final static Logger LOG = LoggerFactory.getLogger(PojoAdapter.class);
- private static final int INCOMPLETE_COLLECTION = -1;
+ //region > Constructor, fields, finalizer
+ private final AuthenticationSession authenticationSession;
private final SpecificationLoader specificationLoader;
- private final AdapterManager adapterManager;
private final Localization localization;
-
+ private final PersistenceSession persistenceSession;
+
+ /**
+ * can be {@link #replacePojo(Object) replace}d.
+ */
private Object pojo;
+ /**
+ * can be {@link #replaceOid(Oid) replace}d.
+ */
private Oid oid;
+ /**
+ * only for standalone or parented collections.
+ */
private ElementSpecificationProvider elementSpecificationProvider;
- private AuthenticationSession authenticationSession;
-
-
- // ///////////////////////////////////////////////////////////////////
- // Constructor, finalizer
- // ///////////////////////////////////////////////////////////////////
-
public PojoAdapter(
final Object pojo,
final Oid oid,
final AuthenticationSession authenticationSession,
final Localization localization,
final SpecificationLoader specificationLoader,
- final AdapterManager adapterManager) {
+ final PersistenceSession persistenceSession) {
+
+ this.persistenceSession = persistenceSession;
Ensure.ensureThatArg(specificationLoader, is(notNullValue()));
this.specificationLoader = specificationLoader;
- this.adapterManager = adapterManager;
this.localization = localization;
this.authenticationSession = authenticationSession;
@@ -92,19 +95,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
this.pojo = pojo;
this.oid = oid;
}
+ //endregion
-
- // ///////////////////////////////////////////////////////////////////
- // Specification
- // ///////////////////////////////////////////////////////////////////
-
- @Override
- protected ObjectSpecification loadSpecification() {
- final Class<?> aClass = getObject().getClass();
- final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
- //String defaultTitle = "A" + (" " + specification.getSingularName()).toLowerCase();
- return specification;
- }
+ //region > getSpecification
/**
* Downcasts {@link #getSpecification()}.
@@ -114,10 +107,16 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
return (ObjectSpecification) super.getSpecification();
}
- // ///////////////////////////////////////////////////////////////////
- // Object, replacePojo
- // ///////////////////////////////////////////////////////////////////
+ @Override
+ protected ObjectSpecification loadSpecification() {
+ final Class<?> aClass = getObject().getClass();
+ final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
+ return specification;
+ }
+
+ //endregion
+ //region > getObject, replacePojo
@Override
public Object getObject() {
return pojo;
@@ -132,17 +131,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
public void replacePojo(final Object pojo) {
this.pojo = pojo;
}
+ //endregion
-
-
-
-
-
-
- // ///////////////////////////////////////////////////////////////////
- // Oid
- // ///////////////////////////////////////////////////////////////////
-
+ //region > getOid, replaceOid
@Override
public Oid getOid() {
return oid;
@@ -153,6 +144,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
Ensure.ensureThatArg(oid, is(notNullValue())); // values have no oid, so cannot be replaced
this.oid = persistedOid;
}
+ //endregion
+
+ //region > isParentedCollection, isValue
@Override
public boolean isParentedCollection() {
@@ -164,6 +158,10 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
return oid == null;
}
+ //endregion
+
+ //region > isTransient, representsPersistent, isDestroyed
+
@Override
public boolean isTransient() {
if(getSpecification().isService() || getSpecification().isViewModel()) {
@@ -214,7 +212,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
}
return false;
}
+ //endregion
+ //region > getAggregateRoot
@Override
public ObjectAdapter getAggregateRoot() {
if(!isParentedCollection()) {
@@ -222,20 +222,16 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
}
ParentedCollectionOid collectionOid = (ParentedCollectionOid) oid;
final Oid rootOid = collectionOid.getRootOid();
- ObjectAdapter rootadapter = adapterManager.getAdapterFor(rootOid);
+ ObjectAdapter rootadapter = persistenceSession.getAdapterFor(rootOid);
if(rootadapter == null) {
- final Oid parentOidNowPersisted = getPersistenceSession().remappedFrom(rootOid);
- rootadapter = adapterManager.getAdapterFor(parentOidNowPersisted);
+ final Oid parentOidNowPersisted = persistenceSession.remappedFrom(rootOid);
+ rootadapter = persistenceSession.getAdapterFor(parentOidNowPersisted);
}
return rootadapter;
}
+ //endregion
-
-
- // ///////////////////////////////////////////////////////////////////
- // Version
- // (nb: delegates to parent if parented)
- // ///////////////////////////////////////////////////////////////////
+ //region > getVersion, setVersion, checkLock
@Override
public Version getVersion() {
@@ -264,7 +260,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
if(ConcurrencyChecking.isCurrentlyEnabled()) {
LOG.info("concurrency conflict detected on " + thisOid + " (" + otherVersion + ")");
- final String currentUser = getAuthenticationSession().getUserName();
+ final String currentUser = authenticationSession.getUserName();
throw new ConcurrencyException(currentUser, thisOid, thisVersion, otherVersion);
} else {
LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion + ")");
@@ -289,10 +285,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
return version == null || otherVersion == null || otherVersion.different(version);
}
- // ///////////////////////////////////////////////////////////////////
- // Title, toString
- // ///////////////////////////////////////////////////////////////////
+ //endregion
+ //region > titleString
/**
* Returns the title from the underlying business object.
*
@@ -409,10 +404,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
}
return "S"; // standalone adapter (value)
}
+ //endregion
- // ///////////////////////////////////////////////////////////////////
- // IconName
- // ///////////////////////////////////////////////////////////////////
+ //region > iconName
/**
* Returns the name of the icon to use to represent this object.
@@ -422,9 +416,9 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
return getSpecification().getIconName(this);
}
- // ///////////////////////////////////////////////////////////////////
- // ElementType
- // ///////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > elementSpecification
@Override
public ObjectSpecification getElementSpecification() {
@@ -434,14 +428,21 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
return elementSpecificationProvider.getElementType();
}
+ /**
+ * Called whenever there is a {@link org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet} present.
+ *
+ * <p>
+ * Specifically, if an action which has been annotated (is copied by {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet action invocation facet}), and for a parented collection
+ * (is copied by the {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault adapter manager} when {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#adapterFor(Object, ObjectAdapter, OneToManyAssociation) creating} an adapter for a collection.
+ * </p>
+ */
@Override
public void setElementSpecificationProvider(final ElementSpecificationProvider elementSpecificationProvider) {
this.elementSpecificationProvider = elementSpecificationProvider;
}
+ //endregion
- // /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
+ //region > getInstance (unsupported for this impl)
/**
* Not supported by this implementation.
@@ -451,18 +452,6 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
throw new UnsupportedOperationException();
}
-
-
- ////////////////////////////////////////////////////////////////////
- // Dependencies (from context)
- ////////////////////////////////////////////////////////////////////
-
- protected PersistenceSession getPersistenceSession() {
- return IsisContext.getPersistenceSession();
- }
-
- protected AuthenticationSession getAuthenticationSession() {
- return authenticationSession;
- }
+ //endregion
}
http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/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 954bdc9..89c00bc 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
@@ -646,7 +646,7 @@ public class AdapterManagerDefault implements AdapterManager,
return new PojoAdapter(
pojo, oid,
authenticationSession, getLocalization(),
- specificationLoader, this);
+ specificationLoader, persistenceSession);
}
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/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 53ecf94..9afba03 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
@@ -127,7 +127,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
public static final String DATANUCLEUS_PROPERTIES_ROOT = ROOT_KEY + "impl.";
- //region > constructor, fields
+ //region > constructor, fields, finalize()
private final ObjectFactory objectFactory;
private final PersistenceSessionFactory persistenceSessionFactory;
@@ -203,6 +203,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
}
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ LOG.debug("finalizing persistence session");
+ }
+
//endregion
//region > open
@@ -494,7 +500,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
final PersistenceQueryProcessor<? extends PersistenceQuery> processor = lookupProcessorFor(persistenceQuery);
- final List<ObjectAdapter> instances = getTransactionManager().executeWithinTransaction(
+ final List<ObjectAdapter> instances = transactionManager.executeWithinTransaction(
new TransactionalClosureWithReturn<List<ObjectAdapter>>() {
@Override
public List<ObjectAdapter> execute() {
@@ -540,23 +546,9 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
return persistenceQueryProcessor.process((Q) persistenceQuery);
}
-
-
//endregion
- //region > Services
-
- /**
- * Returns the OID for the adapted service. This allows a service object to
- * be given the same OID that it had when it was created in a different
- * session.
- */
- protected RootOid getOidForService(final ObjectSpecification serviceSpec) {
- final ObjectSpecId serviceSpecId = serviceSpec.getSpecId();
- final RootOid oid = this.registeredServices.get(serviceSpecId);
- return oid;
- }
-
+ //region > getServices, getService
// REVIEW why does this get called multiple times when starting up
public List<ObjectAdapter> getServices() {
@@ -577,6 +569,17 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
return serviceAdapter;
}
+ /**
+ * Returns the OID for the adapted service. This allows a service object to
+ * be given the same OID that it had when it was created in a different
+ * session.
+ */
+ private RootOid getOidForService(final ObjectSpecification serviceSpec) {
+ final ObjectSpecId serviceSpecId = serviceSpec.getSpecId();
+ final RootOid oid = this.registeredServices.get(serviceSpecId);
+ return oid;
+ }
+
//endregion
//region > fixture installation
@@ -631,11 +634,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
return !installFixtures;
}
- @Override
- protected void finalize() throws Throwable {
- super.finalize();
- LOG.debug("finalizing persistence session");
- }
//endregion
//region > loadObject
@@ -694,12 +692,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
// could be refactored to use getAdapterManager().adapterFor(...)
ensureThatArg(oid, is(notNullValue()));
- final ObjectAdapter adapter = getAdapterManager().getAdapterFor(oid);
+ final ObjectAdapter adapter = adapterManager.getAdapterFor(oid);
if (adapter != null) {
return adapter;
}
- return getTransactionManager().executeWithinTransaction(
+ return transactionManager.executeWithinTransaction(
new TransactionalClosureWithReturn<ObjectAdapter>() {
@Override
public ObjectAdapter execute() {
@@ -708,7 +706,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
final Object pojo = loadPojo(oid);
- return getAdapterManager().mapRecreatedPojo(oid, pojo);
+ return adapterManager.mapRecreatedPojo(oid, pojo);
}
});
}
@@ -899,15 +897,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
if (LOG.isDebugEnabled()) {
LOG.debug("destroyObject " + adapter);
}
- getTransactionManager().executeWithinTransaction(new TransactionalClosure() {
-
+ transactionManager.executeWithinTransaction(new TransactionalClosure() {
@Override
public void execute() {
final DestroyObjectCommand command = newDestroyObjectCommand(adapter);
- getTransactionManager().addCommand(command);
+ transactionManager.addCommand(command);
}
-
-
});
}
@@ -934,7 +929,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* </p>
*
*/
- public CreateObjectCommand newCreateObjectCommand(final ObjectAdapter adapter) {
+ private CreateObjectCommand newCreateObjectCommand(final ObjectAdapter adapter) {
ensureOpened();
ensureInSession();
@@ -951,9 +946,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
ensureThatContext(IsisContext.inSession(), is(true));
}
-
-
- public DestroyObjectCommand newDestroyObjectCommand(final ObjectAdapter adapter) {
+ private DestroyObjectCommand newDestroyObjectCommand(final ObjectAdapter adapter) {
ensureOpened();
ensureInSession();
http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
index 687a944..04702b2 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
@@ -70,7 +70,7 @@ public class PojoAdapterTest {
domainObject = new RuntimeTestPojo();
adapter = new PojoAdapter(domainObject, RootOid.create(ObjectSpecId.of("CUS"), "1"), mockAuthenticationSession,
- mockLocalization, mockSpecificationLoader, mockObjectAdapterLookup);
+ mockLocalization, mockSpecificationLoader, persistenceSession);
adapter.setVersion(mockVersion);
allowUnimportantMethodCallsOn(mockVersion);
http://git-wip-us.apache.org/repos/asf/isis/blob/97eed796/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 1145141..68c5ec5 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -200,7 +200,7 @@ public class PojoAdapterBuilder {
final RootOid rootOid = persistence.createOid(objectSpecId, identifier);
final Oid oid = type.oidFor(rootOid, objectSpecId, aggregatedId);
final PojoAdapter pojoAdapter = new PojoAdapter(pojo, oid, authenticationSession, localization,
- specificationLoader, objectAdapterLookup) {
+ specificationLoader, persistenceSession) {
@Override
public ObjectSpecification getSpecification() { return objectSpec != null? objectSpec: super.getSpecification(); }
@Override