You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/04 22:58:28 UTC

[1/2] isis git commit: ISIS-1389: further minor changes for consistency.

Repository: isis
Updated Branches:
  refs/heads/ISIS-1291 e85f40534 -> 0fa47c86f


ISIS-1389: further minor changes for consistency.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/f00d2d2f
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/f00d2d2f
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/f00d2d2f

Branch: refs/heads/ISIS-1291
Commit: f00d2d2fe44344a9b5112ba819b588805b730ea6
Parents: e85f405
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 19:08:35 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 19:08:35 2016 +0100

----------------------------------------------------------------------
 .../isis/schema/utils/InteractionDtoUtils.java    |  2 +-
 .../org/apache/isis/schema/utils/Roundtrip.java   |  2 +-
 .../org/apache/isis/schema/cmd/cmd-1.0.xsd        | 12 ++++++------
 .../org/apache/isis/schema/ixn/ixn-1.0.xsd        | 18 +++++++++---------
 4 files changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f00d2d2f/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index da95ace..121c47a 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -234,7 +234,7 @@ public final class InteractionDtoUtils {
         executionDto.setTitle(targetTitle);
         executionDto.setUser(user);
 
-        executionDto.setMemberId(memberId);
+        executionDto.setMemberIdentifier(memberId);
         return executionDto;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/f00d2d2f/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
index 127e771..07a881c 100644
--- a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
+++ b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
@@ -132,7 +132,7 @@ public class Roundtrip {
 
 
         // then
-        assertThat(recreated.getExecution().getMemberId(), Matchers.is(interactionDto.getExecution().getMemberId()));
+        assertThat(recreated.getExecution().getMemberIdentifier(), Matchers.is(interactionDto.getExecution().getMemberIdentifier()));
         assertThat(recreated.getExecution().getTarget().getObjectType(), Matchers.is(interactionDto.getExecution().getTarget().getObjectType()));
         assertThat(recreated.getExecution().getTarget().getObjectIdentifier(), Matchers.is(interactionDto.getExecution().getTarget().getObjectIdentifier()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/f00d2d2f/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
index 5d6cee9..037acd5 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
@@ -83,13 +83,13 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="interactionType" type="common:interactionType">
-                <xs:annotation>
-                    <xs:documentation>Indicates whether this is an intention to invoke an action, or edit a property.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
         </xs:sequence>
+        <xs:attribute  name="interactionType" type="common:interactionType">
+            <xs:annotation>
+                <xs:documentation>Indicates whether this is an intention to invoke an action, or edit a property.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:complexType>
 
     <xs:complexType name="actionDto">

http://git-wip-us.apache.org/repos/asf/isis/blob/f00d2d2f/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
index 6977fa5..3c1688a 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
@@ -83,15 +83,9 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="interactionType" type="common:interactionType">
+            <xs:element name="memberIdentifier" type="xs:string">
                 <xs:annotation>
-                    <xs:documentation>Indicates whether this is an intention to invoke an action, or edit a property.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="memberId" type="xs:string">
-                <xs:annotation>
-                    <xs:documentation>Formal identifier of the member being interacted with (action or property).
+                    <xs:documentation>Formal identifier (class name and member name) of the member being interacted with (action or property).
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
@@ -119,7 +113,7 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="childExecutions" minOccurs="1" maxOccurs="1">
+            <xs:element name="childExecutions" minOccurs="0" maxOccurs="1">
                 <xs:complexType>
                     <xs:sequence>
                         <xs:element name="execution" type="memberExecutionDto" minOccurs="0" maxOccurs="unbounded">
@@ -132,6 +126,12 @@
                 </xs:complexType>
             </xs:element>
         </xs:sequence>
+        <xs:attribute  name="interactionType" type="common:interactionType">
+            <xs:annotation>
+                <xs:documentation>Indicates whether this is an intention to invoke an action, or edit a property.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:complexType>
 
     <xs:complexType name="actionInvocationDto">


[2/2] isis git commit: ISIS-1389: further simplifications of the DTO structure

Posted by da...@apache.org.
ISIS-1389: further simplifications of the DTO structure


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0fa47c86
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0fa47c86
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0fa47c86

Branch: refs/heads/ISIS-1291
Commit: 0fa47c86f37894465a6f030a037ec73eea9540cc
Parents: f00d2d2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 23:58:12 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 23:58:12 2016 +0100

----------------------------------------------------------------------
 .../background/BackgroundCommandService2.java   | 15 +++--
 .../isis/schema/utils/CommandDtoUtils.java      | 18 ++++--
 .../isis/schema/utils/CommonDtoUtils.java       | 45 +++++++++------
 .../isis/schema/utils/InteractionDtoUtils.java  | 16 +++---
 ...onInvocationFacetForDomainEventAbstract.java |  2 -
 .../actions/action/invocation/CommandUtil.java  |  3 +-
 ...etterOrClearFacetForDomainEventAbstract.java |  3 -
 .../metamodel/spec/feature/ObjectAction.java    |  9 +--
 .../spec/feature/OneToOneAssociation.java       | 32 -----------
 .../specimpl/ObjectActionContributee.java       | 11 ++--
 .../specimpl/ObjectActionDefault.java           | 34 ++++++++---
 .../specimpl/ObjectActionMixedIn.java           | 12 ++--
 .../specimpl/ObjectActionParameterAbstract.java |  9 ++-
 .../specimpl/ObjectMemberAbstract.java          |  2 +-
 .../specimpl/OneToManyAssociationMixedIn.java   | 16 ++++--
 .../OneToOneActionParameterContributee.java     |  2 +-
 .../OneToOneActionParameterMixedIn.java         |  2 +-
 .../specimpl/OneToOneAssociationDefault.java    | 59 +++++++++-----------
 .../specimpl/OneToOneAssociationMixedIn.java    | 17 +++---
 .../background/BackgroundCommandExecution.java  | 14 +++--
 .../CommandDtoServiceInternalDefault.java       |  8 ++-
 ...SqlTimestampXmlGregorianCalendarAdapter.java | 15 ++---
 .../jaxbadapters/JodaDateTimeStringAdapter.java |  2 +-
 ...JodaDateTimeXMLGregorianCalendarAdapter.java |  2 +-
 .../JodaLocalDateStringAdapter.java             |  3 +
 .../JodaLocalDateTimeStringAdapter.java         |  3 +
 ...ocalDateTimeXMLGregorianCalendarAdapter.java |  2 +-
 ...odaLocalDateXMLGregorianCalendarAdapter.java |  2 +-
 .../JodaLocalTimeStringAdapter.java             |  3 +
 ...odaLocalTimeXMLGregorianCalendarAdapter.java |  2 +-
 .../org/apache/isis/schema/cmd/cmd-1.0.xsd      | 39 +++++++------
 .../apache/isis/schema/common/common-1.0.xsd    | 21 +++++--
 .../org/apache/isis/schema/ixn/ixn-1.0.xsd      | 10 +---
 33 files changed, 217 insertions(+), 216 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java
index 477e0a9..c79a1fa 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java
@@ -31,15 +31,14 @@ import org.apache.isis.schema.cmd.v1.CommandDto;
 public interface BackgroundCommandService2 extends BackgroundCommandService {
 
     /**
-     * Replaces {@link BackgroundCommandService#schedule(ActionInvocationMemento, Command, String, String, String)}
-     * @param dto
-     * @param command
-     * @param targetClassName
-     * @param targetActionName
-     * @param targetArgs
+     * Will be called instead of
+     * {@link BackgroundCommandService#schedule(ActionInvocationMemento, Command, String, String, String)}
+     * (ie if the implementation implements this interface rather than simply {@link BackgroundCommandService}).
      */
     void schedule(
             final CommandDto dto,
-            final Command command,
-            final String targetClassName, final String targetActionName, final String targetArgs);
+            final Command parentCommand,
+            final String targetClassName,
+            final String targetActionName,
+            final String targetArgs);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
index bcb8529..3d60b10 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
@@ -35,6 +35,8 @@ import com.google.common.io.Resources;
 
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.cmd.v1.CommandDto;
+import org.apache.isis.schema.cmd.v1.ParamsDto;
+import org.apache.isis.schema.common.v1.OidsDto;
 
 public final class CommandDtoUtils {
 
@@ -91,14 +93,22 @@ public final class CommandDtoUtils {
 
     //endregion
 
-    public static ActionDto.Parameters parametersFor(final ActionDto actionDto) {
-        ActionDto.Parameters parameters = actionDto.getParameters();
+    public static OidsDto targetsFor(final CommandDto dto) {
+        OidsDto targets = dto.getTargets();
+        if(targets == null) {
+            targets = new OidsDto();
+            dto.setTargets(targets);
+        }
+        return targets;
+    }
+
+    public static ParamsDto parametersFor(final ActionDto actionDto) {
+        ParamsDto parameters = actionDto.getParameters();
         if(parameters == null) {
-            parameters = new ActionDto.Parameters();
+            parameters = new ParamsDto();
             actionDto.setParameters(parameters);
         }
         return parameters;
     }
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
index 22376ed..90c8c92 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
@@ -50,12 +50,12 @@ public final class CommonDtoUtils {
 
     public static final Function<ParamDto, String> PARAM_DTO_TO_NAME = new Function<ParamDto, String>() {
         @Override public String apply(final ParamDto paramDto) {
-            return paramDto.getParameterName();
+            return paramDto.getName();
         }
     };
     public static final Function<ParamDto, ValueType> PARAM_DTO_TO_TYPE = new Function<ParamDto, ValueType>() {
         @Override public ValueType apply(final ParamDto paramDto) {
-            return paramDto.getParameterType();
+            return paramDto.getType();
         }
     };
     //endregion
@@ -102,7 +102,7 @@ public final class CommonDtoUtils {
     }
     //endregion
 
-    //region > newValueDto
+    //region > newValueDto, setValueOn
 
     public static ValueDto newValueDto(
             final ValueType valueType,
@@ -114,6 +114,24 @@ public final class CommonDtoUtils {
         }
 
         final ValueDto valueDto = new ValueDto();
+        return setValueOn(valueDto, valueType, val, bookmarkService);
+    }
+
+    public static <T extends ValueWithTypeDto> T setValueOn(
+            final T valueWithTypeDto,
+            final ValueType valueType,
+            final Object val,
+            final BookmarkService bookmarkService) {
+        setValueOn((ValueDto)valueWithTypeDto, valueType, val, bookmarkService);
+        valueWithTypeDto.setNull(val == null);
+        return valueWithTypeDto;
+    }
+
+    public static <T extends ValueDto> T setValueOn(
+            final T valueDto,
+            final ValueType valueType,
+            final Object val,
+            final BookmarkService bookmarkService) {
         switch (valueType) {
         case STRING: {
             final String argValue = (String) val;
@@ -321,8 +339,7 @@ public final class CommonDtoUtils {
         final ValueType valueType = asValueType(type);
         valueWithTypeDto.setType(valueType);
 
-        final ValueDto valueDto = newValueDto(valueType, val, bookmarkService);
-        valueWithTypeDto.setValue(valueDto);
+        setValueOn(valueWithTypeDto, valueType, val, bookmarkService);
 
         return valueWithTypeDto;
     }
@@ -336,8 +353,7 @@ public final class CommonDtoUtils {
             return null;
         }
         final ValueType type = valueWithTypeDto.getType();
-        final ValueDto value = valueWithTypeDto.getValue();
-        return CommonDtoUtils.getValue(value, type);
+        return CommonDtoUtils.getValue(valueWithTypeDto, type);
     }
 
 
@@ -354,16 +370,12 @@ public final class CommonDtoUtils {
 
         final ParamDto paramDto = new ParamDto();
 
-        paramDto.setParameterName(parameterName);
+        paramDto.setName(parameterName);
 
         final ValueType valueType = CommonDtoUtils.asValueType(parameterType);
-        paramDto.setParameterType(valueType);
-
-        final ValueDto valueDto =
-                CommonDtoUtils.newValueDto(valueType, arg, bookmarkService);
-        paramDto.setArgument(valueDto);
+        paramDto.setType(valueType);
 
-        paramDto.setNull(arg == null);
+        CommonDtoUtils.setValueOn(paramDto, valueType, arg, bookmarkService);
 
         return paramDto;
     }
@@ -375,9 +387,8 @@ public final class CommonDtoUtils {
         if(paramDto.isNull()) {
             return null;
         }
-        final ValueType parameterType = paramDto.getParameterType();
-        final ValueDto argument = paramDto.getArgument();
-        return CommonDtoUtils.getValue(argument, parameterType);
+        final ValueType parameterType = paramDto.getType();
+        return CommonDtoUtils.getValue(paramDto, parameterType);
     }
 
     //endregion

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 121c47a..b3f3fba 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -41,6 +41,7 @@ import com.google.common.io.Resources;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.schema.cmd.v1.ParamDto;
+import org.apache.isis.schema.cmd.v1.ParamsDto;
 import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.OidDto;
 import org.apache.isis.schema.common.v1.PeriodDto;
@@ -211,7 +212,7 @@ public final class InteractionDtoUtils {
         if(type == InteractionType.ACTION_INVOCATION) {
 
             final ActionInvocationDto invocation = new ActionInvocationDto();
-            final ActionInvocationDto.Parameters invocationParameters = parametersFor(invocation);
+            final ParamsDto invocationParameters = parametersFor(invocation);
             invocation.setParameters(invocationParameters);
             invocationParameters.getParameter().addAll(parameterDtos);
 
@@ -282,10 +283,10 @@ public final class InteractionDtoUtils {
         return parameterListFor(actionInvocationFor(ixnDto));
     }
 
-    private static ActionInvocationDto.Parameters parametersFor(final ActionInvocationDto invocationDto) {
-        ActionInvocationDto.Parameters parameters = invocationDto.getParameters();
+    private static ParamsDto parametersFor(final ActionInvocationDto invocationDto) {
+        ParamsDto parameters = invocationDto.getParameters();
         if(parameters == null) {
-            parameters = new ActionInvocationDto.Parameters();
+            parameters = new ParamsDto();
             invocationDto.setParameters(parameters);
         }
         return parameters;
@@ -380,18 +381,17 @@ public final class InteractionDtoUtils {
     }
 
     public static ValueDto getParameterArgument(final ActionInvocationDto ai, final int paramNum) {
-        final ParamDto paramDto = getParameter(ai, paramNum);
-        return paramDto.getArgument();
+        return getParameter(ai, paramNum);
     }
 
     public static String getParameterName(final ActionInvocationDto ai, final int paramNum) {
         final ParamDto paramDto = getParameter(ai, paramNum);
-        return paramDto.getParameterName();
+        return paramDto.getName();
     }
 
     public static ValueType getParameterType(final ActionInvocationDto ai, final int paramNum) {
         final ParamDto paramDto = getParameter(ai, paramNum);
-        return paramDto.getParameterType();
+        return paramDto.getType();
     }
     public static boolean isNull(final ActionInvocationDto ai, int paramNum) {
         final ParamDto paramDto = getParameter(ai, paramNum);

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index d89c8bc..555c218 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -165,8 +165,6 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
 
-        owningAction.setupCommand(targetAdapter, argumentAdapters);
-
 
         final InteractionContext interactionContext = getInteractionContext();
         final Interaction interaction = interactionContext.getInteraction();

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
index 65ad7f4..a9a59e2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -78,8 +78,7 @@ public class CommandUtil {
                 CommandUtil.appendParamArg(argsBuf, param, arguments[i++]);
             }
         }
-        String argsStr = argsBuf.toString();
-        return argsStr;
+        return argsBuf.toString();
     }
 
     public static Bookmark bookmarkFor(final ObjectAdapter adapter) {

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 878bfa1..16d0ee7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -161,9 +161,6 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
 
-        owningProperty.setupCommand(targetAdapter, newValueAdapter);
-
-
         final InteractionContext interactionContext = getInteractionContext();
         final Interaction interaction = interactionContext.getInteraction();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index a94f647..f22c8a1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -37,6 +37,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetFilters;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -194,17 +195,11 @@ public interface ObjectAction extends ObjectMember {
 
 
     /**
-     * internal API
+     * internal API, called by {@link ActionInvocationFacet} if the action is actually executed (ie in the foreground).
      */
     void setupActionInvocationContext(
             final ObjectAdapter targetAdapter);
 
-    /**
-     * internal API
-     */
-    void setupCommand(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] argumentAdapters);
 
     // //////////////////////////////////////////////////////
     // Utils

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
index 78062b1..6d02e36 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
@@ -52,39 +52,7 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
             final ObjectAdapter proposedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy);
 
-    /**
-     * Set up the association represented by this field in the specified object
-     * with the specified reference - this call sets up the logical state of the
-     * object and might affect other objects that share this association (such
-     * as back-links or bidirectional association). To initialise a recreated
-     * object to this logical state the <code>initAssociation</code> method
-     * should be used on each of the objects.
-     * 
-     * @deprecated - see {@link MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)}
-     * @see #initAssociation(ObjectAdapter, ObjectAdapter)
-     */
-    @Deprecated
-    void setAssociation(
-            ObjectAdapter inObject,
-            ObjectAdapter associate,
-            final InteractionInitiatedBy interactionInitiatedBy);
-
-    /**
-     * Clear this reference field (make it <code>null</code>) in the specified
-     * object, and remove any association back-link.
-     * 
-     * @see #setAssociation(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
-     * @deprecated - see {@link MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)}
-     */
-    @Deprecated
-    void clearAssociation(ObjectAdapter inObject, final InteractionInitiatedBy interactionInitiatedBy);
 
-    /**
-     * Internal API
-     */
-    void setupCommand(final ObjectAdapter targetAdapter, final ObjectAdapter valueAdapter);
-
-    
     // //////////////////////////////////////////////////////
     // Functions
     // //////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index ce336cb..03b06c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -187,14 +187,13 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     public ObjectAdapter execute(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] arguments,
+            final ObjectAdapter[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        
-        setupActionInvocationContext(targetAdapter);
-        setupCommandTarget(targetAdapter, arguments);
 
-        return serviceAction.execute(
-                getServiceAdapter(), mixedInAdapter, argsPlusContributee(targetAdapter, arguments),
+        setupCommand(targetAdapter, argumentAdapters);
+
+        return serviceAction.executeInternal(
+                getServiceAdapter(), mixedInAdapter, argsPlusContributee(targetAdapter, argumentAdapters),
                 interactionInitiatedBy);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index f10f570..dd26cee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -36,6 +36,7 @@ import org.apache.isis.applib.annotation.Bulk;
 import org.apache.isis.applib.annotation.InvokedOn;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.core.commons.debug.DebugString;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -372,16 +373,32 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
         return execute(target, mixedInAdapter, arguments, interactionInitiatedBy);
     }
 
-
+    /**
+     * Sets up the {@link Command}, then delegates off to
+     * {@link #executeInternal(ObjectAdapter, ObjectAdapter, ObjectAdapter[], InteractionInitiatedBy) executeInternal}
+     * to invoke the {@link ActionInvocationFacet invocation facet}.
+     *
+     * @param mixedInAdapter - will be null for regular actions, and for mixin actions.  When a mixin action invokes its underlying mixedIn action, then will be populated (so that the ActionDomainEvent can correctly provide the underlying mixin)
+     */
     @Override
     public ObjectAdapter execute(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter mixedInAdapter,
             final ObjectAdapter[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("execute action " + targetAdapter + "." + getId());
-        }
+
+        setupCommand(targetAdapter, argumentAdapters);
+
+        return this.executeInternal(targetAdapter, mixedInAdapter, argumentAdapters, interactionInitiatedBy);
+    }
+
+    /**
+     * private API, called by mixins and contributees.
+     */
+    public ObjectAdapter executeInternal(
+            final ObjectAdapter targetAdapter,
+            final ObjectAdapter mixedInAdapter,
+            final ObjectAdapter[] argumentAdapters, final InteractionInitiatedBy interactionInitiatedBy) {
         final ActionInvocationFacet facet = getFacet(ActionInvocationFacet.class);
         return facet.invoke(this, targetAdapter, mixedInAdapter, argumentAdapters, interactionInitiatedBy);
     }
@@ -564,9 +581,9 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     }
 
     /**
-     * Internal API
+     * Internal API, called by the various implementations of {@link ObjectAction} ({@link ObjectActionDefault default},
+     * {@link ObjectActionMixedIn mixed-in} and {@link ObjectActionContributee contributee}).
      */
-    @Override
     public void setupCommand(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] argumentAdapters) {
@@ -576,16 +593,15 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
         setupCommandMementoAndExecutionContext(targetAdapter, argumentAdapters);
     }
 
-    protected void setupCommandTarget(
+    private void setupCommandTarget(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] argumentAdapters) {
 
         final String arguments = CommandUtil.argDescriptionFor(this, argumentAdapters);
-
         setupCommandTarget(targetAdapter, arguments);
     }
 
-    protected void setupCommandMementoAndExecutionContext(
+    private void setupCommandMementoAndExecutionContext(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] argumentAdapters) {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 8c68f84..9fc4ed3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -206,17 +206,13 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
             final ObjectAdapter[] arguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        // this code also exists in ActionInvocationFacetViaMethod
-        // we need to repeat it here because the target adapter should be the mixedInAdapter, not the mixin
-
-        setupActionInvocationContext(mixedInAdapter);
-
-        setupCommandTarget(mixedInAdapter, arguments);
-        setupCommandMementoAndExecutionContext(mixedInAdapter, arguments);
 
         final ObjectAdapter targetAdapter = mixinAdapterFor(mixinType, target);
         final ObjectAdapter actualMixedInAdapter = target;
-        return mixinAction.execute(
+
+        setupCommand(actualMixedInAdapter, arguments);
+
+        return mixinAction.executeInternal(
                 targetAdapter, actualMixedInAdapter, arguments,
                 interactionInitiatedBy);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index c309352..190c504 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -325,7 +325,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
             final InteractionInitiatedBy interactionInitiatedBy) {
         final List<ObjectAdapter> argListIfAvailable = ListExtensions.mutableCopy(argumentsIfAvailable);
         
-        final ObjectAdapter target = targetForDefaultOrChoicesOrValidate(adapter);
+        final ObjectAdapter target = targetForDefaultOrChoices(adapter);
         final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
         
         return findChoices(target, args, interactionInitiatedBy);
@@ -363,7 +363,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     @Override
     public ObjectAdapter getDefault(final ObjectAdapter adapter) {
         
-        final ObjectAdapter target = targetForDefaultOrChoicesOrValidate(adapter);
+        final ObjectAdapter target = targetForDefaultOrChoices(adapter);
         final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, null);
         
         return findDefault(target, args);
@@ -388,7 +388,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     /**
      * Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
      */
-    protected ObjectAdapter targetForDefaultOrChoicesOrValidate(final ObjectAdapter adapter) {
+    protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter adapter) {
         return adapter;
     }
 
@@ -476,10 +476,9 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
             }
         }
 
-        final ObjectAdapter targetAdapter = targetForDefaultOrChoicesOrValidate(objectAdapter);
         final ObjectAdapter[] argumentAdapters = arguments(proposedValueAdapter);
         final ValidityContext<?> ic = createProposedArgumentInteractionContext(
-                targetAdapter, argumentAdapters, getNumber(), interactionInitiatedBy
+                objectAdapter, argumentAdapters, getNumber(), interactionInitiatedBy
         );
 
         final InteractionResultSet buf = new InteractionResultSet();

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 5c489c4..57c0af7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -422,7 +422,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
         }
 
         if(command.getTarget() != null) {
-            // already set up by a ObjectActionContributee or edit form; don't overwrite
+            // is set up by the outer-most action; inner actions (invoked via the WrapperFactory) must not overwrite
             return;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index 0a49d5f..34ba2d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -143,9 +143,11 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
     }
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter mixedInAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+    public ObjectAdapter get(
+            final ObjectAdapter mixedInAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
-        return mixinAction.execute(mixinAdapter, mixedInAdapter, new ObjectAdapter[0], interactionInitiatedBy);
+        return mixinAction.executeInternal(mixinAdapter, mixedInAdapter, new ObjectAdapter[0], interactionInitiatedBy);
     }
 
     @Override
@@ -168,9 +170,10 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
             final ObjectAdapter mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
+
+        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final VisibilityContext<?> ic =
-                mixinAction.createVisibleInteractionContext(
-                        mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+                mixinAction.createVisibleInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
         return InteractionUtils.isVisibleResult(this, ic).createConsent();
     }
@@ -180,9 +183,11 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
             final ObjectAdapter mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
+
+        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final UsabilityContext<?> ic =
                 mixinAction.createUsableInteractionContext(
-                        mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+                        mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }
@@ -203,5 +208,4 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
     //endregion
 
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index ea4ac4e..980147b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@ -49,7 +49,7 @@ public class OneToOneActionParameterContributee extends OneToOneActionParameterD
                 interactionInitiatedBy);
     }
 
-    protected ObjectAdapter targetForDefaultOrChoicesOrValidate(final ObjectAdapter adapter) {
+    protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter adapter) {
         return serviceAdapter;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
index 39aea08..8fbd542 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
@@ -44,7 +44,7 @@ public class OneToOneActionParameterMixedIn extends OneToOneActionParameterDefau
                 interactionInitiatedBy);
     }
 
-    protected ObjectAdapter targetForDefaultOrChoicesOrValidate(final ObjectAdapter mixedInAdapter) {
+    protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter mixedInAdapter) {
         return mixinAdapterFor(mixedInAdapter);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index 70e6a1d..b16c2b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -25,6 +25,7 @@ import java.util.List;
 import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.core.commons.debug.DebugString;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
@@ -54,7 +55,6 @@ import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.MutableCurrentHolder;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.CommandDto;
@@ -152,7 +152,7 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
         return getPersistenceSessionService().adapterFor(referencedPojo);
     }
 
-    // UNUSED
+    // REVIEW: UNUSED
     private PropertyAccessContext createAccessInteractionContext(
             final ObjectAdapter ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
@@ -177,57 +177,54 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
         set(ownerAdapter, newReferencedAdapter, InteractionInitiatedBy.USER);
     }
 
+    /**
+     * Sets up the {@link Command}, then delegates to the appropriate facet
+     * ({@link PropertySetterFacet} or {@link PropertyClearFacet}).
+     */
     @Override
     public void set(
             final ObjectAdapter ownerAdapter,
             final ObjectAdapter newReferencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        if (newReferencedAdapter != null) {
-            setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
-        } else {
-            clearValue(ownerAdapter, interactionInitiatedBy);
-        }
+
+        setupCommand(ownerAdapter, newReferencedAdapter);
+
+        setInternal(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
     }
 
-    /**
-     * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
-     */
-    @Deprecated
-    @Override
-    public void setAssociation(
+    private void setInternal(
             final ObjectAdapter ownerAdapter,
             final ObjectAdapter newReferencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
+        if (newReferencedAdapter != null) {
+            setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
+        } else {
+            clearValue(ownerAdapter, interactionInitiatedBy);
+        }
     }
 
     private void setValue(
             final ObjectAdapter ownerAdapter,
             final ObjectAdapter newReferencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+
         final PropertySetterFacet setterFacet = getFacet(PropertySetterFacet.class);
         if (setterFacet == null) {
             return;
         }
-        if (ownerAdapter.representsPersistent() && newReferencedAdapter != null && newReferencedAdapter.isTransient() && !newReferencedAdapter.getSpecification().isParented()) {
-            // TODO: move to facet ?
+
+        if (    ownerAdapter.representsPersistent() &&
+                newReferencedAdapter != null &&
+                newReferencedAdapter.isTransient() &&
+                !newReferencedAdapter.getSpecification().isParented()) {
+
+            // TODO: I've never seen this exception, and in any case DataNucleus supports persistence-by-reachability; so probably not required
             throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString(null) + " (transient)");
         }
-        setterFacet.setProperty(this, ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
-    }
 
-    /**
-     * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
-     */
-    @Deprecated
-    @Override
-    public void clearAssociation(
-            final ObjectAdapter ownerAdapter,
-            final InteractionInitiatedBy interactionInitiatedBy) {
-        clearValue(ownerAdapter, interactionInitiatedBy);
+        setterFacet.setProperty(this, ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
     }
 
-
     private void clearValue(
             final ObjectAdapter ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
@@ -328,7 +325,6 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     /**
      * Internal API
      */
-    @Override
     public void setupCommand(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter valueAdapterOrNull) {
@@ -338,16 +334,15 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
         setupCommandMementoAndExecutionContext(targetAdapter, valueAdapterOrNull);
     }
 
-    protected void setupCommandTarget(
+    private void setupCommandTarget(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter valueAdapter) {
 
         final String arguments = CommandUtil.argDescriptionFor(valueAdapter);
-
         setupCommandTarget(targetAdapter, arguments);
     }
 
-    protected void setupCommandMementoAndExecutionContext(
+    private void setupCommandMementoAndExecutionContext(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter valueAdapterOrNull) {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 9f83174..99bb677 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -128,7 +128,7 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
-        return mixinAction.execute(mixinAdapter, mixedInAdapter, new ObjectAdapter[0], interactionInitiatedBy);
+        return mixinAction.executeInternal(mixinAdapter, mixedInAdapter, new ObjectAdapter[0], interactionInitiatedBy);
     }
 
     @Override
@@ -150,10 +150,11 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
     public Consent isVisible(
             final ObjectAdapter mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy,
-            Where where) {
+            final Where where) {
+
+        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final VisibilityContext<?> ic =
-                mixinAction.createVisibleInteractionContext(
-                        mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+                mixinAction.createVisibleInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
         return InteractionUtils.isVisibleResult(this, ic).createConsent();
     }
@@ -161,10 +162,12 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
     @Override
     public Consent isUsable(
             final ObjectAdapter mixedInAdapter,
-            final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
+            final InteractionInitiatedBy interactionInitiatedBy,
+            final Where where) {
+
+        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final UsabilityContext<?> ic =
-                mixinAction.createUsableInteractionContext(
-                        mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+                mixinAction.createUsableInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
index 8a123ee..2b3c8cb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
@@ -25,7 +25,7 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.services.background.ActionInvocationMemento;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.Command.Executor;
@@ -54,7 +54,9 @@ import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.cmd.v1.PropertyDto;
 import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.OidDto;
+import org.apache.isis.schema.common.v1.OidsDto;
 import org.apache.isis.schema.common.v1.ValueWithTypeDto;
+import org.apache.isis.schema.utils.CommandDtoUtils;
 import org.apache.isis.schema.utils.CommonDtoUtils;
 
 /**
@@ -134,7 +136,8 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
                         final String actionId = aim.getActionId();
 
                         final Bookmark targetBookmark = aim.getTarget();
-                        final Object targetObject = bookmarkService.lookup(targetBookmark);
+                        final Object targetObject = bookmarkService.lookup(
+                                                        targetBookmark, BookmarkService2.FieldResetPolicy.RESET);
 
                         final ObjectAdapter targetAdapter = adapterFor(targetObject);
                         final ObjectSpecification specification = targetAdapter.getSpecification();
@@ -167,12 +170,14 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
                         final MemberDto memberDto = dto.getMember();
                         final String memberId = memberDto.getMemberIdentifier();
 
+                        final OidsDto oidsDto = CommandDtoUtils.targetsFor(dto);
+                        final List<OidDto> targetOidDtos = oidsDto.getOid();
+
                         final InteractionType interactionType = memberDto.getInteractionType();
                         if(interactionType == InteractionType.ACTION_INVOCATION) {
 
                             final ActionDto actionDto = (ActionDto) memberDto;
 
-                            final List<OidDto> targetOidDtos = dto.getTargets();
                             for (OidDto targetOidDto : targetOidDtos) {
 
                                 final Bookmark bookmark = Bookmark.from(targetOidDto);
@@ -203,7 +208,6 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
 
                             final PropertyDto propertyDto = (PropertyDto) memberDto;
 
-                            final List<OidDto> targetOidDtos = dto.getTargets();
                             for (OidDto targetOidDto : targetOidDtos) {
 
                                 final Bookmark bookmark = Bookmark.from(targetOidDto);
@@ -344,7 +348,7 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
     // //////////////////////////////////////
 
     @javax.inject.Inject
-    private BookmarkService bookmarkService;
+    private BookmarkService2 bookmarkService;
 
     @javax.inject.Inject
     private JaxbService jaxbService;

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
index 341afdc..2aef5d5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -48,8 +48,10 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 import org.apache.isis.schema.cmd.v1.ParamDto;
+import org.apache.isis.schema.cmd.v1.ParamsDto;
 import org.apache.isis.schema.cmd.v1.PropertyDto;
 import org.apache.isis.schema.common.v1.InteractionType;
+import org.apache.isis.schema.common.v1.OidsDto;
 import org.apache.isis.schema.common.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.CommandDtoUtils;
 import org.apache.isis.schema.utils.CommonDtoUtils;
@@ -183,12 +185,12 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
         for (ObjectAdapter targetAdapter : targetAdapters) {
             final RootOid rootOid = (RootOid) targetAdapter.getOid();
             final Bookmark bookmark = rootOid.asBookmark();
-            dto.getTargets().add(bookmark.toOidDto());
+            final OidsDto targets = CommandDtoUtils.targetsFor(dto);
+            targets.getOid().add(bookmark.toOidDto());
         }
         return dto;
     }
 
-
     @Override
     public void addActionArgs(
             final ObjectAction objectAction,
@@ -204,7 +206,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
             final Class<?> paramType = actionParameter.getSpecification().getCorrespondingClass();
             final ObjectAdapter argAdapter = argAdapters[paramNum];
             final Object arg = argAdapter != null? argAdapter.getObject(): null;
-            final ActionDto.Parameters parameters = CommandDtoUtils.parametersFor(actionDto);
+            final ParamsDto parameters = CommandDtoUtils.parametersFor(actionDto);
             final List<ParamDto> parameterList = parameters.getParameter();
 
             ParamDto paramDto = CommonDtoUtils.newParamDto(

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
index cea3cd0..dfe6834 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
@@ -21,12 +21,14 @@ package org.apache.isis.schema.utils.jaxbadapters;
 import java.sql.Timestamp;
 import java.util.GregorianCalendar;
 
-import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
 
-public class JavaSqlTimestampXmlGregorianCalendarAdapter extends XmlAdapter<XMLGregorianCalendar, java.sql.Timestamp> {
+/**
+ * Note: not actually registered as a JAXB adapter.
+ */
+public class JavaSqlTimestampXmlGregorianCalendarAdapter  {
 
 
     // this assumes DTF is thread-safe, which it most probably is..
@@ -60,13 +62,4 @@ public class JavaSqlTimestampXmlGregorianCalendarAdapter extends XmlAdapter<XMLG
         return getDatatypeFactory().newXMLGregorianCalendar(c);
     }
 
-    @Override
-    public Timestamp unmarshal(final XMLGregorianCalendar v) throws Exception {
-        return null;
-    }
-
-    @Override
-    public XMLGregorianCalendar marshal(final Timestamp v) throws Exception {
-        return null;
-    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
index 36da922..f9c311d 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
@@ -25,7 +25,7 @@ import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
 /**
- * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
+ * Note: not actually registered as a JAXB adapter.
  */
 public final class JodaDateTimeStringAdapter {
     private JodaDateTimeStringAdapter() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
index ccd3943..11ddb0e 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
@@ -30,7 +30,7 @@ import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 
 /**
- * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
+ * Note: not actually registered as a JAXB adapter.
  */
 public final class JodaDateTimeXMLGregorianCalendarAdapter {
     private JodaDateTimeXMLGregorianCalendarAdapter() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
index f2bbe64..0057420 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
@@ -24,6 +24,9 @@ import org.joda.time.LocalDate;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
+/**
+ * Note: not actually registered as a JAXB adapter.
+ */
 public final class JodaLocalDateStringAdapter {
     private JodaLocalDateStringAdapter() {
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
index 3bbc291..b0e9556 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
@@ -24,6 +24,9 @@ import org.joda.time.LocalDateTime;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
+/**
+ * Note: not actually registered as a JAXB adapter.
+ */
 public final class JodaLocalDateTimeStringAdapter {
     private JodaLocalDateTimeStringAdapter() {
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
index 4501aa0..ea7531a 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
@@ -25,7 +25,7 @@ import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl
 import org.joda.time.LocalDateTime;
 
 /**
- * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
+ * Note: not actually registered as a JAXB adapter.
  */
 public final class JodaLocalDateTimeXMLGregorianCalendarAdapter {
     private JodaLocalDateTimeXMLGregorianCalendarAdapter() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
index 1489995..b526a0f 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
@@ -25,7 +25,7 @@ import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl
 import org.joda.time.LocalDate;
 
 /**
- * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
+ * Note: not actually registered as a JAXB adapter.
  */
 public final class JodaLocalDateXMLGregorianCalendarAdapter {
     private JodaLocalDateXMLGregorianCalendarAdapter() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
index 97b55c5..5cae29e 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
@@ -24,6 +24,9 @@ import org.joda.time.LocalTime;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
+/**
+ * Note: not actually registered as a JAXB adapter.
+ */
 public final class JodaLocalTimeStringAdapter {
     private JodaLocalTimeStringAdapter() {
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
index 108bb9b..2f30c72 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
@@ -25,7 +25,7 @@ import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl
 import org.joda.time.LocalTime;
 
 /**
- * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
+ * Note: not actually registered as a JAXB adapter.
  */
 public final class JodaLocalTimeXMLGregorianCalendarAdapter {
     private JodaLocalTimeXMLGregorianCalendarAdapter() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
index 037acd5..53bc0fb 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
@@ -50,7 +50,7 @@
                         </xs:documentation>
                     </xs:annotation>
                 </xs:element>
-                <xs:element name="targets" type="common:oidDto" minOccurs="1" maxOccurs="unbounded">
+                <xs:element name="targets" type="common:oidsDto">
                     <xs:annotation>
                         <xs:documentation>For regular actions, represents the entity/entities or view model(s) upon which the action is to be invoked.  For mixin actions, is the object(s) being mixed-into (the constructor arg to the mixin).  For contributed actions, is the domain service (the contributee object will be one of the action arguments within the payload).  Note that this means that bulk contributed actions cannot be reified as a memento (for this use case, implement as a mixin action instead).
                         </xs:documentation>
@@ -100,17 +100,11 @@
         <xs:complexContent>
             <xs:extension base="memberDto">
                 <xs:sequence>
-                    <xs:element name="parameters" minOccurs="1" maxOccurs="1">
+                    <xs:element name="parameters" type="paramsDto">
                         <xs:annotation>
-                            <xs:documentation>
-                                The set of parameter/argument values for this action invocation.
+                            <xs:documentation>The list of parameter/argument values for this action invocation.
                             </xs:documentation>
                         </xs:annotation>
-                        <xs:complexType>
-                            <xs:sequence minOccurs="0" maxOccurs="unbounded">
-                                <xs:element name="parameter" type="paramDto"/>
-                            </xs:sequence>
-                        </xs:complexType>
                     </xs:element>
                 </xs:sequence>
             </xs:extension>
@@ -131,21 +125,26 @@
         </xs:complexContent>
     </xs:complexType>
 
-    <xs:complexType name="paramDto">
+    <xs:complexType name="paramsDto">
         <xs:annotation>
-            <xs:documentation>The parameter types and values (ie arguments) of action parameters or the new value for a property.
+            <xs:documentation>A list of of parameter/argument values.
             </xs:documentation>
         </xs:annotation>
-        <xs:sequence>
-            <xs:element name="argument" type="common:valueDto">
-                <xs:annotation>
-                    <xs:documentation>The argument value of this parameter.</xs:documentation>
-                </xs:annotation>
-            </xs:element>
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="parameter" type="paramDto"/>
         </xs:sequence>
-        <xs:attribute name="parameterName" use="required" type="xs:string"/>
-        <xs:attribute name="parameterType" use="required" type="common:valueType"/>
-        <xs:attribute name="null" use="optional" type="xs:boolean"/>
+    </xs:complexType>
+
+    <xs:complexType name="paramDto">
+        <xs:annotation>
+            <xs:documentation>Defines an action parameter: its name, type and value (ie provided argument).
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="common:valueWithTypeDto">
+                <xs:attribute name="name" use="required" type="xs:string"/>
+            </xs:extension>
+        </xs:complexContent>
     </xs:complexType>
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
index 6ab8ae6..ac55c8e 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
@@ -53,6 +53,16 @@
         <xs:attribute name="objectState" type="bookmarkObjectState" default="persistent"/>
     </xs:complexType>
 
+    <xs:complexType name="oidsDto">
+        <xs:annotation>
+            <xs:documentation>A list of OIDs
+            </xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="oid" type="oidDto" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
     <xs:complexType name="enumDto">
         <xs:sequence>
             <xs:element name="enumType" type="xs:string"/>
@@ -124,11 +134,12 @@
             <xs:documentation>Captures both a value and its corresponding type.  Used for the return value of action invocations, and for the new value in property edits.
             </xs:documentation>
         </xs:annotation>
-        <xs:sequence>
-            <xs:element name="value" type="valueDto"/>
-        </xs:sequence>
-        <xs:attribute name="type" use="required" type="valueType"/>
-        <xs:attribute name="null" use="optional" type="xs:boolean"/>
+        <xs:complexContent>
+            <xs:extension base="valueDto">
+                <xs:attribute name="type" use="required" type="valueType"/>
+                <xs:attribute name="null" use="optional" type="xs:boolean"/>
+            </xs:extension>
+        </xs:complexContent>
     </xs:complexType>
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0fa47c86/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
index 3c1688a..32349de 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
@@ -138,17 +138,11 @@
         <xs:complexContent>
             <xs:extension base="memberExecutionDto">
                 <xs:sequence>
-                    <xs:element name="parameters" minOccurs="1" maxOccurs="1">
+                    <xs:element name="parameters" type="cmd:paramsDto">
                         <xs:annotation>
-                            <xs:documentation>
-                                The set of parameter/argument values for this action invocation.
+                            <xs:documentation>The list of parameter/argument values for this action invocation.
                             </xs:documentation>
                         </xs:annotation>
-                        <xs:complexType>
-                            <xs:sequence minOccurs="0" maxOccurs="unbounded">
-                                <xs:element name="parameter" type="cmd:paramDto"/>
-                            </xs:sequence>
-                        </xs:complexType>
                     </xs:element>
                     <xs:element name="returned" type="common:valueWithTypeDto" minOccurs="0" maxOccurs="1">
                         <xs:annotation>