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/isis.git
The following commit(s) were added to refs/heads/master by this push: new 2fcfc93 ISIS-1976: minor polishing 2fcfc93 is described below commit 2fcfc93647a9a32401951b0f01676e9ed11a14dc Author: Andi Huber <ahu...@apache.org> AuthorDate: Wed Sep 5 13:40:24 2018 +0200 ISIS-1976: minor polishing Task-Url: https://issues.apache.org/jira/browse/ISIS-1976 --- .../apache/isis/commons/internal/base/_Lazy.java | 64 ++++++++++------------ .../base/{_Lazy.java => _Lazy_Simple.java} | 38 ++----------- ...{_LazyThreadSafe.java => _Lazy_ThreadSafe.java} | 39 ++----------- .../persistence/PersistenceSessionFactory4.java | 6 +- .../system/persistence/PersistenceSession5.java | 2 +- .../persistence/PersistenceSessionFactory5.java | 6 +- .../adaptermanager/ObjectAdapterContext.java | 16 ++++-- .../objectstore/jdo/service/RegisterEntities.java | 4 +- 8 files changed, 60 insertions(+), 115 deletions(-) diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java index 18eb150..d105093 100644 --- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java +++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java @@ -19,8 +19,6 @@ package org.apache.isis.commons.internal.base; -import static org.apache.isis.commons.internal.base._With.requires; - import java.util.function.Supplier; /** @@ -35,54 +33,50 @@ import java.util.function.Supplier; * * @since 2.0.0 */ -public final class _Lazy<T> implements Supplier<T> { - - private final Supplier<? extends T> supplier; - private T value; - private boolean memoized; - - /** - * Concurrent calls to this lazy's get() method might result in concurrent calls to the - * specified {@code supplier}. - * @param supplier - * @return an (non-thread-safe) instance of _Lacy that initializes with the specified {@code supplier} - */ - public static <T> _Lazy<T> of(Supplier<? extends T> supplier) { - return new _Lazy<T>(supplier); - } - - private _Lazy(Supplier<? extends T> supplier) { - this.supplier = requires(supplier, "supplier"); - } - +public interface _Lazy<T> extends Supplier<T> { + + // -- INTERFACE + /** * @return whether this lazy got initialized and holds a memoized value */ - public boolean isMemoized() { - return memoized; - } + public boolean isMemoized(); /** * Clears the lazy's memoized value. Resets this lazy to its initial state.<br> * isMemoized() = false; * */ - public void clear() { - this.memoized = false; - this.value = null; - } + public void clear(); /** * Evaluates this lazy value and memoizes it, when called the first time * after initialization or clear(). */ @Override - public T get() { - if(memoized) { - return value; - } - memoized=true; - return value = supplier.get(); + public T get(); + + // -- FACTORIES + + /** + * Concurrent calls to this lazy's get() method might result in concurrent calls to the + * specified {@code supplier}. + * @param supplier + * @return an (non-thread-safe) instance of _Lacy that initializes with the specified {@code supplier} + */ + public static <T> _Lazy<T> of(Supplier<? extends T> supplier) { + return new _Lazy_Simple<T>(supplier); + } + + /** + * Thread-safe variant to {@link _Lazy#of(Supplier)}. + * Concurrent calls to this lazy's get() method will never result in concurrent calls to the + * specified {@code supplier}. + * @param supplier + * @return an (thread-safe) instance of _Lacy that initializes with the specified {@code supplier} + */ + public static <T> _Lazy<T> threadSafe(Supplier<? extends T> supplier) { + return new _Lazy_ThreadSafe<T>(supplier); } } diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_Simple.java similarity index 57% copy from core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java copy to core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_Simple.java index 18eb150..c8aa2c6 100644 --- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java +++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_Simple.java @@ -24,58 +24,30 @@ import static org.apache.isis.commons.internal.base._With.requires; import java.util.function.Supplier; /** - * <h1>- internal use only -</h1> - * <p> - * (non-thread-safe) Supplier with memoization. - * </p> - * <p> - * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/> - * These may be changed or removed without notice! - * </p> - * + * package private mixin for _Lazy * @since 2.0.0 */ -public final class _Lazy<T> implements Supplier<T> { +final class _Lazy_Simple<T> implements _Lazy<T> { private final Supplier<? extends T> supplier; private T value; private boolean memoized; - /** - * Concurrent calls to this lazy's get() method might result in concurrent calls to the - * specified {@code supplier}. - * @param supplier - * @return an (non-thread-safe) instance of _Lacy that initializes with the specified {@code supplier} - */ - public static <T> _Lazy<T> of(Supplier<? extends T> supplier) { - return new _Lazy<T>(supplier); - } - - private _Lazy(Supplier<? extends T> supplier) { + _Lazy_Simple(Supplier<? extends T> supplier) { this.supplier = requires(supplier, "supplier"); } - /** - * @return whether this lazy got initialized and holds a memoized value - */ + @Override public boolean isMemoized() { return memoized; } - /** - * Clears the lazy's memoized value. Resets this lazy to its initial state.<br> - * isMemoized() = false; - * - */ + @Override public void clear() { this.memoized = false; this.value = null; } - /** - * Evaluates this lazy value and memoizes it, when called the first time - * after initialization or clear(). - */ @Override public T get() { if(memoized) { diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_LazyThreadSafe.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_ThreadSafe.java similarity index 57% rename from core/commons/src/main/java/org/apache/isis/commons/internal/base/_LazyThreadSafe.java rename to core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_ThreadSafe.java index 436cd36..a426a2b 100644 --- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_LazyThreadSafe.java +++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_ThreadSafe.java @@ -24,52 +24,27 @@ import static org.apache.isis.commons.internal.base._With.requires; import java.util.function.Supplier; /** - * <h1>- internal use only -</h1> - * <p> - * Thread-safe Supplier with memoization. - * </p> - * <p> - * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/> - * These may be changed or removed without notice! - * </p> - * + * package private mixin for _Lazy * @since 2.0.0 */ -public final class _LazyThreadSafe<T> implements Supplier<T> { +final class _Lazy_ThreadSafe<T> implements _Lazy<T> { private final Supplier<? extends T> supplier; private T value; private boolean memoized; - /** - * Thread-safe variant to {@link _Lazy#of(Supplier)}. - * Concurrent calls to this lazy's get() method will never result in concurrent calls to the - * specified {@code supplier}. - * @param supplier - * @return an (thread-safe) instance of _Lacy that initializes with the specified {@code supplier} - */ - public static <T> _LazyThreadSafe<T> of(Supplier<? extends T> supplier) { - return new _LazyThreadSafe<T>(supplier); - } - - private _LazyThreadSafe(Supplier<? extends T> supplier) { + _Lazy_ThreadSafe(Supplier<? extends T> supplier) { this.supplier = requires(supplier, "supplier"); } - /** - * @return whether this lazy got initialized and holds a memoized value - */ + @Override public boolean isMemoized() { synchronized (this) { return memoized; } } - /** - * Clears the lazy's memoized value. Resets this lazy to its initial state.<br> - * isMemoized() = false; - * - */ + @Override public void clear() { synchronized (this) { this.memoized = false; @@ -77,10 +52,6 @@ public final class _LazyThreadSafe<T> implements Supplier<T> { } } - /** - * Evaluates this lazy value and memoizes it, when called the first time - * after initialization or clear(). - */ @Override public T get() { synchronized (this) { diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java index 9410b49..004fc50 100644 --- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java +++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java @@ -31,7 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.isis.applib.annotation.Programmatic; -import org.apache.isis.commons.internal.base._LazyThreadSafe; +import org.apache.isis.commons.internal.base._Lazy; import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.commons.components.ApplicationScopedComponent; import org.apache.isis.core.commons.config.IsisConfiguration; @@ -59,8 +59,8 @@ PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstalledFlag { public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; // reserved for datanucleus' own config props - private final _LazyThreadSafe<DataNucleusApplicationComponents4> applicationComponents = - _LazyThreadSafe.of(this::createDataNucleusApplicationComponents); + private final _Lazy<DataNucleusApplicationComponents4> applicationComponents = + _Lazy.threadSafe(this::createDataNucleusApplicationComponents); private IsisConfiguration configuration; diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java index be0c296..90886dc 100644 --- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java +++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java @@ -1134,7 +1134,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement { final RootOid originalOid; ObjectAdapter adapter = objectAdapterContext.lookupAdapterFor(pojo); if (adapter != null) { - ensureRootObject(pojo); + ensureRootObject(pojo); //[ahuber] while already mapped has no side-effect originalOid = (RootOid) adapter.getOid(); final Version originalVersion = adapter.getVersion(); diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java index ef489a7..423ba06 100644 --- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java +++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java @@ -31,7 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.isis.applib.annotation.Programmatic; -import org.apache.isis.commons.internal.base._LazyThreadSafe; +import org.apache.isis.commons.internal.base._Lazy; import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.commons.components.ApplicationScopedComponent; import org.apache.isis.core.commons.config.IsisConfiguration; @@ -59,8 +59,8 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; // reserved for datanucleus' own config props - private final _LazyThreadSafe<DataNucleusApplicationComponents5> applicationComponents = - _LazyThreadSafe.of(this::createDataNucleusApplicationComponents); + private final _Lazy<DataNucleusApplicationComponents5> applicationComponents = + _Lazy.threadSafe(this::createDataNucleusApplicationComponents); private IsisConfiguration configuration; diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java index e01b0df..a01bb45 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java @@ -128,12 +128,12 @@ public class ObjectAdapterContext { } @Deprecated // don't expose caching - public ObjectAdapter lookupAdapterByPojo(Object pojo) { + protected ObjectAdapter lookupAdapterByPojo(Object pojo) { return pojoAdapterMap.getAdapter(pojo); } @Deprecated // don't expose caching - public ObjectAdapter lookupAdapterById(Oid oid) { + protected ObjectAdapter lookupAdapterById(Oid oid) { return oidAdapterMap.getAdapter(oid); } @@ -164,10 +164,12 @@ public class ObjectAdapterContext { // -- CACHE CONSISTENCY + @Deprecated // don't expose caching public void ensureMapsConsistent(final ObjectAdapter adapter) { consistencyMixin.ensureMapsConsistent(adapter); } + @Deprecated // don't expose caching public void ensureMapsConsistent(final Oid oid) { consistencyMixin.ensureMapsConsistent(oid); } @@ -224,32 +226,38 @@ public class ObjectAdapterContext { // -- ADAPTER MANAGER LEGACY + @Deprecated // don't expose caching public ObjectAdapter addRecreatedPojoToCache(Oid oid, Object recreatedPojo) { return adapterManagerMixin.addRecreatedPojoToCache(oid, recreatedPojo); } + @Deprecated // don't expose caching public ObjectAdapter mapAndInjectServices(final ObjectAdapter adapter) { return adapterManagerMixin.mapAndInjectServices(adapter); } + @Deprecated // don't expose caching public ObjectAdapter lookupAdapterFor(Object pojo) { return adapterManagerMixin.lookupAdapterFor(pojo); } + @Deprecated // don't expose caching public ObjectAdapter lookupAdapterFor(final Oid oid) { return adapterManagerMixin.lookupAdapterFor(oid); } + @Deprecated // don't expose caching public void removeAdapterFromCache(final ObjectAdapter adapter) { adapterManagerMixin.removeAdapterFromCache(adapter); } - // -- OBJECT ADAPTER PROVIDER SUPPORT - + @Deprecated // don't expose caching public ObjectAdapter addPersistentToCache(final Object pojo) { return objectAdapterProviderMixin.addPersistentToCache(pojo); } + // -- OBJECT ADAPTER PROVIDER SUPPORT + public ObjectAdapterProvider getObjectAdapterProvider() { return objectAdapterProviderMixin; } diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java index 97c191f..b9b8fd1 100644 --- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java +++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java @@ -31,7 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.isis.applib.AppManifest; -import org.apache.isis.commons.internal.base._LazyThreadSafe; +import org.apache.isis.commons.internal.base._Lazy; import org.apache.isis.core.metamodel.JdoMetamodelUtil; public class RegisterEntities { @@ -45,7 +45,7 @@ public class RegisterEntities { @Deprecated public final static String PACKAGE_PREFIX_KEY = "isis.persistor.datanucleus.RegisterEntities.packagePrefix"; - private final _LazyThreadSafe<Set<String>> entityTypes = _LazyThreadSafe.of(this::findEntityTypes); + private final _Lazy<Set<String>> entityTypes = _Lazy.threadSafe(this::findEntityTypes); public Set<String> getEntityTypes() { return entityTypes.get();