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/04/08 13:08:38 UTC

[1/2] isis git commit: ISIS-1361: new BookmarkService2 subinterface to provide finer-grained control as to whether to reset fields when reloading an object; changing the JAXB PersistentEntityAdapter to use new API; also extending EntityPage onBeforeRende

Repository: isis
Updated Branches:
  refs/heads/master ebc692a69 -> 3e0a2d4c7


ISIS-1361: new BookmarkService2 subinterface to provide finer-grained control as to whether to reset fields when reloading an object; changing the JAXB PersistentEntityAdapter to use new API; also extending EntityPage onBeforeRender to disable concurrency checking for *all* objects, not merely the object being rendered.  Also updates to docs.


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

Branch: refs/heads/master
Commit: 3646d0aa7c4b3d575c79ded1a442c5753d1f5310
Parents: 8c89a56
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 8 11:41:38 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 8 12:05:28 2016 +0100

----------------------------------------------------------------------
 .../guides/_rgsvc_api_BookmarkService.adoc      | 23 +++++----
 .../asciidoc/guides/_rgsvc_integration-api.adoc |  4 +-
 .../services/bookmark/BookmarkService.java      | 11 ++++-
 .../services/bookmark/BookmarkService2.java     | 52 ++++++++++++++++++++
 .../PersistenceSessionService.java              |  3 +-
 .../noruntime/RuntimeContextNoRuntime.java      |  5 +-
 .../bookmarks/BookmarkServiceDefault.java       | 41 ++++++++++++---
 .../persistence/adapter/PojoAdapter.java        |  2 +-
 .../container/DomainObjectContainerResolve.java |  9 +++-
 .../internal/RuntimeContextFromSession.java     |  7 ++-
 .../system/persistence/PersistenceSession.java  | 11 +++--
 .../jaxbadapters/PersistentEntityAdapter.java   |  5 +-
 .../wicket/ui/pages/entity/EntityPage.java      | 13 +++--
 13 files changed, 150 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_BookmarkService.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_BookmarkService.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_BookmarkService.adoc
index 1beb796..a7103d5 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_BookmarkService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_BookmarkService.adoc
@@ -1,11 +1,11 @@
 [[_rgsvc_api_BookmarkService]]
-= `BookmarkService`
+= `BookmarkService2`
 :Notice: 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.
 :_basedir: ../
 :_imagesdir: images/
 
 
-The `BookmarkService` provides the ability to obtain a serializable `o.a.i.applib.bookmarks.Bookmark` for any (persisted) domain object, and to lookup domain objects given a `Bookmark`.  This can then in turn be converted to and from a string.
+The `BookmarkService2` API (the ``BookmarkService2`` subinterface to ``BookmarkService`` was introduced in ``1.12.1-SNAPSHOT``) provides the ability to obtain a serializable ``o.a.i.applib.bookmarks.Bookmark`` for any (persisted) domain object, and to lookup domain objects given a ``Bookmark``.  This can then in turn be converted to and from a string.
 
 For example, a `Customer` object with:
 
@@ -33,24 +33,29 @@ One downside of using ``Bookmark``s is that there is no way for the JDO/DataNucl
 
 == API & Implementation
 
-The API defined by `BookmarkService` is:
+The API defined by `BookmarkService2` (`1.12.1-SNAPSHOT`) is:
 
 [source,java]
 ----
-public interface BookmarkService {
+public interface BookmarkService2 {
+    enum FieldResetPolicy {                                                     // <1>
+        RESET,
+        DONT_RESET
+    }
     @Programmatic
-    Object lookup(BookmarkHolder bookmarkHolder);
+    Object lookup(BookmarkHolder bookmarkHolder, FieldResetPolicy policy);
     @Programmatic
-    Object lookup(Bookmark bookmark);
+    Object lookup(Bookmark bookmark, FieldResetPolicy policy);
     @Programmatic
-    <T> T lookup(Bookmark bookmark, Class<T> cls);   // <1>
+    <T> T lookup(Bookmark bookmark, FieldResetPolicy policy, Class<T> cls);     // <2>
     @Programmatic
     Bookmark bookmarkFor(Object domainObject);
     @Programmatic
     Bookmark bookmarkFor(Class<?> cls, String identifier);
 }
 ----
-<1> same as `lookup(Bookmark bookmark)`, but downcasts to the specified type.
+<1> (`1.12.1-SNAPSHOT`) - if the object has already been loaded from the database, then whether to reset its fields.  The default it to `RESET`.
+<2> same as `lookup(Bookmark bookmark)`, but downcasts to the specified type.
 
 
 The core framework provides a default implementation of this API, namely `o.a.i.core.metamodel.services.bookmarks.BookmarkServiceDefault`
@@ -79,7 +84,7 @@ Either of these can be suppressed, if required, using a vetoing subscriber.  For
 
 [source,java]
 ----
-@DomainObject
+@DomainService(nature=NatureOfService.DOMAIN)
 public class AlwaysHideBookmarkHolderAssociationsObjectProperty {
     @Subscribe
     public void on(BookmarkHolderAssociationContributions.ObjectDomainEvent ev) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/adocs/documentation/src/main/asciidoc/guides/_rgsvc_integration-api.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_integration-api.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_integration-api.adoc
index 94d1a18..b615241 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_integration-api.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_integration-api.adoc
@@ -24,8 +24,8 @@ The table below summarizes the integration APIs defined by Apache Isis.  It also
 
 |xref:rgsvc.adoc#_rgsvc_api_BookmarkService[`o.a.i.applib.` +
 `services.bookmark` +
-`BookmarkService`]
-|Convert object reference to a serializable "bookmark", and vice versa
+`BookmarkService2`]
+|Convert object reference to a serializable "bookmark", and vice versa.
 |`BookmarkServiceDefault` +
 ``o.a.i.core`` +
 ``isis-core-metamodel``

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
index 4e03b39..9aa89cf 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
@@ -31,15 +31,24 @@ import org.apache.isis.applib.annotation.Programmatic;
  */
 public interface BookmarkService {
 
+    /**
+     * @deprecated - use {@link BookmarkService2#lookup(BookmarkHolder, BookmarkService2.FieldResetPolicy)} instead.
+     */
+    @Deprecated
     @Programmatic
     Object lookup(BookmarkHolder bookmarkHolder);
 
+    /**
+     * @deprecated - use {@link BookmarkService2#lookup(Bookmark, BookmarkService2.FieldResetPolicy)} instead.
+     */
+    @Deprecated
     @Programmatic
     Object lookup(Bookmark bookmark);
 
     /**
-     * As {@link #lookup(Bookmark)}, but downcasting to the specified type.
+     * @deprecated - use {@link BookmarkService2#lookup(Bookmark, BookmarkService2.FieldResetPolicy, Class)} instead.
      */
+    @Deprecated
     @Programmatic
     <T> T lookup(Bookmark bookmark, Class<T> cls);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
new file mode 100644
index 0000000..6ed7957
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
@@ -0,0 +1,52 @@
+/*
+ *  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.applib.services.bookmark;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+/**
+ * This service enables a serializable &quot;bookmark&quot; to be created for an entity.
+ *
+ * <p>
+ * Because an implementation of this service (<tt>BookmarkServiceDefault</tt>) is annotated with
+ * {@link org.apache.isis.applib.annotation.DomainService} and is implemented in the core.metamodel, it is
+ * automatically registered and available for use; no configuration is required.
+ * </p>
+ */
+public interface BookmarkService2 extends BookmarkService {
+
+    enum FieldResetPolicy {
+        RESET,
+        DONT_RESET
+    }
+
+    @Programmatic
+    Object lookup(BookmarkHolder bookmarkHolder, FieldResetPolicy fieldResetPolicy);
+
+    @Programmatic
+    Object lookup(Bookmark bookmark, FieldResetPolicy fieldResetPolicy);
+
+    /**
+     * As {@link #lookup(Bookmark, FieldResetPolicy)}, but downcasting to the specified type.
+     */
+    @Programmatic
+    <T> T lookup(Bookmark bookmark, FieldResetPolicy fieldResetPolicy, Class<T> cls);
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/PersistenceSessionService.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/PersistenceSessionService.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/PersistenceSessionService.java
index 7df6684..d2db00a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/PersistenceSessionService.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/PersistenceSessionService.java
@@ -20,6 +20,7 @@ import java.util.List;
 
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -70,7 +71,7 @@ public interface PersistenceSessionService extends AdapterManager {
      * Called by <tt>BookmarkServicesDefault</tt>.
      * @return
      */
-    Object lookup(Bookmark bookmark);
+    Object lookup(Bookmark bookmark, final BookmarkService2.FieldResetPolicy fieldResetPolicy);
 
     Bookmark bookmarkFor(Object domainObject);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index 4befd85..46dbb78 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -24,6 +24,7 @@ import java.util.List;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
@@ -124,7 +125,9 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
             }
 
             @Override
-            public Object lookup(Bookmark bookmark) {
+            public Object lookup(
+                    final Bookmark bookmark,
+                    final BookmarkService2.FieldResetPolicy fieldResetPolicy) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
index 46ac2ec..24df9d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
@@ -23,7 +23,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.core.metamodel.runtimecontext.ConfigurationService;
 import org.apache.isis.core.metamodel.runtimecontext.ConfigurationServiceAware;
@@ -42,41 +42,68 @@ import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 @DomainService(
         nature = NatureOfService.DOMAIN
 )
-public class BookmarkServiceDefault implements BookmarkService, ConfigurationServiceAware,
+public class BookmarkServiceDefault implements BookmarkService2, ConfigurationServiceAware,
         PersistenceSessionServiceAware {
+
     private PersistenceSessionService persistenceSessionService;
 
     // //////////////////////////////////////
 
     @Programmatic
     @Override
-    public Object lookup(final BookmarkHolder bookmarkHolder) {
+    public Object lookup(
+            final BookmarkHolder bookmarkHolder,
+            final FieldResetPolicy fieldResetPolicy) {
         Bookmark bookmark = bookmarkHolder.bookmark();
-        return bookmark != null? lookup(bookmark): null;
+        return bookmark != null? lookup(bookmark, fieldResetPolicy): null;
+    }
+
+    @Programmatic
+    @Override
+    public Object lookup(final BookmarkHolder bookmarkHolder) {
+        return lookup(bookmarkHolder, FieldResetPolicy.RESET);
     }
 
     // //////////////////////////////////////
 
     @Programmatic
     @Override
-    public Object lookup(final Bookmark bookmark) {
+    public Object lookup(
+            final Bookmark bookmark,
+            final FieldResetPolicy fieldResetPolicy) {
         if(bookmark == null) {
             return null;
         }
         try {
-            return persistenceSessionService.lookup(bookmark);
+            return persistenceSessionService.lookup(bookmark, fieldResetPolicy);
         } catch(ObjectNotFoundException ex) {
             return null;
         }
     }
 
+    @Programmatic
+    @Override
+    public Object lookup(final Bookmark bookmark) {
+        return lookup(bookmark, FieldResetPolicy.RESET);
+    }
+
     // //////////////////////////////////////
 
     @SuppressWarnings("unchecked")
     @Programmatic
     @Override
+    public <T> T lookup(
+            final Bookmark bookmark,
+            final FieldResetPolicy fieldResetPolicy,
+            Class<T> cls) {
+        return (T) lookup(bookmark, fieldResetPolicy);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Programmatic
+    @Override
     public <T> T lookup(final Bookmark bookmark, Class<T> cls) {
-        return (T) lookup(bookmark);
+        return (T) lookup(bookmark, FieldResetPolicy.RESET, cls);
     }
 
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 85dbd3e..9b2db6a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -258,7 +258,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
                 final String currentUser = authenticationSession.getUserName();
                 throw new ConcurrencyException(currentUser, thisOid, thisVersion, otherVersion);
             } else {
-                LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion + ")");
+                LOG.info("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion + ")");
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
index d8cffd9..784d58e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.runtime.persistence.container;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -48,13 +49,17 @@ public class DomainObjectContainerResolve {
     public DomainObjectContainerResolve() {
     }
 
-    public Object lookup(final Bookmark bookmark) {
+    public Object lookup(final Bookmark bookmark, final BookmarkService2.FieldResetPolicy fieldResetPolicy) {
         RootOid oid = RootOid.create(bookmark);
         final ObjectAdapter adapter = adapterFor(oid);
         if(adapter == null) {
             return null;
         }
-        getPersistenceSession().refreshRootInTransaction(adapter);
+        if(fieldResetPolicy == BookmarkService2.FieldResetPolicy.RESET) {
+            getPersistenceSession().refreshRootInTransaction(adapter);
+        } else {
+            getPersistenceSession().loadObjectInTransaction(oid);
+        }
         return adapter.getObject();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index dff214d..85d727e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
@@ -137,8 +138,10 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
             }
 
             @Override
-            public Object lookup(Bookmark bookmark) {
-                return new DomainObjectContainerResolve().lookup(bookmark);
+            public Object lookup(
+                    final Bookmark bookmark,
+                    final BookmarkService2.FieldResetPolicy fieldResetPolicy) {
+                return new DomainObjectContainerResolve().lookup(bookmark, fieldResetPolicy);
             }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index a63571f..88f4ba2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -41,6 +41,7 @@ import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.eventbus.AbstractLifecycleEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
@@ -1592,7 +1593,7 @@ public class PersistenceSession implements
                             final String currentUser = authenticationSession.getUserName();
                             throw new ConcurrencyException(currentUser, recreatedOid, thisVersion, otherVersion);
                         } else {
-                            LOG.warn("concurrency conflict detected but suppressed, on " + recreatedOid + " (" + otherVersion + ")");
+                            LOG.info("concurrency conflict detected but suppressed, on " + recreatedOid + " (" + otherVersion + ")");
                         }
                     }
                 }
@@ -2090,7 +2091,7 @@ public class PersistenceSession implements
                     getCurrentTransaction().setAbortCause(abortCause);
 
                 } else {
-                    LOG.warn("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion
+                    LOG.info("concurrency conflict detected but suppressed, on " + thisOid + " (" + otherVersion
                             + ")");
                 }
             }
@@ -2309,8 +2310,10 @@ public class PersistenceSession implements
 
 
     @Override
-    public Object lookup(Bookmark bookmark) {
-        return new DomainObjectContainerResolve().lookup(bookmark);
+    public Object lookup(
+            final Bookmark bookmark,
+            final BookmarkService2.FieldResetPolicy fieldResetPolicy) {
+        return new DomainObjectContainerResolve().lookup(bookmark, fieldResetPolicy);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
index 41d0125..e88576a 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
 
 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.schema.common.v1.BookmarkObjectState;
 import org.apache.isis.schema.common.v1.OidDto;
 
@@ -33,7 +34,7 @@ public class PersistentEntityAdapter extends XmlAdapter<OidDto, Object> {
         final String identifier = oidDto.getObjectIdentifier();
         final Bookmark bookmark = new Bookmark(objectType, identifier);
 
-        return bookmarkService.lookup(bookmark);
+        return bookmarkService.lookup(bookmark, BookmarkService2.FieldResetPolicy.DONT_RESET);
     }
 
     @Override
@@ -63,5 +64,5 @@ public class PersistentEntityAdapter extends XmlAdapter<OidDto, Object> {
     }
 
     @Inject
-    BookmarkService bookmarkService;
+    BookmarkService2 bookmarkService;
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3646d0aa/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 133b69e..a6a5a11 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -22,7 +22,6 @@ package org.apache.isis.viewer.wicket.ui.pages.entity;
 import org.apache.wicket.Application;
 import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -40,7 +39,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
-import org.apache.isis.viewer.wicket.model.hints.IsisSelectorEvent;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
@@ -180,8 +178,15 @@ public class EntityPage extends PageAbstract {
      */
     @Override
     protected void onBeforeRender() {
-        this.model.load(ConcurrencyChecking.NO_CHECK);
-        super.onBeforeRender();
+        ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        EntityPage.this.model.load(ConcurrencyChecking.NO_CHECK);
+                        EntityPage.super.onBeforeRender();
+                    }
+                }
+        );
     }
 
     private DeploymentType getDeploymentType() {


[2/2] isis git commit: ISIS-1361: BookmarkService2 fix, concurrency fix

Posted by da...@apache.org.
ISIS-1361: BookmarkService2 fix, concurrency fix

merged from branch 'release-1.12.1-RC1'


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

Branch: refs/heads/master
Commit: 3e0a2d4c7de64df1f0742b723a36dcbb87007d33
Parents: ebc692a 3646d0a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 8 12:06:10 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 8 12:06:10 2016 +0100

----------------------------------------------------------------------
 .../guides/_rgsvc_api_BookmarkService.adoc      | 23 +++++----
 .../asciidoc/guides/_rgsvc_integration-api.adoc |  4 +-
 .../services/bookmark/BookmarkService.java      | 11 ++++-
 .../services/bookmark/BookmarkService2.java     | 52 ++++++++++++++++++++
 .../PersistenceSessionService.java              |  3 +-
 .../noruntime/RuntimeContextNoRuntime.java      |  5 +-
 .../bookmarks/BookmarkServiceDefault.java       | 41 ++++++++++++---
 .../persistence/adapter/PojoAdapter.java        |  2 +-
 .../container/DomainObjectContainerResolve.java |  9 +++-
 .../internal/RuntimeContextFromSession.java     |  7 ++-
 .../system/persistence/PersistenceSession.java  | 11 +++--
 .../jaxbadapters/PersistentEntityAdapter.java   |  5 +-
 .../wicket/ui/pages/entity/EntityPage.java      | 13 +++--
 13 files changed, 150 insertions(+), 36 deletions(-)
----------------------------------------------------------------------