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

[isis] branch v2 updated: ISIS-2158: service lookup is no longer the responsibility of the persistence layer

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

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new 1c1142e  ISIS-2158: service lookup is no longer the responsibility of the persistence layer
1c1142e is described below

commit 1c1142e418a64394394529c4b97c6116ce1a26fa
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 31 14:25:07 2019 +0100

    ISIS-2158: service lookup is no longer the responsibility of the
    persistence layer
---
 .../jdo/objectadapter/ObjectAdapterContext.java    |   9 --
 ...ctAdapterContext_ObjectAdapterByIdProvider.java |   9 +-
 .../ObjectAdapterContext_ServiceLookup.java        | 109 ---------------------
 .../memento/ObjectAdapterMementoDefault.java       |   9 +-
 4 files changed, 10 insertions(+), 126 deletions(-)

diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java
index 6be2796..411aeaa 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java
@@ -70,7 +70,6 @@ final public class ObjectAdapterContext {
     @Getter private final SpecificationLoader specificationLoader;
     private final ObjectAdapterContext_ObjectAdapterProvider objectAdapterProviderMixin;
     private final ObjectAdapterContext_MementoSupport mementoSupportMixin;
-    private final ObjectAdapterContext_ServiceLookup serviceLookupMixin;
     private final ObjectAdapterContext_NewIdentifier newIdentifierMixin;
     private final ObjectAdapterContext_ObjectAdapterByIdProvider objectAdapterByIdProviderMixin;
     private final ObjectAdapterContext_DependencyInjection dependencyInjectionMixin;
@@ -87,7 +86,6 @@ final public class ObjectAdapterContext {
 
         this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession, runtimeContext);
         this.mementoSupportMixin = new ObjectAdapterContext_MementoSupport(this, persistenceSession);
-        this.serviceLookupMixin = new ObjectAdapterContext_ServiceLookup(this, runtimeContext.getServiceRegistry());
         this.newIdentifierMixin = new ObjectAdapterContext_NewIdentifier(persistenceSession, runtimeContext.getSpecificationLoader());
         this.objectAdapterByIdProviderMixin = new ObjectAdapterContext_ObjectAdapterByIdProvider(this, persistenceSession, runtimeContext);
         this.dependencyInjectionMixin = new ObjectAdapterContext_DependencyInjection(runtimeContext);
@@ -127,13 +125,6 @@ final public class ObjectAdapterContext {
         return newIdentifierMixin.createPersistentOid(pojo);
     }
 
-    // -- SERVICE LOOKUP
-
-    // package private
-    ObjectAdapter lookupServiceAdapterFor(RootOid rootOid) {
-        return serviceLookupMixin.lookupServiceAdapterFor(rootOid);
-    }
-
     // -- BY-ID SUPPORT
 
     public ObjectAdapterByIdProvider getObjectAdapterByIdProvider() {
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
index 114c3b1..bc40089 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
@@ -25,6 +25,7 @@ import java.util.stream.Stream;
 import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterByIdProvider;
 import org.apache.isis.metamodel.adapter.oid.ObjectNotFoundException;
@@ -40,6 +41,7 @@ import org.apache.isis.runtime.system.context.session.RuntimeContext;
 import org.apache.isis.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.security.authentication.AuthenticationSession;
 
+import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
@@ -118,10 +120,9 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider implements ObjectAdapterByI
          */
 
         //FIXME[ISIS-1976] remove guard
-        final ObjectAdapter serviceAdapter = objectAdapterContext.lookupServiceAdapterFor(rootOid);
-        if (serviceAdapter != null) {
-            //throw _Exceptions.unexpectedCodeReach();
-            return serviceAdapter;
+        val spec = specificationLoader.loadSpecification(rootOid.getObjectSpecId());
+        if(spec.isManagedBean()) {
+            throw _Exceptions.unexpectedCodeReach();
         }
 
         final ObjectAdapter adapter;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ServiceLookup.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ServiceLookup.java
deleted file mode 100644
index 0cb1364..0000000
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_ServiceLookup.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.jdo.objectadapter;
-
-import java.util.Map;
-
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.commons.internal.base._Timing;
-import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
-
-import lombok.val;
-
-/**
- * package private mixin for ObjectAdapterContext
- * <p>
- * Responsibility: provides ObjectAdapters for registered services 
- * </p> 
- * @since 2.0
- */
-//@Log4j2
-class ObjectAdapterContext_ServiceLookup {
-
-    private final ObjectAdapterContext objectAdapterContext;
-    private final ServiceRegistry serviceRegistry;
-
-    ObjectAdapterContext_ServiceLookup(
-            ObjectAdapterContext objectAdapterContext,
-            ServiceRegistry serviceRegistry) {
-
-        this.objectAdapterContext = objectAdapterContext;
-        this.serviceRegistry = serviceRegistry;
-    }
-
-    ObjectAdapter lookupServiceAdapterFor(RootOid rootOid) {
-
-        final ServicesByIdResource servicesByIdResource =
-                _Context.computeIfAbsent(ServicesByIdResource.class, this::initLookupResource);
-
-        final Object serviceInstance = servicesByIdResource.lookupServiceInstance(rootOid);
-        if(serviceInstance==null) {
-            return null;
-        }
-        return objectAdapterContext.getFactories().createRootAdapter(serviceInstance, rootOid);
-
-    }
-
-    // -- HELPER
-
-    /**
-     *  Application scoped resource to hold a map for looking up services by id.
-     */
-    private static class ServicesByIdResource implements AutoCloseable {
-        private final Map<RootOid, Object> servicesById = _Maps.newHashMap();
-
-        @Override
-        public void close() {
-            servicesById.clear();
-        }
-
-        public Object lookupServiceInstance(RootOid serviceRootOid) {
-            return servicesById.get(serviceRootOid);
-        }
-    }
-
-    private ServicesByIdResource initLookupResource() {
-
-        objectAdapterContext.printContextInfo("INIT SERVICE ID LOOKUP RESOURCE");
-
-        val watch = _Timing.now();
-
-        val servicesByIdResource = new ServicesByIdResource();
-        val adapterProvider = objectAdapterContext.getObjectAdapterProvider();
-
-        serviceRegistry.streamRegisteredBeans()
-        .map(adapterProvider::adapterForBean)
-        .forEach(serviceAdapter->{
-            _Assert.assertFalse("expected to not be 'transient'", serviceAdapter.getOid().isTransient());
-            servicesByIdResource.servicesById.put(
-                    (RootOid)serviceAdapter.getOid(),
-                    serviceAdapter.getPojo());
-        });
-
-        objectAdapterContext.printContextInfo("took (µs) "+watch.stop().getMicros());
-
-        return servicesByIdResource;
-    }
-
-
-}
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
index 35d20f0..66b43ff 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
@@ -262,18 +262,19 @@ public class ObjectAdapterMementoDefault implements Serializable {
                     PersistenceSession persistenceSession, 
                     SpecificationLoader specificationLoader) {
                 
-                RootOid oid = Oid.unmarshaller().unmarshal(memento.persistentOidStr, RootOid.class);
+                RootOid rootOid = Oid.unmarshaller().unmarshal(memento.persistentOidStr, RootOid.class);
                 try {
-                    final ManagedObject adapter = persistenceSession.adapterFor(oid);
-                    return adapter;
+                    
+                    return ManagedObject._adapterOfRootOid(specificationLoader, rootOid);
 
                 } finally {
+                    // possibly out-dated insight ...
                     // a side-effect of AdapterManager#adapterFor(...) is that it will update the oid
                     // with the correct version, even when there is a concurrency exception
                     // we copy this updated oid string into our memento so that, if we retry,
                     // we will succeed second time around
 
-                    memento.persistentOidStr = oid.enString();
+                    memento.persistentOidStr = rootOid.enString();
                 }
             }