You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/12/05 14:31:01 UTC
[isis] branch master updated: ISIS-2177: further decouple
memento-code from Persistence
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new cbbc076 ISIS-2177: further decouple memento-code from Persistence
cbbc076 is described below
commit cbbc07633886b5ce2551bbc1999a249e6d39069a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Dec 5 15:30:44 2019 +0100
ISIS-2177: further decouple memento-code from Persistence
---
.../isis/applib/domain/DomainObjectList.java | 8 +-
.../org/apache/isis/config/IsisConfiguration.java | 9 +-
.../isis/metamodel/adapter/ObjectAdapter.java | 10 +--
.../facets/object/entity/EntityFacet.java | 3 +
.../apache/isis/metamodel/spec/ManagedObject.java | 23 +++++-
.../commands/AbstractDataNucleusObjectCommand.java | 4 -
.../commands/DataNucleusCreateObjectCommand.java | 3 +-
.../commands/DataNucleusDeleteObjectCommand.java | 7 +-
.../JdoPersistenceCapableFacetImpl.java | 12 ++-
.../objectadapter/ObjectAdapterContext.java | 4 +-
.../ObjectAdapterContext_Factories.java | 8 +-
.../objectadapter/ObjectAdapterLegacy.java | 96 ----------------------
.../persistence/IsisPersistenceSessionJdo.java | 12 ++-
.../persistence/IsisTransactionManagerJdo.java | 7 +-
.../persistence/PersistenceSession5.java | 52 ++++--------
.../adapterfactory/pojo/PojoAdapterTest.java | 5 +-
.../transaction/PojoAdapterBuilder.java | 11 +--
.../runtime/system/ObjectMemberAbstractTest.java | 26 +++---
.../repository/RepositoryServiceDefault.java | 89 +++++++++++---------
.../apache/isis/runtime/memento/MementoStore.java | 5 ++
.../isis/runtime/memento/MementoStoreLegacy.java | 29 ++++---
.../memento/ObjectAdapterMementoCollection.java | 2 +-
.../memento/ObjectAdapterMementoDefault.java | 63 +++++++-------
.../ObjectAdapterMementoSupport_usingDefault.java | 13 +--
.../persistence/adapter/ObjectAdapterForBean.java | 8 +-
.../runtime/persistence/adapter/PojoAdapter.java | 39 ++++-----
.../transaction/PersistenceCommand.java | 2 +-
.../transaction/PersistenceCommandContext.java | 28 -------
.../system/persistence/PersistenceSession.java | 35 +++++---
.../valuechoices/ValueChoicesSelect2Panel.java | 6 +-
30 files changed, 261 insertions(+), 358 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java b/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
index fa76e1e..a693829 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.applib.domain;
+import java.util.Iterator;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
@@ -60,7 +61,7 @@ import org.apache.isis.applib.jaxbadapters.PersistentEntitiesAdapter;
cssClassUiEvent = DomainObjectList.CssClassUiEvent.class,
layoutUiEvent = DomainObjectList.LayoutUiEvent.class
)
-public class DomainObjectList {
+public class DomainObjectList implements Iterable<Object> {
// -- ui event classes
public static class TitleUiEvent extends IsisApplibModule.TitleUiEvent<DomainObjectList>{ }
@@ -174,6 +175,11 @@ public class DomainObjectList {
public void setObjects(final List<Object> objects) {
this.objects = objects;
}
+
+ @Override
+ public Iterator<Object> iterator() {
+ return objects.iterator();
+ }
}
diff --git a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
index cb6b863..3d45a0f 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
@@ -44,13 +44,13 @@ import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.metamodel.facets.CommandActionsConfiguration;
-import org.apache.isis.config.metamodel.facets.PublishActionsConfiguration;
import org.apache.isis.config.metamodel.facets.AuditObjectsConfiguration;
+import org.apache.isis.config.metamodel.facets.CommandActionsConfiguration;
+import org.apache.isis.config.metamodel.facets.CommandPropertiesConfiguration;
import org.apache.isis.config.metamodel.facets.DefaultViewConfiguration;
import org.apache.isis.config.metamodel.facets.EditingObjectsConfiguration;
+import org.apache.isis.config.metamodel.facets.PublishActionsConfiguration;
import org.apache.isis.config.metamodel.facets.PublishObjectsConfiguration;
-import org.apache.isis.config.metamodel.facets.CommandPropertiesConfiguration;
import org.apache.isis.config.metamodel.facets.PublishPropertiesConfiguration;
import org.apache.isis.config.metamodel.services.ApplicationFeaturesInitConfiguration;
import org.apache.isis.config.metamodel.specloader.IntrospectionMode;
@@ -66,7 +66,6 @@ import lombok.Data;
*
* @since 2.0
*/
-@SuppressWarnings("ConfigurationProperties") // think this is not really an issue...
@ConfigurationProperties(ConfigurationConstants.ROOT_PREFIX)
@Data
public class IsisConfiguration {
@@ -674,7 +673,7 @@ public class IsisConfiguration {
@Data
public static class Wicket {
- private String app = "org.apache.isis.viewer.wicket.viewer.IsisWicketApplication";
+ private String app = "org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication";
/**
* Whether the Ajax debug should be shown.
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
index 7c4b2e8..e1f6c41 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
@@ -44,11 +44,11 @@ public interface ObjectAdapter extends ManagedObject {
*/
Oid getOid(); //XXX[2033] referenced by 'metamodel' only to create a bookmark (CommandUtil)
- /**
- * Returns either itself (if this is a root) or for parented collections, the
- * adapter corresponding to their {@link ParentedOid#getParentOid() root oid}.
- */
- ObjectAdapter getAggregateRoot(); //XXX[2033] not referenced by 'metamodel'
+// /**
+// * Returns either itself (if this is a root) or for parented collections, the
+// * adapter corresponding to their {@link ParentedOid#getParentOid() root oid}.
+// */
+// ObjectAdapter getAggregateRoot(); //XXX[2033] not referenced by 'metamodel'
/**
* Whether this instance belongs to another object (meaning its
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
index 80d7f9f..f29fa97 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
@@ -39,6 +39,8 @@ public interface EntityFacet extends Facet {
void refresh(Object pojo);
+ void delete(ObjectSpecification spec, Object pojo);
+
EntityState getEntityState(Object pojo);
/**
@@ -47,5 +49,6 @@ public interface EntityFacet extends Facet {
* @return
*/
boolean isProxyEnhancement(Method method);
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index f6ee966..c11c9e9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -34,6 +34,7 @@ import org.apache.isis.commons.internal.base._Tuples.Tuple2;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.metamodel.MetaModelContext;
+import org.apache.isis.metamodel.adapter.oid.ParentedOid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.commons.ClassExtensions;
import org.apache.isis.metamodel.commons.ListExtensions;
@@ -607,6 +608,20 @@ public interface ManagedObject {
throw _Exceptions.unexpectedCodeReach();
}
+
+ static void _destroyObjectInTransaction(ManagedObject adapter) {
+ // legacy of
+ //getPersistenceSession().destroyObjectInTransaction(adapter);
+
+ val spec = adapter.getSpecification();
+ if(spec.isEntity()) {
+ val entityFacet = spec.getFacet(EntityFacet.class);
+ entityFacet.delete(spec, adapter.getPojo());
+ return;
+ }
+
+ throw _Exceptions.unexpectedCodeReach();
+ }
@Deprecated
static Stream<ManagedObject> _bulkLoadStream(Stream<RootOid> rootOids) {
@@ -623,7 +638,13 @@ public interface ManagedObject {
// .map(ManagedObject.class::cast);
}
-
+ static boolean _isParentedCollection(ManagedObject adapter) {
+
+ //legacy of (FIXME not a perfect match)
+ //getOid() instanceof ParentedOid;
+
+ return adapter.getSpecification().getBeanSort().isCollection();
+ }
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/AbstractDataNucleusObjectCommand.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/AbstractDataNucleusObjectCommand.java
index 1d384dd..e163a8d 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/AbstractDataNucleusObjectCommand.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/AbstractDataNucleusObjectCommand.java
@@ -22,7 +22,6 @@ import javax.jdo.PersistenceManager;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommandAbstract;
-import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommandContext;
import lombok.Getter;
@@ -39,7 +38,4 @@ public abstract class AbstractDataNucleusObjectCommand extends PersistenceComman
}
- @Override
- public abstract void execute(final PersistenceCommandContext context);
-
}
\ No newline at end of file
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusCreateObjectCommand.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusCreateObjectCommand.java
index 3895de3..e66dbd1 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusCreateObjectCommand.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusCreateObjectCommand.java
@@ -22,7 +22,6 @@ import javax.jdo.PersistenceManager;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.runtime.persistence.objectstore.transaction.CreateObjectCommand;
-import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommandContext;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
import lombok.val;
@@ -39,7 +38,7 @@ implements CreateObjectCommand {
@Override
- public void execute(final PersistenceCommandContext context) {
+ public void execute() {
if (log.isDebugEnabled()) {
log.debug("create object - executing command for: {}", onManagedObject());
}
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusDeleteObjectCommand.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusDeleteObjectCommand.java
index 786a0d1..9fa0a92 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusDeleteObjectCommand.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/commands/DataNucleusDeleteObjectCommand.java
@@ -22,19 +22,20 @@ import javax.jdo.PersistenceManager;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
-import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommandContext;
import lombok.extern.log4j.Log4j2;
@Log4j2
-public class DataNucleusDeleteObjectCommand extends AbstractDataNucleusObjectCommand implements DestroyObjectCommand {
+public class DataNucleusDeleteObjectCommand
+extends AbstractDataNucleusObjectCommand
+implements DestroyObjectCommand {
public DataNucleusDeleteObjectCommand(ManagedObject adapter, PersistenceManager persistenceManager) {
super(adapter, persistenceManager);
}
@Override
- public void execute(final PersistenceCommandContext context) {
+ public void execute() {
if (log.isDebugEnabled()) {
log.debug("destroy object - executing command for {}", onManagedObject());
}
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index 977575b..6e276b5 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -30,6 +30,7 @@ import org.apache.isis.persistence.jdo.datanucleus5.metamodel.IsisJdoMetamodelPl
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.spec.EntityState;
+import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
import lombok.val;
@@ -88,8 +89,13 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
}
val persistenceSession = super.getPersistenceSessionJdo();
- //TODO don't bypass domain logic !?
- persistenceSession.getJdoPersistenceManager().makePersistent(pojo);
+ persistenceSession.makePersistentInTransaction(ManagedObject.of(spec, pojo));
+ }
+
+ @Override
+ public void delete(ObjectSpecification spec, Object pojo) {
+ val persistenceSession = super.getPersistenceSessionJdo();
+ persistenceSession.destroyObjectInTransaction(ManagedObject.of(spec, pojo));
}
@Override
@@ -126,4 +132,6 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
}
+
+
}
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java
index 0ba6d8b..9a68cd1 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java
@@ -69,7 +69,6 @@ final public class ObjectAdapterContext {
@Getter private final SpecificationLoader specificationLoader;
private final ObjectAdapterContext_ObjectAdapterProvider objectAdapterProviderMixin;
private final ObjectAdapterContext_NewIdentifier newIdentifierMixin;
- private final ObjectAdapterContext_DependencyInjection dependencyInjectionMixin;
private final ServiceInjector serviceInjector;
final ObjectAdapterContext_ObjectCreation objectCreationMixin;
private final ObjectAdapterContext_LifecycleEventSupport lifecycleEventMixin;
@@ -84,7 +83,6 @@ final public class ObjectAdapterContext {
this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, runtimeContext);
this.newIdentifierMixin = new ObjectAdapterContext_NewIdentifier(persistenceSession, runtimeContext.getSpecificationLoader());
- this.dependencyInjectionMixin = new ObjectAdapterContext_DependencyInjection(runtimeContext);
this.objectCreationMixin = new ObjectAdapterContext_ObjectCreation(this, runtimeContext);
this.lifecycleEventMixin = new ObjectAdapterContext_LifecycleEventSupport(runtimeContext);
@@ -94,7 +92,7 @@ final public class ObjectAdapterContext {
this.specificationLoader = mmc.getSpecificationLoader();
this.serviceInjector = mmc.getServiceInjector();
- this.objectAdapterFactories = new ObjectAdapterContext_Factories(persistenceSession);
+ this.objectAdapterFactories = new ObjectAdapterContext_Factories();
}
// -- DEBUG
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_Factories.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_Factories.java
index b15c379..9878ad6 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_Factories.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_Factories.java
@@ -19,14 +19,13 @@
package org.apache.isis.persistence.jdo.datanucleus5.objectadapter;
import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.persistence.jdo.datanucleus5.objectadapter.ObjectAdapterContext.ObjectAdapterFactories;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.ParentedOid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.persistence.jdo.datanucleus5.objectadapter.ObjectAdapterContext.ObjectAdapterFactories;
import org.apache.isis.runtime.persistence.adapter.PojoAdapter;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
import org.apache.isis.runtime.system.session.IsisSession;
import static org.apache.isis.commons.internal.base._With.requires;
@@ -44,8 +43,6 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
- private final PersistenceSession persistenceSession;
-
@Override
public ObjectAdapter createRootAdapter(final Object pojo, RootOid rootOid) {
requires(rootOid, "rootOid");
@@ -79,7 +76,6 @@ class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
final Oid oid) {
return PojoAdapter.of(
pojo, oid,
- IsisSession.currentOrElseNull(),
- persistenceSession);
+ IsisSession.currentOrElseNull());
}
}
\ No newline at end of file
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterLegacy.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterLegacy.java
deleted file mode 100644
index 1b8a9cb..0000000
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterLegacy.java
+++ /dev/null
@@ -1,96 +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.persistence.jdo.datanucleus5.objectadapter;
-
-import java.util.List;
-
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.adapter.oid.Oid.Factory;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.schema.common.v1.CollectionDto;
-import org.apache.isis.schema.common.v1.OidDto;
-import org.apache.isis.schema.common.v1.ValueDto;
-import org.apache.isis.schema.common.v1.ValueType;
-import org.apache.isis.applib.util.schema.CommonDtoUtils;
-
-/**
- * TODO Interim class, expected to be removed, need to smoketest the CommandExecutorServiceDefault first
- */
-@Deprecated
-class ObjectAdapterLegacy {
-
- // -- CommandExecutorServiceDefault --------------------------------------------------------
-
- public static class __CommandExecutorServiceDefault {
-
- public static ObjectAdapter adapterFor(Object targetObject) {
- if(targetObject instanceof OidDto) {
- final OidDto oidDto = (OidDto) targetObject;
- return adapterFor(oidDto);
- }
- if(targetObject instanceof CollectionDto) {
- final CollectionDto collectionDto = (CollectionDto) targetObject;
- final List<ValueDto> valueDtoList = collectionDto.getValue();
- final List<Object> pojoList = _Lists.newArrayList();
- for (final ValueDto valueDto : valueDtoList) {
- ValueType valueType = collectionDto.getType();
- final Object valueOrOidDto = CommonDtoUtils.getValue(valueDto, valueType);
- // converting from adapter and back means we handle both
- // collections of references and of values
- final ObjectAdapter objectAdapter = adapterFor(valueOrOidDto);
- Object pojo = objectAdapter != null ? objectAdapter.getPojo() : null;
- pojoList.add(pojo);
- }
- return adapterFor(pojoList);
- }
- if(targetObject instanceof Bookmark) {
- final Bookmark bookmark = (Bookmark) targetObject;
- return adapterFor(bookmark);
- }
- return getPersistenceSession().adapterFor(targetObject);
- }
-
- private static ObjectAdapter adapterFor(final OidDto oidDto) {
- final Bookmark bookmark = Bookmark.from(oidDto);
- return adapterFor(bookmark);
- }
-
- private static ObjectAdapter adapterFor(final Bookmark bookmark) {
- final RootOid rootOid = Factory.ofBookmark(bookmark);
- return adapterFor(rootOid);
- }
-
- private static ObjectAdapter adapterFor(final RootOid rootOid) {
- return getPersistenceSession().adapterFor(rootOid);
- }
-
- private static PersistenceSession getPersistenceSession() {
-
- return PersistenceSession.current(PersistenceSession.class)
- .getFirst()
- .orElseThrow(_Exceptions::unexpectedCodeReach);
- }
-
- }
-
-}
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdo.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdo.java
index 48515a4..21a5e83 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdo.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisPersistenceSessionJdo.java
@@ -18,13 +18,17 @@
*/
package org.apache.isis.persistence.jdo.datanucleus5.persistence;
+import org.apache.isis.commons.internal.components.SessionScopedComponent;
+import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.runtime.persistence.objectstore.transaction.TransactionalResource;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
/**
*
* @since 2.0
*/
-public interface IsisPersistenceSessionJdo extends PersistenceSession {
+public interface IsisPersistenceSessionJdo
+extends PersistenceSession, TransactionalResource, SessionScopedComponent, ObjectAdapterProvider {
/**
* Not type safe. For type-safe queries use <br/><br/> {@code pm().newNamedQuery(cls, queryName)}
@@ -32,7 +36,7 @@ public interface IsisPersistenceSessionJdo extends PersistenceSession {
* @param queryName
* @return
*/
- default <T> javax.jdo.Query newJdoNamedQuery(Class<T> cls, String queryName){
+ default <T> javax.jdo.Query<T> newJdoNamedQuery(Class<T> cls, String queryName){
return getJdoPersistenceManager().newNamedQuery(cls, queryName);
}
@@ -41,7 +45,7 @@ public interface IsisPersistenceSessionJdo extends PersistenceSession {
* @param cls
* @return
*/
- default <T> javax.jdo.Query newJdoQuery(Class<T> cls){
+ default <T> javax.jdo.Query<T> newJdoQuery(Class<T> cls){
return getJdoPersistenceManager().newQuery(cls);
}
@@ -51,7 +55,7 @@ public interface IsisPersistenceSessionJdo extends PersistenceSession {
* @param filter
* @return
*/
- default <T> javax.jdo.Query newJdoQuery(Class<T> cls, String filter){
+ default <T> javax.jdo.Query<T> newJdoQuery(Class<T> cls, String filter){
return getJdoPersistenceManager().newQuery(cls, filter);
}
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisTransactionManagerJdo.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisTransactionManagerJdo.java
index 61f87df..d049576 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisTransactionManagerJdo.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/IsisTransactionManagerJdo.java
@@ -29,7 +29,6 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.components.SessionScopedComponent;
import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommand;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
import org.apache.isis.runtime.system.transaction.IsisTransactionAspectSupport;
import org.apache.isis.runtime.system.transaction.IsisTransactionManagerException;
import org.apache.isis.runtime.system.transaction.IsisTransactionObject;
@@ -44,13 +43,13 @@ class IsisTransactionManagerJdo implements SessionScopedComponent {
// -- constructor, fields
@Getter
- private final PersistenceSession persistenceSession;
+ private final IsisPersistenceSessionJdo persistenceSession;
private final ServiceRegistry serviceRegistry;
private final CommandContext commandContext;
private final InteractionContext interactionContext;
- IsisTransactionManagerJdo(ServiceRegistry serviceRegistry, PersistenceSession persistenceSession) {
+ IsisTransactionManagerJdo(ServiceRegistry serviceRegistry, IsisPersistenceSessionJdo persistenceSession) {
this.serviceRegistry = serviceRegistry;
this.persistenceSession = persistenceSession;
@@ -59,7 +58,7 @@ class IsisTransactionManagerJdo implements SessionScopedComponent {
}
public IsisTransactionJdo beginTransaction() {
- return beginTransaction(/*command*/null);
+ return beginTransaction(/*existingCommandIfAny*/null);
}
/**
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
index 4d74150..11a8c70 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
@@ -49,13 +49,6 @@ import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.commands.DataNucleusCreateObjectCommand;
-import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.commands.DataNucleusDeleteObjectCommand;
-import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries.PersistenceQueryFindAllInstancesProcessor;
-import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor;
-import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries.PersistenceQueryProcessor;
-import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.spi.JdoObjectIdSerializer;
-import org.apache.isis.persistence.jdo.datanucleus5.objectadapter.ObjectAdapterContext;
import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.ObjectNotFoundException;
@@ -81,6 +74,13 @@ import org.apache.isis.metamodel.spec.EntityState;
import org.apache.isis.metamodel.spec.FreeStandingList;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
+import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.commands.DataNucleusCreateObjectCommand;
+import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.commands.DataNucleusDeleteObjectCommand;
+import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries.PersistenceQueryFindAllInstancesProcessor;
+import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor;
+import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries.PersistenceQueryProcessor;
+import org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.spi.JdoObjectIdSerializer;
+import org.apache.isis.persistence.jdo.datanucleus5.objectadapter.ObjectAdapterContext;
import org.apache.isis.runtime.persistence.FixturesInstalledStateHolder;
import org.apache.isis.runtime.persistence.NotPersistableException;
import org.apache.isis.runtime.persistence.UnsupportedFindException;
@@ -91,7 +91,6 @@ import org.apache.isis.runtime.persistence.query.PersistenceQueryFindAllInstance
import org.apache.isis.runtime.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
import org.apache.isis.runtime.services.RequestScopedService;
import org.apache.isis.runtime.system.persistence.PersistenceQuery;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
import org.apache.isis.security.api.authentication.AuthenticationSession;
import static java.util.Objects.requireNonNull;
@@ -570,31 +569,16 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
// -- makePersistent
- /**
- * Makes an {@link ObjectAdapter} persistent. The specified object should be
- * stored away via this object store's persistence mechanism, and have a
- * new and unique OID assigned to it. The object, should also be added to
- * the {@link PersistenceSession} 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.
- */
+
@Override
- public void makePersistentInTransaction(final ObjectAdapter adapter) {
+ public void makePersistentInTransaction(final ManagedObject adapter) {
val pojo = adapter.getPojo();
if (getEntityState(pojo).isAttached()) {
throw new NotPersistableException("Object already persistent: " + adapter);
}
- if (adapter.isParentedCollection()) {
+ if (ManagedObject._isParentedCollection(adapter)) {
//or should we just ignore this?
throw new NotPersistableException("Cannot persist parented collection: " + adapter);
}
@@ -609,15 +593,11 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
});
}
-
// -- destroyObjectInTransaction
- /**
- * Removes the specified object from the system. The specified object's data
- * should be removed from the persistence mechanism.
- */
+
@Override
- public void destroyObjectInTransaction(final ObjectAdapter adapter) {
+ public void destroyObjectInTransaction(final ManagedObject adapter) {
val spec = adapter.getSpecification();
if (spec.isParented()) {
return;
@@ -650,7 +630,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
* </p>
*
*/
- private CreateObjectCommand newCreateObjectCommand(final ObjectAdapter adapter) {
+ private CreateObjectCommand newCreateObjectCommand(final ManagedObject adapter) {
ensureOpened();
@@ -663,7 +643,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
return new DataNucleusCreateObjectCommand(adapter, persistenceManager);
}
- private DestroyObjectCommand newDestroyObjectCommand(final ObjectAdapter adapter) {
+ private DestroyObjectCommand newDestroyObjectCommand(final ManagedObject adapter) {
ensureOpened();
@@ -691,7 +671,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
private void executeCommands(final List<PersistenceCommand> commands) {
for (final PersistenceCommand command : commands) {
- command.execute(null);
+ command.execute();
}
persistenceManager.flush();
}
@@ -876,7 +856,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
public ObjectAdapter adapterFor(Object pojo) {
return objectAdapterContext.getObjectAdapterProvider().adapterFor(pojo);
}
-
+
// -- HELPER
private void debugLogNotPersistentIgnoring(Object domainObject) {
diff --git a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
index 656d6c1..0aa3f74 100644
--- a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
+++ b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
@@ -25,7 +25,6 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.apache.isis.persistence.jdo.datanucleus5.persistence.PersistenceSession5;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid.Factory;
import org.apache.isis.metamodel.spec.ObjectSpecId;
@@ -47,7 +46,6 @@ public class PojoAdapterTest {
@Mock private SpecificationLoader mockSpecificationLoader;
@Mock private AuthenticationSession mockAuthenticationSession;
- @Mock private PersistenceSession5 mockPersistenceSession;
@Before
public void setUp() throws Exception {
@@ -56,8 +54,7 @@ public class PojoAdapterTest {
adapter = PojoAdapter.of(
domainObject,
Factory.persistentOf(ObjectSpecId.of("CUS"), "1"),
- mockSpecificationLoader,
- mockPersistenceSession);
+ mockSpecificationLoader);
allowUnimportantMethodCallsOn();
}
diff --git a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index e2650d5..1a627f9 100644
--- a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -22,7 +22,6 @@ package org.apache.isis.runtime.persistence.objectstore.transaction;
import java.util.Iterator;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.persistence.jdo.datanucleus5.persistence.PersistenceSession5;
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.Oid.Factory;
import org.apache.isis.metamodel.adapter.oid.RootOid;
@@ -34,8 +33,6 @@ import lombok.val;
public class PojoAdapterBuilder {
- private PersistenceSession5 persistenceSession;
-
private PojoAdapterBuilder(){
}
@@ -146,11 +143,6 @@ public class PojoAdapterBuilder {
return this;
}
- public PojoAdapterBuilder with(PersistenceSession5 persistenceSession) {
- this.persistenceSession = persistenceSession;
- return this;
- }
-
public PojoAdapterBuilder with(SpecificationLoader specificationLoader) {
this.specificationLoader = specificationLoader;
return this;
@@ -159,8 +151,7 @@ public class PojoAdapterBuilder {
public PojoAdapter build() {
val rootOid = persistence.createOid(objectSpecId, identifier);
val oid = type.oidFor(rootOid, objectSpecId, aggregatedId);
- val pojoAdapter = PojoAdapter.of(pojo, oid,
- specificationLoader, persistenceSession);
+ val pojoAdapter = PojoAdapter.of(pojo, oid, specificationLoader);
return pojoAdapter;
}
diff --git a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/system/ObjectMemberAbstractTest.java b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/system/ObjectMemberAbstractTest.java
index 5d03d9f..4b801a9 100644
--- a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/system/ObjectMemberAbstractTest.java
+++ b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/system/ObjectMemberAbstractTest.java
@@ -19,6 +19,13 @@
package org.apache.isis.runtime.system;
+import org.datanucleus.enhancement.Persistable;
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.MetaModelContext_forTesting;
@@ -51,15 +58,15 @@ import org.apache.isis.security.api.authentication.AuthenticationSession;
import org.apache.isis.security.api.authentication.AuthenticationSessionProvider;
import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.datanucleus.enhancement.Persistable;
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import static org.hamcrest.Matchers.emptyString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
public class ObjectMemberAbstractTest {
@@ -95,8 +102,7 @@ public class ObjectMemberAbstractTest {
persistentAdapter = PojoAdapter.of(
mockPersistable,
Factory.persistentOf(ObjectSpecId.of("CUS"), "1"),
- mockSpecificationLoader,
- null);
+ mockSpecificationLoader);
transientAdapter = PojoAdapterBuilder.create()
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/repository/RepositoryServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/repository/RepositoryServiceDefault.java
index 788a625..0b2b813 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/repository/RepositoryServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/repository/RepositoryServiceDefault.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.metamodel.MetaModelContext;
+import org.apache.isis.metamodel.objectmanager.ObjectManager;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
@@ -54,8 +54,8 @@ public class RepositoryServiceDefault implements RepositoryService {
@Inject private FactoryService factoryService;
@Inject private WrapperFactory wrapperFactory;
@Inject private TransactionService transactionService;
- @Inject private MetaModelContext metaModelContext;
@Inject private IsisConfiguration isisConfiguration;
+ @Inject private ObjectManager objectManager;
private boolean autoFlush;
@@ -74,48 +74,41 @@ public class RepositoryServiceDefault implements RepositoryService {
@Override
public boolean isPersistent(final Object domainObject) {
- val adapter = metaModelContext.getObjectManager().adapt(unwrapped(domainObject));
-
- val spec = adapter.getSpecification();
- if(spec.isManagedBean() || spec.isViewModel()) {
- // services and view models are treated as persistent objects
- //FIXME bad design: this method should instead throw an IllegalArgEx. when called with non entity types!
- return true;
- }
-
- val entityState = ManagedObject._entityState(adapter);
- val isRepresentingPersistent = entityState!=null
- && (entityState.isAttached() || entityState.isDestroyed());
- return isRepresentingPersistent;
+ val adapter = objectManager.adapt(unwrapped(domainObject));
+ return isPersistentObject(adapter);
}
@Override
public boolean isDeleted(final Object domainObject) {
- val adapter = metaModelContext.getObjectManager().adapt(unwrapped(domainObject));
+ val adapter = objectManager.adapt(unwrapped(domainObject));
return ManagedObject._isDestroyed(adapter);
}
@Override
- public <T> T persist(final T object) {
- if (isPersistent(object)) {
- return object;
- }
- val adapter = getPersistenceSession().adapterFor(unwrapped(object));
-
+ public <T> T persist(final T domainObject) {
+
+ val adapter = objectManager.adapt(unwrapped(domainObject));
if(adapter == null) {
throw new PersistFailedException("Object not known to framework (unable to create/obtain an adapter)");
}
- if (adapter.isParentedCollection()) {
- // TODO check aggregation is supported
- return object;
- }
- if (isPersistent(object)) {
- throw new PersistFailedException("Object already persistent; OID=" + adapter.getOid());
+ if (isPersistentObject(adapter)) {
+ return domainObject;
}
- getPersistenceSession().makePersistentInTransaction(adapter);
-
- return object;
+ ManagedObject._makePersistentInTransaction(adapter);
+
+//legacy of
+// if (ManagedObject._isParentedCollection(adapter)) {
+// // TODO check aggregation is supported
+// return domainObject;
+// }
+// if (isPersistentObject(adapter)) {
+// val oid = ManagedObject._identify(adapter);
+// throw new PersistFailedException("Object already persistent; OID=" + oid);
+// }
+// getPersistenceSession().makePersistentInTransaction(adapter);
+
+ return domainObject;
}
@@ -132,18 +125,16 @@ public class RepositoryServiceDefault implements RepositoryService {
}
private void removeIfNotAlready(final Object object) {
- if (!isPersistent(object)) {
- return;
- }
if (object == null) {
throw new IllegalArgumentException("Must specify a reference for disposing an object");
}
- val adapter = getPersistenceSession().adapterFor(unwrapped(object));
- if (!isPersistent(object)) {
- throw new RepositoryException("Object not persistent: " + adapter);
+ val adapter = objectManager.adapt(unwrapped(object));
+ if (!isPersistentObject(adapter)) {
+ return;
}
-
- getPersistenceSession().destroyObjectInTransaction(adapter);
+ ManagedObject._destroyObjectInTransaction(adapter);
+ // legacy of
+ //getPersistenceSession().destroyObjectInTransaction(adapter);
}
@Override
@@ -226,13 +217,31 @@ public class RepositoryServiceDefault implements RepositoryService {
final List<T> instances = allMatches(query); // No need to fetch more than 2.
return firstInstanceElseEmpty(instances);
}
-
+
+ // -- HELPER
+
private static <T> Optional<T> firstInstanceElseEmpty(final List<T> instances) {
return instances.size() == 0
? Optional.empty()
: Optional.of(instances.get(0));
}
+ private boolean isPersistentObject(ManagedObject adapter) {
+
+ val spec = adapter.getSpecification();
+ if(spec.isManagedBean() || spec.isViewModel()) {
+ // services and view models are treated as persistent objects
+ //FIXME bad design: this method should instead throw an IllegalArgEx
+ // when called with non entity types
+ return true;
+ }
+
+ val entityState = ManagedObject._entityState(adapter);
+ val isRepresentingPersistent = entityState!=null
+ && (entityState.isAttached() || entityState.isDestroyed());
+ return isRepresentingPersistent;
+ }
+
private Object unwrapped(Object domainObject) {
return wrapperFactory != null ? wrapperFactory.unwrap(domainObject) : domainObject;
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java
index c21e0c7..44bb6c5 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java
@@ -1,7 +1,10 @@
package org.apache.isis.runtime.memento;
+import java.util.List;
+
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
/**
@@ -14,4 +17,6 @@ public interface MementoStore {
// -- TODO remove ObjectAdapter references from API
ObjectAdapter adapterOfMemento(ObjectSpecification spec, Oid oid, Data data);
+ ManagedObject adapterForListOfPojos(List<Object> listOfPojos);
+
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java
index 9bf7084..675fd11 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java
@@ -19,15 +19,18 @@
package org.apache.isis.runtime.memento;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.isis.applib.domain.DomainObjectList;
import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.ParentedOid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
@@ -63,10 +66,10 @@ import lombok.extern.log4j.Log4j2;
* @since 2.0
*/
@Log4j2 @RequiredArgsConstructor
-class MementoStoreLegacy implements MementoStore {
+final class MementoStoreLegacy implements MementoStore {
private final ObjectManager objectManager;
- private final PersistenceSession persistenceSession;
+ private final ObjectAdapterProvider objectAdapterProvider;
private final SpecificationLoader specificationLoader;
@Override
@@ -88,14 +91,13 @@ class MementoStoreLegacy implements MementoStore {
final ParentedOid collectionOid = (ParentedOid) oid;
adapter = PojoAdapter.of(
collectionPojo, collectionOid,
- IsisSession.currentOrElseNull(),
- persistenceSession);
+ IsisSession.currentOrElseNull());
} else {
_Assert.assertTrue("oid must be a RootOid representing an object because spec is not a collection and cannot be a value", oid instanceof RootOid);
RootOid typedOid = (RootOid) oid;
// recreate an adapter for the original OID
- adapter = persistenceSession.adapterFor(typedOid);
+ adapter = objectAdapterProvider.adapterFor(typedOid);
updateObject(adapter, data);
}
@@ -106,22 +108,27 @@ class MementoStoreLegacy implements MementoStore {
return adapter;
}
+ @Override
+ public ManagedObject adapterForListOfPojos(List<Object> listOfPojos) {
+
+ val domainObjectList = new DomainObjectList();
+ domainObjectList.setObjects(listOfPojos);
+ return ManagedObject._adapterOfList(specificationLoader, domainObjectList);
+ }
+
// -- HELPER
private Object instantiateAndInjectServices(ObjectSpecification spec) {
val objectCreateRequest = ObjectCreator.Request.of(spec);
return objectManager.createObject(objectCreateRequest);
-
- // legacy of
- //return dependencyInjectionMixin.instantiateAndInjectServices(objectSpec);
}
private ManagedObject recreateReference(Data data) {
// handle values
if (data instanceof StandaloneData) {
val standaloneData = (StandaloneData) data;
- return standaloneData.getAdapter(persistenceSession, specificationLoader);
+ return standaloneData.getAdapter(objectAdapterProvider, specificationLoader);
}
// reference to entity
@@ -130,7 +137,7 @@ class MementoStoreLegacy implements MementoStore {
_Assert.assertTrue("can only create a reference to an entity", oid instanceof RootOid);
val rootOid = (RootOid) oid;
- val referencedAdapter = persistenceSession.adapterFor(rootOid);
+ val referencedAdapter = objectAdapterProvider.adapterFor(rootOid);
if (data instanceof ObjectData) {
if (rootOid.isTransient()) {
@@ -178,7 +185,7 @@ class MementoStoreLegacy implements MementoStore {
updateFields(objectAdapter, data);
} else if (dataIsTransient
- && persistenceSession.getEntityState(objectAdapter.getPojo()).isDetached()) {
+ && ManagedObject._entityState(objectAdapter).isDetached()) {
updateFields(objectAdapter, data);
} else if (objectAdapter.isParentedCollection()) {
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
index 051f882..3a5741b 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
@@ -57,7 +57,7 @@ final class ObjectAdapterMementoCollection implements ObjectAdapterMemento {
.filter(_NullSafe::isPresent)
.collect(Collectors.toCollection(ArrayList::new));
- return IsisContext.getPersistenceSession().get().adapterFor(listOfPojos);
+ return mementoStore.adapterForListOfPojos(listOfPojos);
}
@Override
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
index 9229e62..e9b39de 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
@@ -72,47 +72,47 @@ final class ObjectAdapterMementoDefault implements Serializable {
/**
* Factory method
*/
- public static ObjectAdapterMementoDefault createPersistent(
+ static ObjectAdapterMementoDefault createPersistent(
RootOid rootOid,
SpecificationLoader specificationLoader) {
return new ObjectAdapterMementoDefault(rootOid, specificationLoader);
}
- public static ObjectAdapterMementoDefault createForList(
+ static ObjectAdapterMementoDefault createForList(
ArrayList<ObjectAdapterMementoDefault> list,
ObjectSpecId objectSpecId) {
return new ObjectAdapterMementoDefault(list, objectSpecId);
}
- public static ObjectAdapterMementoDefault createForList(
+ static ObjectAdapterMementoDefault createForList(
Collection<ObjectAdapterMementoDefault> list,
ObjectSpecId objectSpecId) {
return list != null ? createForList(_Lists.newArrayList(list), objectSpecId) : null;
}
- public static ObjectAdapterMementoDefault createForIterable(
- Iterable<?> iterable,
- ObjectSpecId specId,
- PersistenceSession persistenceSession) {
-
- final List<ObjectAdapterMementoDefault> listOfMementos =
- _NullSafe.stream(iterable)
- .map(Functions.fromPojo(persistenceSession))
- .collect(Collectors.toList());
- return createForList(listOfMementos, specId);
- }
-
- public static ObjectAdapterMementoDefault createForEncodeable(
+// static ObjectAdapterMementoDefault createForIterable(
+// Iterable<?> iterable,
+// ObjectSpecId specId,
+// ObjectAdapterProvider objectAdapterProvider) {
+//
+// final List<ObjectAdapterMementoDefault> listOfMementos =
+// _NullSafe.stream(iterable)
+// .map(Functions.fromPojo(objectAdapterProvider))
+// .collect(Collectors.toList());
+// return createForList(listOfMementos, specId);
+// }
+
+ static ObjectAdapterMementoDefault createForEncodeable(
ObjectSpecId specId,
String encodableValue) {
return new ObjectAdapterMementoDefault(specId, encodableValue);
}
- public enum Cardinality {
+ enum Cardinality {
/**
* represents a single object
*/
@@ -163,9 +163,7 @@ final class ObjectAdapterMementoDefault implements Serializable {
final List<Object> listOfPojos =
_Lists.map(memento.list, Functions.toPojo(mementoStore, specificationLoader));
- PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
-
- return persistenceSession.adapterFor(listOfPojos);
+ return mementoStore.adapterForListOfPojos(listOfPojos);
}
@Override
@@ -519,17 +517,17 @@ final class ObjectAdapterMementoDefault implements Serializable {
recreateStrategy = RecreateStrategy.LOOKUP;
}
- public Cardinality getCardinality() {
+ Cardinality getCardinality() {
return cardinality;
}
- public ArrayList<ObjectAdapterMementoDefault> getList() {
+ ArrayList<ObjectAdapterMementoDefault> getList() {
ensureVector();
return list;
}
- public void resetVersion(
+ void resetVersion(
MementoStore mementoStore,
SpecificationLoader specificationLoader) {
@@ -538,12 +536,12 @@ final class ObjectAdapterMementoDefault implements Serializable {
}
- public Bookmark asBookmark() {
+ Bookmark asBookmark() {
ensureScalar();
return bookmark;
}
- public Bookmark asHintingBookmark() {
+ Bookmark asHintingBookmark() {
val bookmark = asBookmark();
return hintId != null && bookmark != null
? new HintStore.BookmarkWithHintId(bookmark, hintId)
@@ -560,7 +558,7 @@ final class ObjectAdapterMementoDefault implements Serializable {
* best to call once and then hold onto the value thereafter. Alternatively,
* can call {@link #setAdapter(ManagedObject)} to keep this memento in sync.
*/
- public ManagedObject getObjectAdapter(
+ ManagedObject getObjectAdapter(
MementoStore mementoStore,
SpecificationLoader specificationLoader) {
@@ -583,12 +581,12 @@ final class ObjectAdapterMementoDefault implements Serializable {
*
* @param adapter
*/
- public void setAdapter(ManagedObject adapter) {
+ void setAdapter(ManagedObject adapter) {
ensureScalar();
init(adapter);
}
- public ObjectSpecId getObjectSpecId() {
+ ObjectSpecId getObjectSpecId() {
return objectSpecId;
}
@@ -596,7 +594,7 @@ final class ObjectAdapterMementoDefault implements Serializable {
* Analogous to {@link List#contains(Object)}, but does not perform
* {@link ConcurrencyChecking concurrency checking} of the OID.
*/
- public boolean containedIn(
+ boolean containedIn(
List<ObjectAdapterMementoDefault> mementos,
MementoStore mementoStore,
SpecificationLoader specificationLoader) {
@@ -643,9 +641,11 @@ final class ObjectAdapterMementoDefault implements Serializable {
// -- FUNCTIONS
@NoArgsConstructor(access = AccessLevel.PRIVATE)
- public final static class Functions {
+ final static class Functions {
- public static Function<Object, ObjectAdapterMementoDefault> fromPojo(final ObjectAdapterProvider adapterProvider) {
+ public static Function<Object, ObjectAdapterMementoDefault> fromPojo(
+ final ObjectAdapterProvider adapterProvider) {
+
return pojo->ObjectAdapterMementoDefault.createOrNull( adapterProvider.adapterFor(pojo) );
}
@@ -690,5 +690,4 @@ final class ObjectAdapterMementoDefault implements Serializable {
}
-
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
index 5252021..acf41f5 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
@@ -18,19 +18,15 @@
*/
package org.apache.isis.runtime.memento;
-import java.util.UUID;
-
import javax.inject.Inject;
import javax.inject.Singleton;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.ioc.BeanSort;
+import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.objectmanager.ObjectManager;
-import org.apache.isis.metamodel.objectmanager.load.ObjectLoader;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -70,8 +66,7 @@ implements ObjectAdapterMementoSupport {
@Override
public ObjectAdapterMemento mementoForPojo(Object pojo) {
- val ps = IsisContext.getPersistenceSession().get();
- val adapter = ps.adapterFor(pojo);
+ val adapter = objectManager.adapt(pojo);
return mementoForAdapter(adapter);
}
@@ -81,8 +76,8 @@ implements ObjectAdapterMementoSupport {
return null;
}
if(mementoStore==null) {
- val ps = IsisContext.getPersistenceSession().get();
- mementoStore = new MementoStoreLegacy(objectManager, ps, specificationLoader);
+ val objectAdapterProvider = (ObjectAdapterProvider) IsisContext.getPersistenceSession().get();
+ mementoStore = new MementoStoreLegacy(objectManager, objectAdapterProvider, specificationLoader);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/ObjectAdapterForBean.java b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/ObjectAdapterForBean.java
index 01eca8a..c2979f6 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/ObjectAdapterForBean.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/ObjectAdapterForBean.java
@@ -56,10 +56,10 @@ public class ObjectAdapterForBean implements ObjectAdapter {
return Oid.Factory.persistentOf(spec.getSpecId(), bean.getId());
}
- @Override
- public ObjectAdapter getAggregateRoot() {
- return this;
- }
+// @Override
+// public ObjectAdapter getAggregateRoot() {
+// return this;
+// }
@Override
public String toString() {
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/PojoAdapter.java
index a8dad57..1b387bf 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/adapter/PojoAdapter.java
@@ -27,12 +27,10 @@ import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
-import org.apache.isis.metamodel.adapter.oid.ParentedOid;
import org.apache.isis.metamodel.commons.ToString;
import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.spec.ObjectSpecification;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
import org.apache.isis.runtime.system.session.IsisSession;
import static org.apache.isis.commons.internal.base._With.requires;
@@ -43,7 +41,6 @@ import lombok.val;
public final class PojoAdapter implements ObjectAdapter {
private final SpecificationLoader specificationLoader;
- private final PersistenceSession persistenceSession;
@Getter(onMethod = @__(@Override)) private final Object pojo;
@Getter(onMethod = @__(@Override)) private final Oid oid;
@@ -54,7 +51,7 @@ public final class PojoAdapter implements ObjectAdapter {
final Object pojo,
final Oid oid) {
- return of(pojo, oid, IsisSession.currentOrElseNull(), null);
+ return of(pojo, oid, IsisSession.currentOrElseNull());
}
public static PojoAdapter ofValue(Serializable value) {
@@ -70,32 +67,28 @@ public final class PojoAdapter implements ObjectAdapter {
public static PojoAdapter of(
final Object pojo,
final Oid oid,
- final IsisSession isisSession,
- final PersistenceSession persistenceSession) {
+ final IsisSession isisSession) {
val specificationLoader = isisSession.getSpecificationLoader();
- return new PojoAdapter(pojo, oid, specificationLoader, persistenceSession);
+ return new PojoAdapter(pojo, oid, specificationLoader);
}
public static PojoAdapter of(
final Object pojo,
final Oid oid,
- final SpecificationLoader specificationLoader,
- final PersistenceSession persistenceSession) {
- return new PojoAdapter(pojo, oid, specificationLoader, persistenceSession);
+ final SpecificationLoader specificationLoader) {
+ return new PojoAdapter(pojo, oid, specificationLoader);
}
private PojoAdapter(
final Object pojo,
final Oid oid,
- final SpecificationLoader specificationLoader,
- final PersistenceSession persistenceSession) {
+ final SpecificationLoader specificationLoader) {
Objects.requireNonNull(pojo);
this.specificationLoader = specificationLoader;
- this.persistenceSession = persistenceSession;
if (pojo instanceof ObjectAdapter) {
throw new IsisException("ObjectAdapter can't be used to wrap an ObjectAdapter: " + pojo);
@@ -125,16 +118,16 @@ public final class PojoAdapter implements ObjectAdapter {
// -- getAggregateRoot
- @Override
- public ObjectAdapter getAggregateRoot() {
- if(!isParentedCollection()) {
- return this;
- }
- val collectionOid = (ParentedOid) oid;
- val rootOid = collectionOid.getParentOid();
- val rootAdapter = persistenceSession.adapterFor(rootOid);
- return rootAdapter;
- }
+// @Override
+// public ObjectAdapter getAggregateRoot() {
+// if(!isParentedCollection()) {
+// return this;
+// }
+// val collectionOid = (ParentedOid) oid;
+// val rootOid = collectionOid.getParentOid();
+// val rootAdapter = persistenceSession.adapterFor(rootOid);
+// return rootAdapter;
+// }
@Override
public String toString() {
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommand.java b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommand.java
index c0fdfc3..0eface0 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommand.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommand.java
@@ -22,7 +22,7 @@ package org.apache.isis.runtime.persistence.objectstore.transaction;
import org.apache.isis.metamodel.spec.ManagedObject;
public interface PersistenceCommand {
- void execute(PersistenceCommandContext context);
+ void execute();
ManagedObject onManagedObject();
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommandContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommandContext.java
deleted file mode 100644
index 8be4ae8..0000000
--- a/core/runtime/src/main/java/org/apache/isis/runtime/persistence/objectstore/transaction/PersistenceCommandContext.java
+++ /dev/null
@@ -1,28 +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.runtime.persistence.objectstore.transaction;
-
-public interface PersistenceCommandContext {
-
- void start();
-
- void end();
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
index 5057f90..fe07d42 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
@@ -25,20 +25,14 @@ import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.components.SessionScopedComponent;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.spec.EntityState;
+import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommand;
-import org.apache.isis.runtime.persistence.objectstore.transaction.TransactionalResource;
-public interface PersistenceSession
-extends
-ObjectAdapterProvider,
-TransactionalResource,
-SessionScopedComponent {
+public interface PersistenceSession {
// -------------------------------------------------------------------------------------------------
// -- STABLE API (DRAFT)
@@ -106,8 +100,29 @@ SessionScopedComponent {
<T> List<ObjectAdapter> allMatchingQuery(final Query<T> query);
<T> ObjectAdapter firstMatchingQuery(final Query<T> query);
- void destroyObjectInTransaction(ObjectAdapter adapter);
- void makePersistentInTransaction(ObjectAdapter adapter);
+ /**
+ * Removes the specified object from the system. The specified object's data
+ * should be removed from the persistence mechanism.
+ */
+ void destroyObjectInTransaction(ManagedObject adapter);
+
+ /**
+ * Makes an {@link ManagedObject} persistent. The specified object should be
+ * stored away via this object store's persistence mechanism, and have a
+ * new and unique OID assigned to it. The object, should also be added to
+ * the {@link PersistenceSession} 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.
+ */
+ void makePersistentInTransaction(ManagedObject adapter);
// -- OTHERS
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index d935d5d..9d2f223 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -98,9 +98,9 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
@Override
protected IModel<String> obtainInlinePromptModel() {
- ObjectAdapterMemento modelObject = select2.getModelObject();
- String str = modelObject != null ? modelObject.asString(): null;
- return Model.of(str);
+ ObjectAdapterMemento inlinePromptMemento = select2.getModelObject();
+ String inlinePrompt = inlinePromptMemento != null ? inlinePromptMemento.asString(): null;
+ return Model.of(inlinePrompt);
}