You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/09/07 10:13:26 UTC

[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1976: prepare for merge (PR 121)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1976-rethink-object-adapters by this push:
     new 986a797  ISIS-1976: prepare for merge (PR 121)
986a797 is described below

commit 986a7971331f3ed88a98c55199a308d97ab011d3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 7 12:12:08 2018 +0200

    ISIS-1976: prepare for merge (PR 121)
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java  | 13 -------------
 .../metamodel/adapter/ObjectAdapterProvider.java    |  1 -
 .../persistence/PersistenceSession5_Decouple.java   | 21 ++++++++++++++++++++-
 .../runtime/persistence/adapter/PojoAdapter.java    | 10 ----------
 .../ObjectAdapterContext_ObjectAdapterProvider.java |  2 +-
 5 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 86dc643..c0fdb13 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -487,18 +487,5 @@ public interface ObjectAdapter extends Instance {
      */
     ObjectAdapter withPojo(Object newPojo);
 
-//    @Deprecated
-//    public static interface Friend {
-//      /**
-//      * Sometimes it is necessary to manage the replacement of the underlying
-//      * domain object (by another component such as an object store). This method
-//      * allows the adapter to be kept while the domain object is replaced.
-//      */
-//     void replacePojo(Object pojo);
-//    }
-//    
-//    @Deprecated
-//    Friend friend();
-
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index 3b8e0ec..eaf3eb4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -22,7 +22,6 @@ import java.util.List;
 import java.util.function.Function;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
index f5054f0..9eb2613 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
@@ -83,7 +83,24 @@ class PersistenceSession5_Decouple  {
             final RootOid rootOid,
             final ConcurrencyChecking concurrencyChecking) {
         
-        //FIXME[ISIS-1976] guard against service lookup
+        /* FIXME[ISIS-1976] guard against service lookup
+         * https://github.com/apache/isis/pull/121#discussion_r215889748
+         * 
+         * Eventually I'm hoping that this code will simplify and then become pluggable.
+         * Assuming that we stop supporting transient pojos, instead this code could
+         * iterate over a set of "PersistenceProviders", following the chain of
+         * responsibility pattern, where the first PersistenceProvider that recognises
+         * the format of the rootOid then takes responsibility for retrieving the
+         * corresponding pojo from its persistence store.
+         * 
+         * In the case of a PersistenceProvider for DN, that means a query to the DB. In
+         * the case of a PersistenceProvider for view models, it means unmarshalling the
+         * state from the oid into the pojo. (fyi, there's also the optional SPI
+         * service, UrlEncodingService or something like, whereby the root oid is a key
+         * into some other datastore. So really my "PersistenceProvider" is a
+         * generalization of that concept).
+         */
+
         final ObjectAdapter serviceAdapter = objectAdapterContext.lookupServiceAdapterFor(rootOid);
         if (serviceAdapter != null) {
             return serviceAdapter;
@@ -105,11 +122,13 @@ class PersistenceSession5_Decouple  {
                 throw ex; // just rethrow
             } catch(RuntimeException ex) {
                 
+                //FIXME[ISIS-1976] remove
                 System.err.println("------------------------------------------");
                 System.err.println("rootOid: "+rootOid.enString());
                 
                 ex.printStackTrace();
                 System.err.println("------------------------------------------");
+                //--
 
                 
                 throw new PojoRecreationException(rootOid, ex);
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 2411c26..e709e10 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
@@ -109,16 +109,6 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return pojo;
     }
 
-//    /**
-//     * Sometimes it is necessary to manage the replacement of the underlying
-//     * domain object (by another component such as an object store). This method
-//     * allows the adapter to be kept while the domain object is replaced.
-//     */
-//    @Override
-//    public void replacePojo(final Object pojo) {
-//        this.pojo = pojo;
-//    }
-
     // -- getOid
     @Override
     public Oid getOid() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index d8f422d..75d6e38 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -151,7 +151,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     
     // -- HELPER
     
-    private _Lazy<List<ObjectAdapter>> serviceAdapters = _Lazy.of(this::initServiceAdapters);
+    private final _Lazy<List<ObjectAdapter>> serviceAdapters = _Lazy.of(this::initServiceAdapters);
     
     private List<ObjectAdapter> initServiceAdapters() {
         return servicesInjector.streamRegisteredServiceInstances()