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();
}
}