This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new f4acce30ee CAUSEWAY-3687: unify managed-bean-adapter hierarchy into
single class (_SingletonBeanProvider)
f4acce30ee is described below
commit f4acce30ee8feb715db096904b0901745d370f8e
Author: Andi Huber <[email protected]>
AuthorDate: Tue Feb 27 17:02:40 2024 +0100
CAUSEWAY-3687: unify managed-bean-adapter hierarchy into single class
(_SingletonBeanProvider)
- also refer to service beans via name rather than required class
---
.../applib/services/registry/ServiceRegistry.java | 11 ++-
.../commons/internal/ioc/_IocContainer.java | 4 +-
.../commons/internal/ioc/_IocContainer_Spring.java | 22 ++----
.../commons/internal/ioc/_ManagedBeanAdapter.java | 50 ------------
.../internal/ioc/_ManagedBeanAdapter_Spring.java | 49 ------------
.../ioc/_ManagedBeanAdapter_forTestingLazy.java | 44 -----------
.../internal/ioc/_SingletonBeanProvider.java | 90 ++++++++++++++++++++++
.../_testing/MetaModelContext_forTesting.java | 36 ++++-----
.../_testing/ServiceRegistry_forTesting.java | 18 ++---
.../context/MetaModelContext_usingSpring.java | 9 +--
.../core/metamodel/objectmanager/ObjectLoader.java | 6 +-
.../services/registry/ServiceRegistryDefault.java | 12 +--
.../title/TitlesAndTranslationsValidator.java | 3 +-
.../RuntimeServicesTestAbstract.java | 8 +-
.../SpringServiceProvisioningTest.java | 6 +-
15 files changed, 146 insertions(+), 222 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/registry/ServiceRegistry.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/registry/ServiceRegistry.java
index e20bda5add..bfc3a0d9b2 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/registry/ServiceRegistry.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/registry/ServiceRegistry.java
@@ -31,7 +31,7 @@ import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._Reduction;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import lombok.val;
@@ -68,8 +68,7 @@ public interface ServiceRegistry {
/**
* Streams all registered bean adapters implementing the requested type.
*/
- default Stream<_ManagedBeanAdapter> streamRegisteredBeansOfType(final
Class<?> requiredType) {
-
+ default Stream<_SingletonBeanProvider> streamRegisteredBeansOfType(final
Class<?> requiredType) {
return streamRegisteredBeans()
.filter(beanAdapter->beanAdapter.isCandidateFor(requiredType));
}
@@ -77,21 +76,21 @@ public interface ServiceRegistry {
/**
* Returns all bean adapters that have been registered.
*/
- Stream<_ManagedBeanAdapter> streamRegisteredBeans();
+ Stream<_SingletonBeanProvider> streamRegisteredBeans();
/**
* Returns a registered bean of given {@code name}.
*
* @param id - corresponds to the ObjectSpecificationId of the bean's type
*/
- Optional<_ManagedBeanAdapter> lookupRegisteredBeanById(LogicalType id);
+ Optional<_SingletonBeanProvider> lookupRegisteredBeanById(LogicalType id);
/**
* Returns a registered bean of given {@code name}, or throws when no such
bean.
*
* @param id - corresponds to the ObjectSpecificationId of the bean's type
*/
- default _ManagedBeanAdapter lookupRegisteredBeanByIdElseFail(final
LogicalType id) {
+ default _SingletonBeanProvider lookupRegisteredBeanByIdElseFail(final
LogicalType id) {
return lookupRegisteredBeanById(id).orElseThrow(
()->_Exceptions.unrecoverable(
"Failed to lookup BeanAdapter by id '" + id + "'"));
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer.java
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer.java
index 03be975ef6..0a82d254f7 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer.java
@@ -44,7 +44,7 @@ import lombok.val;
*/
public interface _IocContainer {
- Stream<_ManagedBeanAdapter> streamAllBeans();
+ Stream<_SingletonBeanProvider> streamAllBeans();
boolean containsBean(String id);
Optional<?> lookupBean(String id);
@@ -79,7 +79,7 @@ public interface _IocContainer {
<T> Can<T> select(Class<T> requiredType);
/**
- * Returns all available implementations of the service that matche the
additional qualifiers, ordered by priority.
+ * Returns all available implementations of the service that match the
additional qualifiers, ordered by priority.
*
* <p>
* If there is more than one implementation, then the one with the
"highest"
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
index d4e50903fe..aee1f1d3ad 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
@@ -28,8 +28,8 @@ import java.util.stream.Stream;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Primary;
-import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;
+import org.springframework.util.ClassUtils;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._NullSafe;
@@ -61,23 +61,11 @@ final class _IocContainer_Spring implements _IocContainer {
}
@Override
- public Stream<_ManagedBeanAdapter> streamAllBeans() {
-
- val context = springContext;
-
- return Stream.of(context.getBeanDefinitionNames())
+ public Stream<_SingletonBeanProvider> streamAllBeans() {
+ return Stream.of(springContext.getBeanDefinitionNames())
.map(name->{
-
- val type = context.getType(name);
- val id = name; // just reuse the bean's name
-
- //val scope =
beanFactory.getBeanDefinition(name).getScope();
-
- val resolvableType = ResolvableType.forClass(type);
- val bean = context.getBeanProvider(resolvableType);
-
- val beanAdapter = _ManagedBeanAdapter_Spring.of(id, type,
bean);
-
+ val type =
ClassUtils.getUserClass(springContext.getType(name));
+ val beanAdapter = _SingletonBeanProvider.of(name, type,
()->springContext.getBean(name));
return beanAdapter;
});
}
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter.java
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter.java
deleted file mode 100644
index c40eaf7a06..0000000000
---
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter.java
+++ /dev/null
@@ -1,50 +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.causeway.commons.internal.ioc;
-
-import java.util.function.Supplier;
-
-import org.apache.causeway.commons.collections.Can;
-
-/**
- * @since 2.0
- */
-public interface _ManagedBeanAdapter {
-
- String getId();
- Can<?> getInstance();
- Class<?> getBeanClass();
-
- boolean isCandidateFor(Class<?> requiredType);
-
- // -- TEST FACTORIES
-
- public static <T> _ManagedBeanAdapter forTestingLazy(final String
logicalTypeName, final Class<T> beanClass, final Supplier<T> beanProvider) {
- return _ManagedBeanAdapter_forTestingLazy.of(logicalTypeName,
beanClass, beanProvider);
- }
-
- public static <T> _ManagedBeanAdapter forTestingLazy(final Class<T>
beanClass, final Supplier<T> beanProvider) {
- return _ManagedBeanAdapter_forTestingLazy.of(beanClass.getName(),
beanClass, beanProvider);
- }
-
- public static <T> _ManagedBeanAdapter forTesting(final T bean) {
- return
_ManagedBeanAdapter_forTestingLazy.of(bean.getClass().getName(),
bean.getClass(), ()->bean);
- }
-
-}
\ No newline at end of file
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter_Spring.java
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter_Spring.java
deleted file mode 100644
index 9038a485d3..0000000000
---
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter_Spring.java
+++ /dev/null
@@ -1,49 +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.causeway.commons.internal.ioc;
-
-import org.springframework.beans.factory.ObjectProvider;
-
-import org.apache.causeway.commons.collections.Can;
-
-import lombok.Value;
-import lombok.val;
-
-@Value(staticConstructor="of")
-final class _ManagedBeanAdapter_Spring implements _ManagedBeanAdapter {
-
- private final String id;
- private final Class<?> beanClass;
- private final ObjectProvider<?> beanProvider;
-
- @Override
- public Can<?> getInstance() {
- val allMatchingBeans = beanProvider.stream()
- .collect(Can.toCan());
- return allMatchingBeans;
- }
-
- @Override
- public boolean isCandidateFor(Class<?> requiredType) {
- return beanProvider.stream()
- .map(Object::getClass)
- .anyMatch(requiredType::isAssignableFrom);
- }
-
-}
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter_forTestingLazy.java
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter_forTestingLazy.java
deleted file mode 100644
index 7a0587fcee..0000000000
---
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_ManagedBeanAdapter_forTestingLazy.java
+++ /dev/null
@@ -1,44 +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.causeway.commons.internal.ioc;
-
-import java.util.function.Supplier;
-
-import org.apache.causeway.commons.collections.Can;
-
-import lombok.Value;
-
-@Value(staticConstructor="of")
-final class _ManagedBeanAdapter_forTestingLazy implements _ManagedBeanAdapter {
-
- private final String id;
- private final Class<?> beanClass;
- private final Supplier<?> beanProvider;
-
- @Override
- public boolean isCandidateFor(Class<?> requiredType) {
- return requiredType.isAssignableFrom(beanClass);
- }
-
- @Override
- public Can<?> getInstance() {
- return Can.ofSingleton(beanProvider.get());
- }
-
-}
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java
new file mode 100644
index 0000000000..6dfe2ead0e
--- /dev/null
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java
@@ -0,0 +1,90 @@
+/*
+ * 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.causeway.commons.internal.ioc;
+
+import java.util.Optional;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+import org.springframework.lang.Nullable;
+
+import org.apache.causeway.commons.internal.exceptions._Exceptions;
+
+import lombok.EqualsAndHashCode;
+import lombok.NonNull;
+import lombok.ToString;
+import lombok.Value;
+
+/**
+ * @since 2.0
+ */
+@Value(staticConstructor = "of")
+public final class _SingletonBeanProvider {
+
+ // -- TEST FACTORIES
+
+ public static <T> _SingletonBeanProvider forTestingLazy(
+ final String logicalTypeName, final Class<T> beanClass, final
Supplier<T> beanProvider) {
+ return _SingletonBeanProvider.of(logicalTypeName, beanClass,
beanProvider);
+ }
+
+ public static <T> _SingletonBeanProvider forTestingLazy(
+ final Class<T> beanClass, final Supplier<T> beanProvider) {
+ return _SingletonBeanProvider.of(beanClass.getName(), beanClass,
beanProvider);
+ }
+
+ public static <T> _SingletonBeanProvider forTesting(final T bean) {
+ return _SingletonBeanProvider.of(bean.getClass().getName(),
bean.getClass(), ()->bean);
+ }
+
+ // -- CONSTRUCTION
+
+ /**
+ * Unique bean name (not an alias).
+ * Corresponds to the logical-type-name (Causeway semantics).
+ */
+ private final @NonNull String id;
+ private final @NonNull Class<?> beanClass;
+
+ @ToString.Exclude @EqualsAndHashCode.Exclude
+ private final @NonNull Supplier<?> beanProvider;
+
+ public Optional<?> lookupInstance() {
+ return Optional.ofNullable(beanProvider.get());
+ }
+
+ public Object getInstanceElseFail() {
+ return lookupInstance().orElseThrow(
+ ()->_Exceptions.noSuchElement("Cannot create bean instance for
name '%s' (with required type %s)",
+ id,
+ beanClass.getName()));
+ }
+
+ public boolean isCandidateFor(final @Nullable Class<?> requiredType) {
+ if(requiredType==null) return false;
+ return requiredType.isAssignableFrom(beanClass);
+ }
+
+ // -- UTILITY
+
+ public static Predicate<_SingletonBeanProvider> satisfying(final Class<?>
requiredType) {
+ return
singletonProvider->singletonProvider.isCandidateFor(requiredType);
+ }
+
+}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
index 2dcc829958..4e8709f0c4 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -60,8 +60,7 @@ import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.collections._Maps;
import org.apache.causeway.commons.internal.collections._Sets;
import org.apache.causeway.commons.internal.collections._Streams;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.core.config.CausewayConfiguration;
import
org.apache.causeway.core.config.beans.CausewayBeanFactoryPostProcessorForSpring;
import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier;
@@ -203,7 +202,7 @@ extends MetaModelContext {
private List<ValueSemanticsProvider<?>> valueSemantics;
@Singular
- private List<_ManagedBeanAdapter> singletonProviders;
+ private List<_SingletonBeanProvider> singletonProviders;
// -- SERVICE SUPPORT
@@ -256,19 +255,19 @@ extends MetaModelContext {
.filter(_NullSafe::isPresent);
}
- Stream<_ManagedBeanAdapter> streamBeanAdapters() {
+ Stream<_SingletonBeanProvider> streamBeanAdapters() {
return _Streams.concat(
- streamSingletons().map(_ManagedBeanAdapter::forTesting),
+ streamSingletons().map(_SingletonBeanProvider::forTesting),
singletonProviders.stream(),
discoveredServices.stream(),
Stream.of(
// support for lazy bean providers,
-
_ManagedBeanAdapter.forTestingLazy(GridLoaderService.class,
this::getGridLoaderService),
- _ManagedBeanAdapter.forTestingLazy(GridService.class,
this::getGridService),
- _ManagedBeanAdapter.forTestingLazy(JaxbService.class,
this::getJaxbService),
- _ManagedBeanAdapter.forTestingLazy(MenuBarsService.class,
this::getMenuBarsService),
- _ManagedBeanAdapter.forTestingLazy(LayoutService.class,
this::getLayoutService),
-
_ManagedBeanAdapter.forTestingLazy(SpecificationLoader.class,
this::getSpecificationLoader)
+
_SingletonBeanProvider.forTestingLazy(GridLoaderService.class,
this::getGridLoaderService),
+ _SingletonBeanProvider.forTestingLazy(GridService.class,
this::getGridService),
+ _SingletonBeanProvider.forTestingLazy(JaxbService.class,
this::getJaxbService),
+
_SingletonBeanProvider.forTestingLazy(MenuBarsService.class,
this::getMenuBarsService),
+ _SingletonBeanProvider.forTestingLazy(LayoutService.class,
this::getLayoutService),
+
_SingletonBeanProvider.forTestingLazy(SpecificationLoader.class,
this::getSpecificationLoader)
)
);
}
@@ -447,9 +446,9 @@ extends MetaModelContext {
private final MenuBarsService menuBarsService = createMenuBarsService();
private final MenuBarsService createMenuBarsService() {
return getSingletonProviders().stream()
-
.filter(provider->provider.isCandidateFor(MenuBarsService.class))
+
.filter(_SingletonBeanProvider.satisfying(MenuBarsService.class))
.findFirst()
-
.map(provider->(MenuBarsService)provider.getInstance().getFirstElseFail())
+ .map(provider->(MenuBarsService)provider.getInstanceElseFail())
.orElseGet(MenuBarsService::forTesting);
}
@@ -512,12 +511,12 @@ extends MetaModelContext {
}
@Builder.Default
- private final Set<_ManagedBeanAdapter> discoveredServices =
_Sets.newHashSet();
+ private final Set<_SingletonBeanProvider> discoveredServices =
_Sets.newHashSet();
@SuppressWarnings({ "unchecked", "rawtypes" })
private void registerAsService(final ServiceInstance serviceInstance) {
val spec = serviceInstance.getSpecification();
- discoveredServices.add(_ManagedBeanAdapter.forTestingLazy(
+ discoveredServices.add(_SingletonBeanProvider.forTestingLazy(
spec.getLogicalTypeName(),
(Class)spec.getCorrespondingClass(),
serviceInstance::getPojo));
@@ -547,11 +546,8 @@ extends MetaModelContext {
return map;
}
- private Optional<ServiceInstance> toServiceInstance(final
_ManagedBeanAdapter managedBeanAdapter) {
- val servicePojo = managedBeanAdapter.getInstance().getFirst()
- .orElseThrow(()->_Exceptions.unrecoverable(
- "Cannot get service instance of type '%s'",
- managedBeanAdapter.getBeanClass()));
+ private Optional<ServiceInstance> toServiceInstance(final
_SingletonBeanProvider managedBeanAdapter) {
+ val servicePojo = managedBeanAdapter.getInstanceElseFail();
if(ProgrammingModelConstants.TypeExcludeMarker.anyMatchOn(managedBeanAdapter.getBeanClass()))
{
return Optional.empty();
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
index b229b47389..be0180dfc0 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
@@ -37,7 +37,7 @@ import org.apache.causeway.commons.internal.collections._Sets;
import org.apache.causeway.commons.internal.context._Context;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.commons.internal.ioc._IocContainer;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import lombok.Getter;
@@ -52,7 +52,7 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
@NonNull private final MetaModelContext metaModelContext;
@Getter @Setter private _IocContainer iocContainer;
- private final Set<_ManagedBeanAdapter> registeredBeans =
_Sets.newHashSet();
+ private final Set<_SingletonBeanProvider> registeredBeans =
_Sets.newHashSet();
@Override
public <T> Can<T> select(final Class<T> type, final Annotation[]
qualifiers) {
@@ -67,8 +67,8 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
// }
Optional<T> match = streamBeans()
-
.filter(beanAdapter->type.isAssignableFrom(beanAdapter.getBeanClass()))
- .map(beanAdapter->beanAdapter.getInstance().getFirstElseFail())
+ .filter(_SingletonBeanProvider.satisfying(type))
+ .map(_SingletonBeanProvider::getInstanceElseFail)
.map(_Casts::<T>uncheckedCast)
.findFirst();
@@ -86,15 +86,15 @@ class ServiceRegistry_forTesting implements ServiceRegistry
{
return Can.empty();
}
- private final Map<String, _ManagedBeanAdapter> registeredBeanById =
_Maps.newHashMap();
+ private final Map<String, _SingletonBeanProvider> registeredBeanById =
_Maps.newHashMap();
@Override
- public Stream<_ManagedBeanAdapter> streamRegisteredBeans() {
+ public Stream<_SingletonBeanProvider> streamRegisteredBeans() {
return registeredBeans().stream();
}
@Override
- public Optional<_ManagedBeanAdapter> lookupRegisteredBeanById(final
LogicalType id) {
+ public Optional<_SingletonBeanProvider> lookupRegisteredBeanById(final
LogicalType id) {
return
Optional.ofNullable(registeredBeanById.get(id.getLogicalTypeName()));
}
@@ -112,7 +112,7 @@ class ServiceRegistry_forTesting implements ServiceRegistry
{
// -- HELPER
- private Set<_ManagedBeanAdapter> registeredBeans() {
+ private Set<_SingletonBeanProvider> registeredBeans() {
AtomicBoolean triggerPostInit = new AtomicBoolean(false);
@@ -136,7 +136,7 @@ class ServiceRegistry_forTesting implements ServiceRegistry
{
return registeredBeans;
}
- private Stream<_ManagedBeanAdapter> streamBeans() {
+ private Stream<_SingletonBeanProvider> streamBeans() {
// lookup the MetaModelContextBean's list of singletons
val mmc = metaModelContext;
if(mmc instanceof MetaModelContext_forTesting) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
index 71d45e0d49..b02949fab1 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
@@ -40,7 +40,7 @@ import
org.apache.causeway.applib.services.xactn.TransactionService;
import org.apache.causeway.commons.internal.base._Lazy;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.commons.internal.ioc._IocContainer;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
@@ -203,11 +203,8 @@ class MetaModelContext_usingSpring extends
MetaModelContext {
LinkedHashMap::new));
}
- private ManagedObject toManagedObject(final _ManagedBeanAdapter
managedBeanAdapter) {
- val servicePojo = managedBeanAdapter.getInstance().getFirst()
- .orElseThrow(()->_Exceptions.unrecoverable(
- "Cannot get service instance of type '%s'",
- managedBeanAdapter.getBeanClass()));
+ private ManagedObject toManagedObject(final _SingletonBeanProvider
managedBeanAdapter) {
+ val servicePojo = managedBeanAdapter.getInstanceElseFail();
return getSpecificationLoader()
.specForType(servicePojo.getClass())
.map(serviceSpec->ManagedObject.service(serviceSpec,
servicePojo))
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectLoader.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectLoader.java
index 41d0ecd97a..ed6b67541f 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectLoader.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectLoader.java
@@ -22,10 +22,9 @@ import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.handler.ChainOfResponsibility;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import
org.apache.causeway.core.metamodel.facets.object.value.ValueSerializer.Format;
import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -75,8 +74,7 @@ public interface ObjectLoader {
val logicalType = spec.getLogicalType();
val servicePojo = spec.getServiceRegistry()
.lookupRegisteredBeanById(logicalType)
- .map(_ManagedBeanAdapter::getInstance)
- .flatMap(Can::getFirst)
+ .flatMap(_SingletonBeanProvider::lookupInstance)
.orElseThrow(()->_Exceptions.noSuchElement(
"loader: %s loading logicalType %s",
this.getClass().getName(), logicalType));
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
index e57726e387..e7a1fff85b 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
@@ -37,7 +37,7 @@ import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._Lazy;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistry;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.metamodel.CausewayModuleCoreMetamodel;
@@ -55,7 +55,7 @@ public final class ServiceRegistryDefault implements
ServiceRegistry {
@Inject private CausewayBeanTypeRegistry causewayBeanTypeRegistry;
@Override
- public Optional<_ManagedBeanAdapter> lookupRegisteredBeanById(final
LogicalType id) {
+ public Optional<_SingletonBeanProvider> lookupRegisteredBeanById(final
LogicalType id) {
return
Optional.ofNullable(contributingDomainServicesById.get().get(id.getLogicalTypeName()));
}
@@ -65,7 +65,7 @@ public final class ServiceRegistryDefault implements
ServiceRegistry {
}
@Override
- public Stream<_ManagedBeanAdapter> streamRegisteredBeans() {
+ public Stream<_SingletonBeanProvider> streamRegisteredBeans() {
return contributingDomainServicesById.get().values().stream();
}
@@ -83,11 +83,11 @@ public final class ServiceRegistryDefault implements
ServiceRegistry {
// -- HELPER
- private final _Lazy<Map<String, _ManagedBeanAdapter>>
contributingDomainServicesById =
+ private final _Lazy<Map<String, _SingletonBeanProvider>>
contributingDomainServicesById =
_Lazy.threadSafe(this::enumerateContributingDomainServices);
- private Map<String, _ManagedBeanAdapter>
enumerateContributingDomainServices() {
- val managedBeanAdapterByName = _Maps.<String,
_ManagedBeanAdapter>newHashMap();
+ private Map<String, _SingletonBeanProvider>
enumerateContributingDomainServices() {
+ val managedBeanAdapterByName = _Maps.<String,
_SingletonBeanProvider>newHashMap();
val managedBeansContributing =
causewayBeanTypeRegistry.getManagedBeansContributing().keySet();
causewaySystemEnvironment.getIocContainer()
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
index 995cef4bf8..04e66f4e70 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
@@ -61,8 +61,7 @@ extends MetaModelValidatorAbstract {
serviceRegistry.streamRegisteredBeans()
.forEach(managedBeanAdapter->{
- val serviceInstanceIfAny =
managedBeanAdapter.getInstance().getFirst();
- val domainService = serviceInstanceIfAny.orElse(null);
+ val domainService =
managedBeanAdapter.lookupInstance().orElse(null);
val logicalTypeName = managedBeanAdapter.getId();
if(domainService == null) {
diff --git
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
index d97a839dfa..8cbfe40393 100644
---
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
+++
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
@@ -32,7 +32,7 @@ import
org.apache.causeway.applib.services.menu.MenuBarsMarshallerService;
import org.apache.causeway.applib.services.menu.MenuBarsService;
import org.apache.causeway.applib.services.message.MessageService;
import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting;
import
org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting.MetaModelContext_forTestingBuilder;
import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
@@ -71,7 +71,7 @@ implements HasMetaModelContext {
onSetUp(mmcBuilder);
mmcBuilder.singletonProvider(
- _ManagedBeanAdapter
+ _SingletonBeanProvider
.forTestingLazy(MenuBarsMarshallerService.class, ()->{
val jaxbService =
getServiceRegistry().lookupServiceElseFail(JaxbService.class);
return new MenuBarsMarshallerServiceBootstrap(
@@ -80,7 +80,7 @@ implements HasMetaModelContext {
mmcBuilder.singletonProvider(
- _ManagedBeanAdapter
+ _SingletonBeanProvider
.forTestingLazy(MenuBarsLoaderService.class, ()->{
return new MenuBarsLoaderServiceDefault(
menubarsLayoutXmlResourceRef,
@@ -88,7 +88,7 @@ implements HasMetaModelContext {
}));
mmcBuilder.singletonProvider(
- _ManagedBeanAdapter
+ _SingletonBeanProvider
.forTestingLazy(MenuBarsService.class, ()->{
val messageService =
getServiceRegistry().lookupServiceElseFail(MessageService.class);
diff --git
a/regressiontests/stable-bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
b/regressiontests/stable-bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
index 064521ba5c..efc3ccd2ae 100644
---
a/regressiontests/stable-bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
+++
b/regressiontests/stable-bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
@@ -36,7 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import org.apache.causeway.applib.services.registry.ServiceRegistry;
import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.causeway.commons.internal.ioc._SingletonBeanProvider;
import org.apache.causeway.commons.internal.resources._Resources;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.config.presets.CausewayPresets;
@@ -78,7 +78,7 @@ class SpringServiceProvisioningTest {
void dump_all() throws IOException {
final List<String> beans =
causewaySystemEnvironment.getIocContainer().streamAllBeans()
- .map(_ManagedBeanAdapter::getId)
+ .map(_SingletonBeanProvider::getId)
.sorted()
.collect(Collectors.toList());
@@ -92,7 +92,7 @@ class SpringServiceProvisioningTest {
void builtInServices_shouldBeSetUp() throws IOException {
val managedServices = serviceRegistry.streamRegisteredBeans()
- .map(_ManagedBeanAdapter::getBeanClass)
+ .map(_SingletonBeanProvider::getBeanClass)
.map(Class::getName)
.collect(Collectors.toCollection(TreeSet::new));