http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/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 af1619f..8d4c1cb 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 @@ -18,7 +18,6 @@ */ package org.apache.isis.core.runtime.system.persistence; -import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.common.collect.Lists; @@ -26,8 +25,6 @@ import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.isis.applib.query.Query; -import org.apache.isis.applib.query.QueryDefault; -import org.apache.isis.applib.query.QueryFindAllInstances; import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.commons.components.ApplicationScopedComponent; import org.apache.isis.core.commons.components.SessionScopedComponent; @@ -48,10 +45,7 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.isis.core.metamodel.services.ServiceUtil; import org.apache.isis.core.metamodel.services.ServicesInjectorSpi; import org.apache.isis.core.metamodel.services.container.query.QueryCardinality; -import org.apache.isis.core.metamodel.services.container.query.QueryFindByPattern; -import org.apache.isis.core.metamodel.services.container.query.QueryFindByTitle; import org.apache.isis.core.metamodel.spec.*; -import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag; import org.apache.isis.core.runtime.persistence.NotPersistableException; import org.apache.isis.core.runtime.persistence.adapter.PojoAdapterFactory; @@ -59,19 +53,19 @@ import org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDef import org.apache.isis.core.runtime.persistence.adaptermanager.PojoRecreatorUnified; import org.apache.isis.core.runtime.persistence.objectstore.algorithm.PersistAlgorithm; import org.apache.isis.core.runtime.persistence.objectstore.algorithm.PersistAlgorithmUnified; -import org.apache.isis.core.runtime.persistence.objectstore.algorithm.ToPersistObjectSet; import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand; import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand; import org.apache.isis.core.runtime.persistence.objectstore.transaction.SaveObjectCommand; -import org.apache.isis.core.runtime.persistence.query.*; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.transaction.*; +import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; +import org.apache.isis.core.runtime.system.transaction.TransactionalClosureAbstract; +import org.apache.isis.core.runtime.system.transaction.TransactionalClosureWithReturnAbstract; 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.*; -public class PersistenceSession implements Persistor, EnlistedObjectDirtying, ToPersistObjectSet, RecreatedPojoRemapper, SessionScopedComponent, DebuggableWithTitle { +public class PersistenceSession implements SessionScopedComponent, DebuggableWithTitle { private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class); @@ -87,13 +81,14 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To private final ObjectStore objectStore; private final Map<ObjectSpecId, RootOid> servicesByObjectType = Maps.newHashMap(); - private boolean dirtiableSupport; + private final PersistenceQueryFactory persistenceQueryFactory; - /** - * Injected using setter-based injection. - */ private IsisTransactionManager transactionManager; + private boolean dirtiableSupport = true; + + + private static enum State { NOT_INITIALIZED, OPEN, CLOSED } @@ -124,6 +119,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To this.oidGenerator = new OidGenerator(new IdentifierGeneratorUnified(configuration)); this.adapterManager = new AdapterManagerDefault(new PojoRecreatorUnified(configuration)); this.persistAlgorithm = new PersistAlgorithmUnified(configuration); + this.objectStore = objectStore; + + this.persistenceQueryFactory = new PersistenceQueryFactory(getSpecificationLoader(), adapterManager); + this.transactionManager = new IsisTransactionManager(this, objectStore, servicesInjector); setState(State.NOT_INITIALIZED); @@ -131,7 +130,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To LOG.debug("creating " + this); } - this.objectStore = objectStore; } // /////////////////////////////////////////////////////////////////////////// @@ -208,7 +206,7 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To ObjectAdapter serviceAdapter = existingOid == null ? getAdapterManager().adapterFor(service) - : mapRecreatedPojo(existingOid, service); + : getAdapterManager().mapRecreatedPojo(existingOid, service); if (serviceAdapter.getOid().isTransient()) { adapterManager.remapAsPersistent(serviceAdapter, null); } @@ -287,7 +285,27 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // Factory // /////////////////////////////////////////////////////////////////////////// - @Override + /** + * Create a root or standalone {@link ObjectAdapter adapter}. + * + * <p> + * Creates a new instance of the specified type and returns it in an adapter + * whose resolved state set to {@link ResolveState#TRANSIENT} (except if the + * type is marked as {@link ObjectSpecification#isValueOrIsParented() + * aggregated} in which case it will be set to {@link ResolveState#VALUE}). + * + * <p> + * The returned object will be initialised (had the relevant callback + * lifecycle methods invoked). + * + * <p> + * While creating the object it will be initialised with default values and + * its created lifecycle method (its logical constructor) will be invoked. + * + * <p> + * This method is ultimately delegated to by the + * {@link org.apache.isis.applib.DomainObjectContainer}. + */ public ObjectAdapter createTransientInstance(final ObjectSpecification objectSpec) { if (LOG.isDebugEnabled()) { LOG.debug("creating transient instance of " + objectSpec); @@ -308,7 +326,20 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To return objectSpec.initialize(adapter); } - @Override + /** + * Creates a new instance of the specified type and returns an adapter with + * an aggregated OID that show that this new object belongs to the specified + * parent. The new object's resolved state is set to + * {@link ResolveState#RESOLVED} as it state is part of it parent. + * + * <p> + * While creating the object it will be initialised with default values and + * its created lifecycle method (its logical constructor) will be invoked. + * + * <p> + * This method is ultimately delegated to by the + * {@link org.apache.isis.applib.DomainObjectContainer}. + */ public ObjectAdapter createAggregatedInstance(final ObjectSpecification objectSpec, final ObjectAdapter parentAdapter) { if (LOG.isDebugEnabled()) { LOG.debug("creating aggregated instance of " + objectSpec); @@ -328,7 +359,16 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // findInstances, getInstances // /////////////////////////////////////////////////////////////////////////// - @Override + /** + * Finds and returns instances that match the specified query. + * + * <p> + * The {@link QueryCardinality} determines whether all instances or just the + * first matching instance is returned. + * + * @throws org.apache.isis.core.runtime.persistence.UnsupportedFindException + * if the criteria is not support by this persistor + */ public <T> ObjectAdapter findInstances(final Query<T> query, final QueryCardinality cardinality) { final PersistenceQuery persistenceQuery = createPersistenceQueryFor(query, cardinality); if (persistenceQuery == null) { @@ -337,7 +377,19 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To return findInstances(persistenceQuery); } - @Override + /** + * Finds and returns instances that match the specified + * {@link PersistenceQuery}. + * + * <p> + * Compared to {@link #findInstances(Query, QueryCardinality)}, not that + * there is no {@link QueryCardinality} parameter. That's because + * {@link PersistenceQuery} intrinsically carry the knowledge as to how many + * rows they return. + * + * @throws org.apache.isis.core.runtime.persistence.UnsupportedFindException + * if the criteria is not support by this persistor + */ public ObjectAdapter findInstances(final PersistenceQuery persistenceQuery) { final List<ObjectAdapter> instances = getInstances(persistenceQuery); final ObjectSpecification specification = persistenceQuery.getSpecification(); @@ -350,53 +402,9 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To * {@link PersistenceQuery NOF-internal representation}. */ protected final PersistenceQuery createPersistenceQueryFor(final Query<?> query, final QueryCardinality cardinality) { - if (LOG.isDebugEnabled()) { - LOG.debug("createPersistenceQueryFor: " + query.getDescription()); - } - final ObjectSpecification noSpec = specFor(query); - if (query instanceof QueryFindAllInstances) { - final QueryFindAllInstances<?> queryFindAllInstances = (QueryFindAllInstances<?>) query; - return new PersistenceQueryFindAllInstances(noSpec, queryFindAllInstances.getStart(), queryFindAllInstances.getCount()); - } - if (query instanceof QueryFindByTitle) { - final QueryFindByTitle<?> queryByTitle = (QueryFindByTitle<?>) query; - final String title = queryByTitle.getTitle(); - return new PersistenceQueryFindByTitle(noSpec, title, queryByTitle.getStart(), queryByTitle.getCount()); - } - if (query instanceof QueryFindByPattern) { - final QueryFindByPattern<?> queryByPattern = (QueryFindByPattern<?>) query; - final Object pattern = queryByPattern.getPattern(); - final ObjectAdapter patternAdapter = getAdapterManager().adapterFor(pattern); - return new PersistenceQueryFindByPattern(noSpec, patternAdapter, queryByPattern.getStart(), queryByPattern.getCount()); - } - if (query instanceof QueryDefault) { - final QueryDefault<?> queryDefault = (QueryDefault<?>) query; - final String queryName = queryDefault.getQueryName(); - final Map<String, ObjectAdapter> argumentsAdaptersByParameterName = wrap(queryDefault.getArgumentsByParameterName()); - return new PersistenceQueryFindUsingApplibQueryDefault(noSpec, queryName, argumentsAdaptersByParameterName, cardinality, queryDefault.getStart(), queryDefault.getCount()); - } - // fallback; generic serializable applib query. - return new PersistenceQueryFindUsingApplibQuerySerializable(noSpec, query, cardinality); + return persistenceQueryFactory.createPersistenceQueryFor(query, cardinality); } - private ObjectSpecification specFor(final Query<?> query) { - return getSpecificationLoader().loadSpecification(query.getResultType()); - } - - /** - * Converts a map of pojos keyed by string to a map of adapters keyed by the - * same strings. - */ - private Map<String, ObjectAdapter> wrap(final Map<String, Object> argumentsByParameterName) { - final Map<String, ObjectAdapter> argumentsAdaptersByParameterName = new HashMap<String, ObjectAdapter>(); - for (final Map.Entry<String, Object> entry : argumentsByParameterName.entrySet()) { - final String parameterName = entry.getKey(); - final Object argument = argumentsByParameterName.get(parameterName); - final ObjectAdapter argumentAdapter = argument != null ? getAdapterManager().adapterFor(argument) : null; - argumentsAdaptersByParameterName.put(parameterName, argumentAdapter); - } - return argumentsAdaptersByParameterName; - } protected List<ObjectAdapter> getInstances(final PersistenceQuery persistenceQuery) { if (LOG.isDebugEnabled()) { @@ -423,19 +431,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // Manual dirtying support // /////////////////////////////////////////////////////////////////////////// - /** - * @see #setDirtiableSupport(boolean) - */ public boolean isCheckObjectsForDirtyFlag() { return dirtiableSupport; } - /** - * Whether to notice {@link Dirtiable manually-dirtied} objects. - */ - public void setDirtiableSupport(final boolean checkObjectsForDirtyFlag) { - this.dirtiableSupport = checkObjectsForDirtyFlag; - } /** * Mark as {@link #objectChanged(ObjectAdapter) changed } all @@ -451,7 +450,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To * <p> * Called by the {@link IsisTransactionManager}. */ - @Override public void objectChangedAllDirty() { if (!dirtiableSupport) { return; @@ -471,7 +469,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To } } - @Override + /** + * Set as {@link Dirtiable#clearDirty(ObjectAdapter) clean} any + * {@link Dirtiable} objects. + */ public synchronized void clearAllDirty() { if (!isCheckObjectsForDirtyFlag()) { return; @@ -510,18 +511,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To objectStore.registerService(rootOid); } - public ObjectAdapter getService(final String id) { - for (final Object service : servicesInjector.getRegisteredServices()) { - // TODO this (ServiceUtil) uses reflection to access the service - // object; it should use the - // reflector, ie call allServices first and use the returned array - if (id.equals(ServiceUtil.id(service))) { - return getService(service); - } - } - return null; - } - // REVIEW why does this get called multiple times when starting up public List<ObjectAdapter> getServices() { final List<Object> services = servicesInjector.getRegisteredServices(); @@ -535,19 +524,12 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To private ObjectAdapter getService(final Object servicePojo) { final ObjectSpecification serviceSpecification = getSpecificationLoader().loadSpecification(servicePojo.getClass()); final RootOid oid = getOidForService(serviceSpecification); - final ObjectAdapter serviceAdapter = mapRecreatedPojo(oid, servicePojo); + final ObjectAdapter serviceAdapter = getAdapterManager().mapRecreatedPojo(oid, servicePojo); serviceAdapter.markAsResolvedIfPossible(); return serviceAdapter; } - /** - * Has any services. - */ - public boolean hasServices() { - return servicesInjector.getRegisteredServices().size() > 0; - } - private RootOid getOidForServiceFromPersistenceLayer(ObjectSpecification serviceSpecification) { final ObjectSpecId objectSpecId = serviceSpecification.getSpecId(); RootOid oid = servicesByObjectType.get(objectSpecId); @@ -587,15 +569,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To */ public boolean isFixturesInstalled() { final PersistenceSessionFactory persistenceSessionFactory = getPersistenceSessionFactory(); - if (persistenceSessionFactory instanceof FixturesInstalledFlag) { - final FixturesInstalledFlag fixturesInstalledFlag = (FixturesInstalledFlag) persistenceSessionFactory; - if (fixturesInstalledFlag.isFixturesInstalled() == null) { - fixturesInstalledFlag.setFixturesInstalled(objectStore.isFixturesInstalled()); - } - return fixturesInstalledFlag.isFixturesInstalled(); - } else { - return objectStore.isFixturesInstalled(); + if (persistenceSessionFactory.isFixturesInstalled() == null) { + persistenceSessionFactory.setFixturesInstalled(objectStore.isFixturesInstalled()); } + return persistenceSessionFactory.isFixturesInstalled(); } @Override @@ -608,7 +585,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // loadObject, reload // /////////////////////////////////////////////////////////////////////////// - @Override + /** + * Loads the object identified by the specified {@link TypedOid} from the + * persisted set of objects. + */ public ObjectAdapter loadObject(final TypedOid oid) { // REVIEW: @@ -642,7 +622,11 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // resolveImmediately, resolveField // /////////////////////////////////////////////////////////////////////////// - @Override + /** + * Re-initialises the fields of an object. If the object is unresolved then + * the object's missing data should be retrieved from the persistence + * mechanism and be used to set up the value objects and associations. + */ public void resolveImmediately(final ObjectAdapter adapter) { // synchronize on the current session because getting race // conditions, I think between different UI threads when running @@ -695,49 +679,28 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To }); } - @Override - public void resolveField(final ObjectAdapter objectAdapter, final ObjectAssociation field) { - if (field.isNotPersisted()) { - return; - } - if (field.isOneToManyAssociation()) { - return; - } - if (field.getSpecification().isParented()) { - return; - } - if (field.getSpecification().isValue()) { - return; - } - final ObjectAdapter referenceAdapter = field.get(objectAdapter); - if (referenceAdapter == null || referenceAdapter.isResolved()) { - return; - } - if (!referenceAdapter.representsPersistent()) { - return; - } - if (LOG.isInfoEnabled()) { - // don't log object - it's toString() may use the unresolved field - // or unresolved collection - LOG.info("resolve field " + objectAdapter.getSpecification().getShortIdentifier() + "." + field.getId() + ": " + referenceAdapter.getSpecification().getShortIdentifier() + " " + referenceAdapter.getResolveState().code() + " " + referenceAdapter.getOid()); - } - resolveFieldFromPersistenceLayer(objectAdapter, field); - } - - private void resolveFieldFromPersistenceLayer(final ObjectAdapter objectAdapter, final ObjectAssociation field) { - getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() { - @Override - public void execute() { - objectStore.resolveField(objectAdapter, field); - } - }); - } - // //////////////////////////////////////////////////////////////// // makePersistent // //////////////////////////////////////////////////////////////// - @Override + /** + * Makes an {@link ObjectAdapter} persistent. The specified object should be + * stored away via this object store's persistence mechanism, and have an + * new and unique OID assigned to it. The object, should also be added to + * the {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault} as the object is implicitly 'in use'. + * + * <p> + * If the object has any associations then each of these, where they aren't + * already persistent, should also be made persistent by recursively calling + * this method. + * + * <p> + * If the object to be persisted is a collection, then each element of that + * collection, that is not already persistent, should be made persistent by + * recursively calling this method. + * + * @see #remapAsPersistent(ObjectAdapter) + */ public void makePersistent(final ObjectAdapter adapter) { if (adapter.representsPersistent()) { throw new NotPersistableException("Object already persistent: " + adapter); @@ -784,7 +747,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // objectChanged // /////////////////////////////////////////////////////////////////////////// - @Override + /** + * Mark the {@link ObjectAdapter} as changed, and therefore requiring + * flushing to the persistence mechanism. + */ public void objectChanged(final ObjectAdapter adapter) { if (adapter.isTransient() || (adapter.isParented() && adapter.getAggregateRoot().isTransient())) { @@ -842,7 +808,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // destroyObject // /////////////////////////////////////////////////////////////////////////// - @Override + /** + * Removes the specified object from the system. The specified object's data + * should be removed from the persistence mechanism. + */ public void destroyObject(final ObjectAdapter adapter) { ObjectSpecification spec = adapter.getSpecification(); if (spec.isParented()) { @@ -879,52 +848,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To }); } - // /////////////////////////////////////////////////////////////////////////// - // hasInstances - // /////////////////////////////////////////////////////////////////////////// - - @Override - public boolean hasInstances(final ObjectSpecification specification) { - if (LOG.isInfoEnabled()) { - LOG.info("hasInstances of " + specification.getShortIdentifier()); - } - return hasInstancesFromPersistenceLayer(specification); - } - - private boolean hasInstancesFromPersistenceLayer(final ObjectSpecification specification) { - return getTransactionManager().executeWithinTransaction(new TransactionalClosureWithReturnAbstract<Boolean>() { - @Override - public Boolean execute() { - return objectStore.hasInstances(specification); - } - }); - } - - // /////////////////////////////////////////////////////////////////////////// - // RecreatedPojoRemapper - // /////////////////////////////////////////////////////////////////////////// - - @Override - public ObjectAdapter mapRecreatedPojo(Oid oid, Object recreatedPojo) { - return adapterManager.mapRecreatedPojo(oid, recreatedPojo); - } - - @Override - public void remapRecreatedPojo(ObjectAdapter adapter, Object recreatedPojo) { - adapterManager.remapRecreatedPojo(adapter, recreatedPojo); - } - - // /////////////////////////////////////////////////////////////////////////// - // AdapterLifecycleTransitioner - // /////////////////////////////////////////////////////////////////////////// - - public void remapAsPersistent(ObjectAdapter adapter, RootOid hintRootOid) { - adapterManager.remapAsPersistent(adapter, hintRootOid); - } - - public void removeAdapter(ObjectAdapter adapter) { - adapterManager.removeAdapter(adapter); - } // /////////////////////////////////////////////////////////////////////////// // ToPersistObjectSet @@ -950,7 +873,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To * * @see #remapAsPersistent(ObjectAdapter) */ - @Override public void remapAsPersistent(final ObjectAdapter adapter) { final Oid transientOid = adapter.getOid(); adapterManager.remapAsPersistent(adapter, null); @@ -958,7 +880,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To persistentByTransient.put(transientOid, persistentOid); } - @Override + /** + * To support ISIS-234; keep track, for the duration of the transaction only, + * of the old transient {@link Oid}s and their corresponding persistent {@link Oid}s. + */ public Oid remappedFrom(Oid transientOid) { return persistentByTransient.get(transientOid); } @@ -969,7 +894,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To * {@link CreateObjectCommand}, and adds to the * {@link IsisTransactionManager}. */ - @Override public void addCreateObjectCommand(final ObjectAdapter object) { getTransactionManager().addCommand(objectStore.createCreateObjectCommand(object)); } @@ -1086,11 +1010,16 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To /** * The configured {@link AdapterManager}. - * + * + * Access to looking up (and possibly lazily loading) adapters. + * + * <p> + * However, manipulating of adapters is not part of this interface. + * * <p> * Injected in constructor. */ - public final AdapterManager getAdapterManager() { + public final AdapterManagerDefault getAdapterManager() { return adapterManager; } @@ -1116,28 +1045,17 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To // /////////////////////////////////////////////////////////////////////////// /** - * Inject the {@link IsisTransactionManager}. - * - * <p> - * This must be injected using setter-based injection rather than through - * the constructor because there is a bidirectional relationship between the - * this class and the {@link IsisTransactionManager}. - * - * @see #getTransactionManager() - */ - public void setTransactionManager(final IsisTransactionManager transactionManager) { - this.transactionManager = transactionManager; - } - - /** * The configured {@link IsisTransactionManager}. - * - * @see #setTransactionManager(IsisTransactionManager) */ public IsisTransactionManager getTransactionManager() { return transactionManager; } + // for testing only + void setTransactionManager(IsisTransactionManager transactionManager) { + this.transactionManager = transactionManager; + } + // /////////////////////////////////////////////////////////////////////////// // Dependencies (from context) // ///////////////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java index cb3b320..2b203a2 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java @@ -39,7 +39,6 @@ import org.apache.isis.core.runtime.persistence.ObjectStoreFactory; import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession; import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg; import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState; @@ -96,12 +95,8 @@ public class PersistenceSessionFactory implements MetaModelRefiner, ApplicationS ensureThatArg(objectStore, is(not(nullValue()))); - final PersistenceSession persistenceSession =new PersistenceSession(this, servicesInjector, objectStore, getConfiguration()); + final PersistenceSession persistenceSession = new PersistenceSession(this, servicesInjector, objectStore, getConfiguration()); - final IsisTransactionManager transactionManager = new IsisTransactionManager(persistenceSession, objectStore, servicesInjector); - - persistenceSession.setDirtiableSupport(true); - persistenceSession.setTransactionManager(transactionManager); return persistenceSession; } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/Persistor.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/Persistor.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/Persistor.java deleted file mode 100644 index 11b4091..0000000 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/Persistor.java +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.isis.core.runtime.system.persistence; - -import org.apache.isis.applib.DomainObjectContainer; -import org.apache.isis.applib.query.Query; -import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.metamodel.adapter.ResolveState; -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; -import org.apache.isis.core.metamodel.adapter.oid.TypedOid; -import org.apache.isis.core.metamodel.services.container.query.QueryCardinality; -import org.apache.isis.core.metamodel.spec.ObjectSpecification; -import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; -import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation; -import org.apache.isis.core.runtime.persistence.UnsupportedFindException; -import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession; - -/** - * Represents the client-side API of the <tt>PersistenceSession</tt>. - */ -public interface Persistor { - - - ///////////////////////////////////////////////////////////////// - // AdapterManager - ///////////////////////////////////////////////////////////////// - - /** - * Access to looking up (and possibly lazily loading) adapters. - * - * <p> - * However, manipulating of adapters is not part of this interface. - * @return - */ - public abstract AdapterManager getAdapterManager(); - - - ///////////////////////////////////////////////////////////////// - // find, load, resolve - ///////////////////////////////////////////////////////////////// - - - /** - * Finds and returns instances that match the specified query. - * - * <p> - * The {@link QueryCardinality} determines whether all instances or just the - * first matching instance is returned. - * - * @throws UnsupportedFindException - * if the criteria is not support by this persistor - */ - public abstract <T> ObjectAdapter findInstances(Query<T> query, QueryCardinality cardinality); - - /** - * Whether there are any instances of the specified - * {@link ObjectSpecification type}. - * - * <p> - * Checks whether there are any instances of the specified type. The object - * store should look for instances of the type represented by <variable>type - * </variable> and return <code>true</code> if there are, or - * <code>false</code> if there are not. - * - * <p> - * Used (ostensibly) by client-side code. - */ - public abstract boolean hasInstances(ObjectSpecification specification); - - /** - * Finds and returns instances that match the specified - * {@link PersistenceQuery}. - * - * <p> - * Compared to {@link #findInstances(Query, QueryCardinality)}, not that - * there is no {@link QueryCardinality} parameter. That's because - * {@link PersistenceQuery} intrinsically carry the knowledge as to how many - * rows they return. - * - * @throws UnsupportedFindException - * if the criteria is not support by this persistor - */ - public abstract ObjectAdapter findInstances(PersistenceQuery persistenceQuery); - - /** - * Loads the object identified by the specified {@link TypedOid} from the - * persisted set of objects. - */ - public abstract ObjectAdapter loadObject(TypedOid oid); - - - /** - * Re-initialises the fields of an object. If the object is unresolved then - * the object's missing data should be retrieved from the persistence - * mechanism and be used to set up the value objects and associations. - */ - public abstract void resolveImmediately(ObjectAdapter adapter); - - /** - * Hint that specified field within the specified object is likely to be - * needed soon. This allows the object's data to be loaded, ready for use. - * - * <p> - * This method need not do anything, but offers the object store the - * opportunity to load in objects before their use. Contrast this with - * resolveImmediately, which requires an object to be loaded before - * continuing. - * - * @see #resolveImmediately(ObjectAdapter) - */ - public abstract void resolveField(ObjectAdapter objectAdapter, ObjectAssociation field); - - - - ///////////////////////////////////////////////////////////////// - // create, persist - ///////////////////////////////////////////////////////////////// - - /** - * Create a root or standalone {@link ObjectAdapter adapter}. - * - * <p> - * Creates a new instance of the specified type and returns it in an adapter - * whose resolved state set to {@link ResolveState#TRANSIENT} (except if the - * type is marked as {@link ObjectSpecification#isValueOrIsParented() - * aggregated} in which case it will be set to {@link ResolveState#VALUE}). - * - * <p> - * The returned object will be initialised (had the relevant callback - * lifecycle methods invoked). - * - * <p> - * <b><i> REVIEW: not sure about {@link ResolveState#VALUE} - see comments - * in {@link #adapterFor(Object, Oid, OneToManyAssociation)}.</i></b> - * <p> - * TODO: this is the same as - * {@link RuntimeContextFromSession#createTransientInstance(ObjectSpecification)}; - * could it be unified? - * - * <p> - * While creating the object it will be initialised with default values and - * its created lifecycle method (its logical constructor) will be invoked. - * Contrast this with - * {@link #recreateTransientInstance(Oid, ObjectSpecification)}. - * - * <p> - * This method is ultimately delegated to by the - * {@link DomainObjectContainer}. - */ - public abstract ObjectAdapter createTransientInstance(ObjectSpecification objectSpec); - - /** - * Creates a new instance of the specified type and returns an adapter with - * an aggregated OID that show that this new object belongs to the specified - * parent. The new object's resolved state is set to - * {@link ResolveState#RESOLVED} as it state is part of it parent. - * - * <p> - * While creating the object it will be initialised with default values and - * its created lifecycle method (its logical constructor) will be invoked. - * Contrast this with - * {@link #recreateTransientInstance(Oid, ObjectSpecification)}. - * - * <p> - * This method is ultimately delegated to by the - * {@link DomainObjectContainer}. - */ - public abstract ObjectAdapter createAggregatedInstance(ObjectSpecification objectSpec, ObjectAdapter parentAdapter); - - /** - * Makes an {@link ObjectAdapter} persistent. The specified object should be - * stored away via this object store's persistence mechanism, and have an - * new and unique OID assigned to it. The object, should also be added to - * the {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault} as the object is implicitly 'in use'. - * - * <p> - * If the object has any associations then each of these, where they aren't - * already persistent, should also be made persistent by recursively calling - * this method. - * - * <p> - * If the object to be persisted is a collection, then each element of that - * collection, that is not already persistent, should be made persistent by - * recursively calling this method. - * - * @see #remapAsPersistent(ObjectAdapter) - */ - public abstract void makePersistent(ObjectAdapter adapter); - - - ///////////////////////////////////////////////////////////////// - // change - ///////////////////////////////////////////////////////////////// - - /** - * Mark the {@link ObjectAdapter} as changed, and therefore requiring - * flushing to the persistence mechanism. - */ - public abstract void objectChanged(ObjectAdapter adapter); - - - ///////////////////////////////////////////////////////////////// - // destroy - ///////////////////////////////////////////////////////////////// - - /** - * Removes the specified object from the system. The specified object's data - * should be removed from the persistence mechanism. - */ - public abstract void destroyObject(ObjectAdapter adapter); - - - - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/RecreatedPojoRemapper.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/RecreatedPojoRemapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/RecreatedPojoRemapper.java deleted file mode 100644 index ea89e21..0000000 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/RecreatedPojoRemapper.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.isis.core.runtime.system.persistence; - -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; - -public interface RecreatedPojoRemapper { - - /** - * Either returns an existing {@link ObjectAdapter adapter} (as per - * {@link #getAdapterFor(Object)} or {@link #getAdapterFor(Oid)}), otherwise - * re-creates an adapter with the specified (persistent) {@link Oid}. - * - * <p> - * Typically called when the {@link Oid} is already known, that is, when - * resolving an already-persisted object. Is also available for - * <tt>Memento</tt> support however, so {@link Oid} could also represent a - * {@link Oid#isTransient() transient} object. - * - * <p> - * If the {@link ObjectAdapter adapter} is recreated, its - * {@link ResolveState} will be set to either - * {@link ResolveState#TRANSIENT} or {@link ResolveState#GHOST} based on - * whether the {@link Oid} is {@link Oid#isTransient() transient} or not. - * - * @param oid - * @param recreatedPojo - already known to the object store impl, or a service - */ - ObjectAdapter mapRecreatedPojo(Oid oid, Object recreatedPojo); - - void remapRecreatedPojo(ObjectAdapter adapter, Object recreatedPojo); - -} http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/EnlistedObjectDirtying.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/EnlistedObjectDirtying.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/EnlistedObjectDirtying.java deleted file mode 100644 index 6efde67..0000000 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/EnlistedObjectDirtying.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.isis.core.runtime.system.transaction; - -import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.metamodel.spec.Dirtiable; - -/** - * As called by the {@link IsisTransactionManager}. - * - * <p> - * Dirtiable support. - */ -public interface EnlistedObjectDirtying { - - /** - * Mark as {@link #objectChanged(ObjectAdapter) changed } all - * {@link Dirtiable} objects that have been - * {@link Dirtiable#markDirty(ObjectAdapter) manually marked} as dirty. - * - * <p> - * Called by the {@link IsisTransactionManager}. - */ - void objectChangedAllDirty(); - - /** - * Set as {@link Dirtiable#clearDirty(ObjectAdapter) clean} any - * {@link Dirtiable} objects. - */ - void clearAllDirty(); - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java index 0098d29..aa0d2c7 100644 --- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java +++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java @@ -44,7 +44,6 @@ import org.apache.isis.core.metamodel.adapter.oid.*; import org.apache.isis.core.metamodel.spec.ObjectSpecId; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi; -import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.persistence.ObjectNotFoundException; import org.apache.isis.core.runtime.persistence.PojoRefreshException; import org.apache.isis.core.runtime.persistence.UnsupportedFindException; @@ -375,7 +374,7 @@ public class DataNucleusObjectStore implements ObjectStore { } final Object pojo = loadPojo(oid); - return getPersistenceSession().mapRecreatedPojo(oid, pojo); + return getPersistenceSession().getAdapterManager().mapRecreatedPojo(oid, pojo); } @@ -497,32 +496,7 @@ public class DataNucleusObjectStore implements ObjectStore { frameworkSynchronizer.postLoadProcessingFor((PersistenceCapable) domainObject, CalledFrom.OS_RESOLVE); } - /** - * Walking the graph. - */ - public void resolveField(final ObjectAdapter object, final ObjectAssociation association) { - ensureOpened(); - ensureInTransaction(); - - final ObjectAdapter referencedCollectionAdapter = association.get(object); - - // this code originally brought in from the JPA impl, but seems reasonable. - if (association.isOneToManyAssociation()) { - ensureThatState(referencedCollectionAdapter, is(notNullValue())); - final Object referencedCollection = referencedCollectionAdapter.getObject(); - ensureThatState(referencedCollection, is(notNullValue())); - - // if a proxy collection, then force it to initialize. just 'touching' the object is sufficient. - // REVIEW: I wonder if this is actually needed; does JDO use proxy collections? - referencedCollection.hashCode(); - } - - // the JPA impl used to also call its lifecycle listener on the referenced collection object, eg List, - // itself. I don't think this makes sense to do for JDO (the collection is not a PersistenceCapable). - } - - // /////////////////////////////////////////////////////////////////////// // getInstances, hasInstances // /////////////////////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java index 94e9c34..66b7f1c 100644 --- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java +++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java @@ -37,6 +37,7 @@ import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException; import org.apache.isis.core.metamodel.adapter.version.Version; import org.apache.isis.core.metamodel.facets.object.callbacks.*; import org.apache.isis.core.runtime.persistence.PersistorUtil; +import org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.OidGenerator; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; @@ -89,7 +90,7 @@ public class FrameworkSynchronizer { final Version originalVersion = adapter.getVersion(); // sync the pojo held by the adapter with that just loaded - getPersistenceSession().remapRecreatedPojo(adapter, pojo); + getPersistenceSession().getAdapterManager() .remapRecreatedPojo(adapter, pojo); // since there was already an adapter, do concurrency check // (but don't set abort cause if checking is suppressed through thread-local) @@ -119,9 +120,9 @@ public class FrameworkSynchronizer { // ie from ObjectStore#resolveImmediately() adapter = getAdapterManager().getAdapterFor(originalOid); if(adapter != null) { - getPersistenceSession().remapRecreatedPojo(adapter, pojo); + getPersistenceSession().getAdapterManager() .remapRecreatedPojo(adapter, pojo); } else { - adapter = getPersistenceSession().mapRecreatedPojo(originalOid, pojo); + adapter = getPersistenceSession().getAdapterManager().mapRecreatedPojo(originalOid, pojo); CallbackFacet.Util.callCallback(adapter, LoadedCallbackFacet.class); } } @@ -201,7 +202,7 @@ public class FrameworkSynchronizer { // persisting final RootOid persistentOid = getOidGenerator().createPersistentOrViewModelOid(pojo, isisOid); - getPersistenceSession().remapAsPersistent(adapter, persistentOid); + getPersistenceSession().getAdapterManager().remapAsPersistent(adapter, persistentOid); CallbackFacet.Util.callCallback(adapter, PersistedCallbackFacet.class); @@ -272,7 +273,7 @@ public class FrameworkSynchronizer { return null; } final RootOid oid = getPersistenceSession().getOidGenerator().createPersistentOrViewModelOid(pojo, null); - final ObjectAdapter adapter = getPersistenceSession().mapRecreatedPojo(oid, pojo); + final ObjectAdapter adapter = getPersistenceSession().getAdapterManager().mapRecreatedPojo(oid, pojo); return adapter; } }, calledFrom); @@ -431,7 +432,7 @@ public class FrameworkSynchronizer { // Dependencies (from context) // ///////////////////////////////////////////////////////// - protected AdapterManager getAdapterManager() { + protected AdapterManagerDefault getAdapterManager() { return getPersistenceSession().getAdapterManager(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java index 119ea19..d6d3eeb 100644 --- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java +++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java @@ -19,22 +19,19 @@ package org.apache.isis.objectstore.jdo.datanucleus.persistence.queries; import java.util.List; - import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import javax.jdo.listener.InstanceLifecycleEvent; import javax.jdo.metadata.TypeMetadata; import javax.jdo.spi.PersistenceCapable; - import com.google.common.collect.Lists; - import org.apache.isis.core.commons.ensure.Assert; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.PersistenceQuery; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore; import org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer; import org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer.CalledFrom; @@ -98,7 +95,7 @@ public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQue // Dependencies (from context) // ///////////////////////////////////////////////////////////// - protected Persistor getPersistenceSession() { + protected PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmContractTest.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmContractTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmContractTest.java index aad312f..7a3086b 100644 --- a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmContractTest.java +++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmContractTest.java @@ -34,6 +34,7 @@ import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter; import org.apache.isis.core.runtime.persistence.objectstore.transaction.PojoAdapterBuilder; import org.apache.isis.core.runtime.persistence.objectstore.transaction.PojoAdapterBuilder.Persistence; import org.apache.isis.core.runtime.persistence.objectstore.transaction.PojoAdapterBuilder.Type; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2; import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode; @@ -43,7 +44,7 @@ public abstract class PersistAlgorithmContractTest { public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES); @Mock - private ToPersistObjectSet mockAdder; + private PersistenceSession mockAdder; @Mock private ObjectSpecification objectSpec; http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java index f9645c8..3cf5d3a 100644 --- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java +++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionTest.java @@ -167,7 +167,8 @@ public class PersistenceSessionTest { }}); - transactionManager = new IsisTransactionManager(persistenceSession, mockObjectStore, servicesInjector) { + transactionManager = persistenceSession.getTransactionManager(); + new IsisTransactionManager(persistenceSession, mockObjectStore, servicesInjector) { @Override public AuthenticationSession getAuthenticationSession() { return mockAuthenticationSession; http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/tck/tck-integtests/src/test/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java ---------------------------------------------------------------------- diff --git a/tck/tck-integtests/src/test/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java b/tck/tck-integtests/src/test/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java index 131c418..cd449c8 100644 --- a/tck/tck-integtests/src/test/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java +++ b/tck/tck-integtests/src/test/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java @@ -46,7 +46,6 @@ import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.ObjectStore; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; -import org.apache.isis.core.runtime.system.persistence.Persistor; import org.apache.isis.core.runtime.system.transaction.IsisTransaction; import org.apache.isis.core.runtime.system.transaction.IsisTransaction.State; import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; @@ -514,7 +513,7 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule { public ObjectAdapter reload(RootOid oid) { ensureSessionInProgress(); - final Persistor persistenceSession = getPersistenceSession(); + final PersistenceSession persistenceSession = getPersistenceSession(); return persistenceSession.loadObject(oid); } @@ -527,7 +526,7 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule { ensureSessionInProgress(); ensureObjectIsNotPersistent(pojo); final ObjectAdapter adapter = adapterFor(pojo); - getPersistenceSession().remapAsPersistent(adapter, persistentOid); + getPersistenceSession().getAdapterManager().remapAsPersistent(adapter, persistentOid); return adapter; } @@ -658,7 +657,7 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule { return getPersistenceSession().getTransactionManager(); } - public Persistor getPersistor() { + public PersistenceSession getPersistor() { return getPersistenceSession(); }
