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/02/19 16:03:17 UTC
[isis] 01/01: ISIS-1779 rebase jax-rs-2 on top of 2.0.0-M2
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch ISIS-1779-jax-rs-2
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 1c9e21f898fb4bac431da4c6c6ef4f2574e75d9d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Feb 19 16:51:41 2018 +0100
ISIS-1779 rebase jax-rs-2 on top of 2.0.0-M2
---
.../isis/applib/internal/context/_Context.java | 29 +++++++++-
.../isis/applib/internal/reflection/_Reflect.java | 5 +-
.../internal/reflection/_Reflect_Discovery.java | 25 +--------
.../apache/isis/applib/query/QueryAbstract.java | 4 +-
.../applib/services/hsqldb/HsqlDbManagerMenu.java | 3 +-
.../apache/isis/schema/utils/CommonDtoUtils.java | 51 +++++++----------
.../isis/core/commons/encoding/FieldType.java | 3 +-
.../isis/core/commons/factory/InstanceUtil.java | 9 +--
.../apache/isis/core/commons/lang/ClassUtil.java | 6 +-
.../isis/core/commons/lang/ResourceUtil.java | 13 ++++-
...ResourceStreamSourceContextLoaderClassPath.java | 3 +-
core/pom.xml | 6 +-
.../core/runtime/services/ServiceInstantiator.java | 4 +-
.../core/runtime/system/context/IsisContext.java | 15 ++---
.../persistence/PersistenceSessionFactory.java | 10 +---
.../IsisComponentProvider.java | 33 +++++------
.../PersistenceCapableTypeFinder.java | 65 ++++++++++++++++++++++
.../datanucleus/DataNucleusLifeCycleHelper.java | 52 -----------------
.../persistence/spi/JdoObjectIdSerializer.java | 7 ++-
.../scenarios/ScenarioExecutionScope.java | 3 +-
.../wicket/viewer/IsisWicketApplication.java | 5 +-
.../wicket/AuthenticatedWebSessionForIsis.java | 62 ++++++++++++++-------
.../WicketObjectModule_bindingsStandard.java | 63 +++++++++++++--------
...thenticatedWebSessionForIsis_Instantiation.java | 2 +-
...ageClassListDefault_RegistrationAndCaching.java | 2 +-
.../ui/components/about/JarManifestModel.java | 3 +-
26 files changed, 269 insertions(+), 214 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java b/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
index adb6d01..589805a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
@@ -24,6 +24,8 @@ import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;
+import javax.validation.constraints.NotNull;
+
import org.apache.isis.applib.internal.base._Casts;
/**
@@ -137,10 +139,35 @@ public final class _Context {
* Will be set by the framework's bootstrapping mechanism if required.
* @return the default class loader
*/
- public static ClassLoader getDefaultClassLoader() {
+ public static @NotNull ClassLoader getDefaultClassLoader() {
return getOrElse(ClassLoader.class, FALLBACK_CLASSLOADER);
}
+
+ // -- CLASS LOADING SHORTCUTS
+
+ /**
+ * Uses the frameworks default-ClassLoader to load a class by name.
+ * @param className
+ * @return class by name
+ * @throws ClassNotFoundException
+ */
+ public static Class<?> loadClass(String className) throws ClassNotFoundException{
+ return getDefaultClassLoader().loadClass(className);
+ }
+ /**
+ * Uses the frameworks default-ClassLoader to load and initialize a class by name.<br/>
+ * <b>Initialize</b> the class, that is, all static initializers will be run. <br/>
+ * (For details on initialize see Section 12.4 of The Java Language Specification)
+ * @param className
+ * @return
+ * @throws ClassNotFoundException
+ */
+ public static Class<?> loadClassAndInitialize(String className) throws ClassNotFoundException{
+ return Class.forName(className, true, getDefaultClassLoader());
+ }
+
+
// -- HELPER
private static String toKey(Class<?> type) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java b/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
index e0b213d..20d63e5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
@@ -23,11 +23,10 @@ import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Set;
+import org.apache.isis.applib.internal.context._Context;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.util.ClasspathHelper;
-import org.apache.isis.applib.internal.context._Context;
-
/**
* <h1>- internal use only -</h1>
* <p>
@@ -56,8 +55,6 @@ public final class _Reflect {
//TODO missing java-doc
public <T> Set<Class<? extends T>> getSubTypesOf(Class<T> type);
- public Set<Class<?>> findPersistenceCapableTypes();
-
}
//TODO missing java-doc
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect_Discovery.java b/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect_Discovery.java
index 5db08e5..fe7db50 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect_Discovery.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect_Discovery.java
@@ -8,15 +8,11 @@ import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.jdo.annotations.PersistenceCapable;
import javax.validation.constraints.NotNull;
-import com.google.common.collect.Sets;
-
-import org.reflections.Reflections;
-
import org.apache.isis.applib.internal.base._NullSafe;
import org.apache.isis.applib.internal.reflection._Reflect.Discovery;
+import org.reflections.Reflections;
/**
*
@@ -84,24 +80,5 @@ class _Reflect_Discovery implements _Reflect.Discovery {
.filter(_NullSafe::isPresent);
}
- public Set<Class<?>> findPersistenceCapableTypes() {
-
- Set<Class<?>> pcSet = Sets.newLinkedHashSet();
-
- Set<Class<?>> persistenceCapables = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
- persistenceCapables.stream()
- .filter(x -> !x.isAnnotation())
- .forEach(pcSet::add);
-
- Stream<Class<? extends Annotation>> pcMetaAnnotStream =
- (Stream)persistenceCapables.stream().filter(x -> x.isAnnotation());
- pcMetaAnnotStream.map(metaAnnot -> reflections.getTypesAnnotatedWith(metaAnnot).stream())
- .flatMap(x -> x)
- .filter(x -> !x.isAnnotation())
- .forEach(pcSet::add);
-
- return pcSet;
- }
-
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/query/QueryAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/query/QueryAbstract.java
index 7c2497e..d16f908 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/query/QueryAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/query/QueryAbstract.java
@@ -19,6 +19,8 @@
package org.apache.isis.applib.query;
+import org.apache.isis.applib.internal.context._Context;
+
/**
* Convenience adapter class for {@link Query}.
*
@@ -67,7 +69,7 @@ public abstract class QueryAbstract<T> implements Query<T> {
public Class<T> getResultType() {
if (resultType == null) {
try {
- resultType = (Class<T>) Thread.currentThread().getContextClassLoader().loadClass(resultTypeName);
+ resultType = (Class<T>) _Context.loadClass(resultTypeName);
} catch (final ClassNotFoundException e) {
throw new IllegalStateException(e);
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
index 48843ae..bc0586f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.annotation.DomainServiceLayout;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.internal.context._Context;
@DomainService(
nature = NatureOfService.VIEW_MENU_ONLY,
@@ -73,7 +74,7 @@ public class HsqlDbManagerMenu {
public boolean hideHsqlDbManager() {
try {
// hsqldb is configured as optional in the applib's pom.xml
- Thread.currentThread().getContextClassLoader().loadClass(DatabaseManagerSwing.class.getCanonicalName());
+ _Context.loadClass(DatabaseManagerSwing.class.getCanonicalName());
} catch (ClassNotFoundException e) {
return true;
}
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
index d3f0159..1ba83ab 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
@@ -22,19 +22,8 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableMap;
-
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.joda.time.LocalTime;
import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.bookmark.BookmarkService;
@@ -55,6 +44,18 @@ import org.apache.isis.schema.utils.jaxbadapters.JodaDateTimeXMLGregorianCalenda
import org.apache.isis.schema.utils.jaxbadapters.JodaLocalDateTimeXMLGregorianCalendarAdapter;
import org.apache.isis.schema.utils.jaxbadapters.JodaLocalDateXMLGregorianCalendarAdapter;
import org.apache.isis.schema.utils.jaxbadapters.JodaLocalTimeXMLGregorianCalendarAdapter;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
+import org.joda.time.LocalTime;
+
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableMap;
public final class CommonDtoUtils {
@@ -374,28 +375,18 @@ public final class CommonDtoUtils {
private static <T> Class<T> loadClassElseThrow(final String className) {
try {
- return _Casts.uncheckedCast(loadClass(className));
+ return _Casts.uncheckedCast(_Context.loadClassAndInitialize(className));
} catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
+
+ // [ahuber] fallback to pre 2.0.0 behavior, not sure if needed
+ try {
+ return _Casts.uncheckedCast(Class.forName(className));
+ } catch (ClassNotFoundException e1) {
+ throw new RuntimeException(e);
+ }
}
}
- private static Class<?> loadClass(String className) throws ClassNotFoundException {
- ClassLoader ccl = Thread.currentThread().getContextClassLoader();
- if(ccl == null) {
- return loadClass(className, (ClassLoader)null);
- } else {
- try {
- return loadClass(className, ccl);
- } catch (ClassNotFoundException var3) {
- return loadClass(className, (ClassLoader)null);
- }
- }
- }
-
- private static Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
- return classLoader == null?Class.forName(className):Class.forName(className, true, classLoader);
- }
//endregion
//region > newValueWithTypeDto
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/encoding/FieldType.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/encoding/FieldType.java
index d834b18..9309746 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/encoding/FieldType.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/encoding/FieldType.java
@@ -31,6 +31,7 @@ import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
+import org.apache.isis.applib.internal.context._Context;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -969,7 +970,7 @@ public abstract class FieldType<T> {
Class<?> cls;
try {
// ...obtain constructor
- cls = Thread.currentThread().getContextClassLoader().loadClass(className);
+ cls = _Context.loadClass(className);
final Constructor<?> constructor = cls.getConstructor(new Class[] { DataInputExtended.class });
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
index e4f04ae..e581d56 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.commons.factory;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.lang.ObjectExtensions;
@@ -54,7 +55,7 @@ public final class InstanceUtil {
Class<? extends T> defaultType = null;
if (defaultTypeName != null) {
try {
- defaultType = ObjectExtensions.asT(Thread.currentThread().getContextClassLoader().loadClass(defaultTypeName));
+ defaultType = ObjectExtensions.asT(_Context.loadClass(defaultTypeName));
if (defaultType == null) {
throw new InstanceCreationClassException(String.format("Failed to load default type '%s'", defaultTypeName));
}
@@ -76,7 +77,7 @@ public final class InstanceUtil {
if (defaultTypeName != null) {
defaultType = loadClass(defaultTypeName, requiredType);
try {
- defaultType = ObjectExtensions.asT(Thread.currentThread().getContextClassLoader().loadClass(defaultTypeName));
+ defaultType = ObjectExtensions.asT(_Context.loadClass(defaultTypeName));
if (defaultType == null) {
throw new InstanceCreationClassException(String.format("Failed to load default type '%s'", defaultTypeName));
}
@@ -96,7 +97,7 @@ public final class InstanceUtil {
Object... args) {
Assert.assertNotNull("Class to instantiate must be specified", className);
try {
- final Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(className);
+ final Class<?> cls = _Context.loadClass(className);
if (cls == null) {
throw new InstanceCreationClassException(String.format("Failed to load class '%s'", className));
}
@@ -149,7 +150,7 @@ public final class InstanceUtil {
public static Class<?> loadClass(final String className) {
Assert.assertNotNull("Class to instantiate must be specified", className);
try {
- return Thread.currentThread().getContextClassLoader().loadClass(className);
+ return _Context.loadClass(className);
} catch (final ClassNotFoundException e) {
throw new UnavailableClassException(String.format("The type '%s' cannot be found", className));
} catch (final NoClassDefFoundError e) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java
index 9bd70b5..1c1f75f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java
@@ -24,6 +24,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.isis.applib.internal.context._Context;
+
import com.google.common.collect.Maps;
public final class ClassUtil {
@@ -149,7 +151,7 @@ public final class ClassUtil {
return primitiveCls;
}
try {
- return Thread.currentThread().getContextClassLoader().loadClass(fullName);
+ return _Context.loadClass(fullName);
} catch (final ClassNotFoundException e) {
throw new RuntimeException(e);
}
@@ -160,7 +162,7 @@ public final class ClassUtil {
return null;
}
try {
- return Thread.currentThread().getContextClassLoader().loadClass(fullName);
+ return _Context.loadClass(fullName);
} catch (final ClassNotFoundException e) {
return null;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ResourceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ResourceUtil.java
index 7e5fc77..276adcf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ResourceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ResourceUtil.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.commons.lang;
import java.io.InputStream;
+import org.apache.isis.applib.internal.context._Context;
+
/**
* Adapted from Ibatis Common, now with some additional guava stuff.
*/
@@ -29,10 +31,17 @@ public class ResourceUtil {
private ResourceUtil(){}
public static InputStream getResourceAsStream(final String resource) {
+
+ // try Isis's classloader
+ ClassLoader classLoader = _Context.getDefaultClassLoader();
+ InputStream is = classLoader.getResourceAsStream(resource);
+ if (is != null) {
+ return is;
+ }
// try thread's classloader
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- InputStream is = classLoader.getResourceAsStream(resource);
+ classLoader = Thread.currentThread().getContextClassLoader();
+ is = classLoader.getResourceAsStream(resource);
if (is != null) {
return is;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java
index b92a82a..2cad737 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.commons.resource;
import java.io.InputStream;
+import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.core.commons.lang.StringExtensions;
/**
@@ -49,7 +50,7 @@ public class ResourceStreamSourceContextLoaderClassPath extends ResourceStreamSo
@Override
protected InputStream doReadResource(final String resourcePath) {
- final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ final ClassLoader classLoader = _Context.getDefaultClassLoader();
final String path = StringExtensions.combinePath(prefix, resourcePath);
return classLoader.getResourceAsStream(path);
}
diff --git a/core/pom.xml b/core/pom.xml
index ab17458..56215ae 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -90,10 +90,10 @@
<!-- Datanucleus Objectstore -->
<jdo-api.version>3.2.0-m7</jdo-api.version>
- <datanucleus-core.version>5.1.5</datanucleus-core.version>
+ <datanucleus-core.version>5.1.6</datanucleus-core.version>
<datanucleus-api-jdo.version>5.1.4</datanucleus-api-jdo.version>
- <datanucleus-jdo-query.version>5.0.2</datanucleus-jdo-query.version>
- <datanucleus-rdbms.version>5.1.5</datanucleus-rdbms.version>
+ <datanucleus-jdo-query.version>5.0.4</datanucleus-jdo-query.version>
+ <datanucleus-rdbms.version>5.1.6</datanucleus-rdbms.version>
<datanucleus-jodatime.version>5.1.0-release</datanucleus-jodatime.version>
<!--
ISIS-1288: seen integration tests to fail;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
index f48bdcf..e002a81 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
@@ -33,7 +33,7 @@ import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.factory.InstanceCreationClassException;
@@ -111,7 +111,7 @@ public final class ServiceInstantiator {
private Class<?> loadClass(final String className) {
try {
LOG.debug("loading class for service: {}", className);
- return IsisContext.getClassLoader().loadClass(className);
+ return _Context.loadClassAndInitialize(className);
} catch (final ClassNotFoundException ex) {
throw new InitialisationException(String.format("Cannot find class '%s' for service", className));
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index 546dcc4..a213323 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -59,10 +59,6 @@ public interface IsisContext {
public static ClassLoader getClassLoader() {
return _Context.getDefaultClassLoader();
}
- public static void setClassLoader(ClassLoader classLoader) {
- _Context.putSingleton(ClassLoader.class, classLoader);
- }
-
// -- LIFE-CYCLING
@@ -72,6 +68,7 @@ public interface IsisContext {
*/
public static void clear() {
_Context.clear();
+ resetLogging();
}
// -- DEPRECATIONS
@@ -90,11 +87,15 @@ public interface IsisContext {
/**
* TODO [andi-huber] not sure if required, initial idea was to force log4j
- * re-configuration on an undeploy/deploy cycle
+ * to re-configure on an undeploy/deploy cycle
*/
static void resetLogging() {
- org.apache.log4j.Logger.getRootLogger().removeAllAppenders();
- BasicConfigurator.resetConfiguration();
+ try {
+ BasicConfigurator.resetConfiguration();
+ org.apache.log4j.Logger.getRootLogger().removeAllAppenders();
+ } catch (Exception e) {
+ // at least we tried
+ }
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
index e9565f8..b3026da 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
@@ -168,15 +168,7 @@ public class PersistenceSessionFactory implements ApplicationScopedComponent, Fi
*/
@Programmatic
public final void shutdown() {
- if(!isInitialized()) {
- return;
- }
-
- //XXX ISIS-1756 purge any DataNucleus State
- if(applicationComponents != null) {
- // applicationComponents.shutdown();
- applicationComponents = null;
- }
+ applicationComponents = null;
}
/**
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 7d9322b..9b2936a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -23,17 +23,9 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.stream.Collectors;
import javax.annotation.Nullable;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainService;
@@ -64,6 +56,13 @@ import org.apache.isis.objectstore.jdo.service.RegisterEntities;
import org.apache.isis.progmodels.dflt.JavaReflectorHelper;
import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
/**
*
*/
@@ -137,23 +136,19 @@ public abstract class IsisComponentProvider {
final Discovery discovery = _Reflect.discover(moduleAndFrameworkPackages);
final Set<Class<?>> domainServiceTypes = discovery.getTypesAnnotatedWith(DomainService.class);
- final Set<Class<?>> persistenceCapableTypes = discovery.findPersistenceCapableTypes();
+ final Set<Class<?>> persistenceCapableTypes = PersistenceCapableTypeFinder.find(discovery);
final Set<Class<? extends FixtureScript>> fixtureScriptTypes = discovery.getSubTypesOf(FixtureScript.class);
final Set<Class<?>> mixinTypes = Sets.newHashSet();
mixinTypes.addAll(discovery.getTypesAnnotatedWith(Mixin.class));
final Set<Class<?>> domainObjectTypes = discovery.getTypesAnnotatedWith(DomainObject.class);
- mixinTypes.addAll(
- domainObjectTypes.stream().filter(input -> {
- if (input == null) {
- return false;
- }
- final DomainObject annotation = input.getAnnotation(DomainObject.class);
- return annotation.nature() == Nature.MIXIN;
- }).collect(Collectors.toList())
- );
-
+ domainObjectTypes.stream()
+ .filter(input -> {
+ final DomainObject annotation = input.getAnnotation(DomainObject.class);
+ return annotation.nature() == Nature.MIXIN;
+ })
+ .forEach(mixinTypes::add);
// add in any explicitly registered services...
domainServiceTypes.addAll(appManifest.getAdditionalServices());
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/PersistenceCapableTypeFinder.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/PersistenceCapableTypeFinder.java
new file mode 100644
index 0000000..1fbf533
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/PersistenceCapableTypeFinder.java
@@ -0,0 +1,65 @@
+/*
+ * 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.core.runtime.systemusinginstallers;
+
+import java.lang.annotation.Annotation;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.jdo.annotations.PersistenceCapable;
+
+import org.apache.isis.applib.internal.reflection._Reflect.Discovery;
+
+/**
+ *
+ * Package private helper class. Finds PersistenceCapable types.
+ *
+ */
+class PersistenceCapableTypeFinder {
+
+ @SuppressWarnings("unchecked")
+ static Set<Class<?>> find(Discovery discovery) {
+
+ final Set<Class<?>> types = new LinkedHashSet<>();
+
+ discovery.getTypesAnnotatedWith(PersistenceCapable.class).stream()
+ .forEach(type->{
+
+ if(type.isAnnotation()) {
+
+ // We have an annotation, that is annotated with @PersistenceCapable,
+ // this requires special treatment:
+ // Search for any classes annotated with this (meta-)annotation.
+
+ discovery.getTypesAnnotatedWith((Class<? extends Annotation>) type).stream()
+ .filter(x->!x.isAnnotation())
+ .forEach(types::add);
+
+ } else {
+
+ types.add(type);
+
+ }
+ });
+
+ return types;
+ }
+
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusLifeCycleHelper.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusLifeCycleHelper.java
index 398c30f..4547a49 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusLifeCycleHelper.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusLifeCycleHelper.java
@@ -49,29 +49,6 @@ public class DataNucleusLifeCycleHelper {
try {
final ClassLoader cl = IsisContext.getClassLoader();
-
-// XXX not needed according to https://github.com/datanucleus/datanucleus-core/issues/272
-//
-// if(persistenceManagerFactory instanceof JDOPersistenceManagerFactory) {
-//
-// final JDOPersistenceManagerFactory jdoPMF =
-// (JDOPersistenceManagerFactory) persistenceManagerFactory;
-// final PersistenceNucleusContext nucleusContext = jdoPMF.getNucleusContext();
-// final AbstractStoreManager storeManager =
-// (AbstractStoreManager)nucleusContext.getStoreManager();
-//
-//
-// persistenceManagerFactory.getManagedClasses()
-// .forEach(clazz->{
-// final ClassLoaderResolver clr = nucleusContext.getClassLoaderResolver(cl);
-//
-// // Un-manage from the store
-// storeManager.unmanageClass(clr, clazz.getName(), false);
-//
-// // Unload the meta-data for this class
-// nucleusContext.getMetaDataManager().unloadMetaDataForClass(clazz.getName());
-// });
-// }
persistenceManagerFactory.close();
@@ -84,35 +61,6 @@ public class DataNucleusLifeCycleHelper {
}
}
-
-
- // -- LOW LEVEL REFLECTION
-
- // TODO remove once DN v5.1.5 is released
- private final static MethodHandle getRegisteredClassesMH;
- static {
- MethodHandle mh;
- try {
- Field registeredClasses = EnhancementHelper.class.getDeclaredField("registeredClasses");
- registeredClasses.setAccessible(true);
- mh = MethodHandles.lookup().unreflectGetter(registeredClasses);
- registeredClasses.setAccessible(false);
- } catch (Exception e) {
- mh = null;
- e.printStackTrace();
- }
- getRegisteredClassesMH = mh;
- }
-
- // TODO remove once DN v5.1.5 is released
- private static void visitDNRegisteredClasses(Consumer<Map<Class<?>, ?>> visitor){
- try {
- visitor.accept( (Map<Class<?>, ?>) getRegisteredClassesMH.invoke() );
- } catch (Throwable e) {
- LOG.warn("Failed to access DataNucleus' EnhancementHelper via reflection.", e);
- }
- }
-
}
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/spi/JdoObjectIdSerializer.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/spi/JdoObjectIdSerializer.java
index ebb4d40..e185908 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/spi/JdoObjectIdSerializer.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/spi/JdoObjectIdSerializer.java
@@ -25,13 +25,15 @@ import java.math.BigInteger;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
+
import javax.jdo.annotations.IdentityType;
import javax.jdo.identity.ByteIdentity;
import javax.jdo.identity.IntIdentity;
import javax.jdo.identity.LongIdentity;
import javax.jdo.identity.ObjectIdentity;
import javax.jdo.identity.StringIdentity;
-import org.datanucleus.identity.DatastoreId;
+
+import org.apache.isis.applib.internal.context._Context;
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;
@@ -39,6 +41,7 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
+import org.datanucleus.identity.DatastoreId;
public final class JdoObjectIdSerializer {
@@ -164,7 +167,7 @@ public final class JdoObjectIdSerializer {
final String clsName = distinguisher;
try {
- final Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(clsName);
+ final Class<?> cls = _Context.loadClass(clsName);
final Constructor<?> cons = cls.getConstructor(String.class);
final Object dnOid = cons.newInstance(keyStr);
return dnOid.toString();
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecutionScope.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecutionScope.java
index 0b28cf4..42a3e54 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecutionScope.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecutionScope.java
@@ -16,6 +16,7 @@
*/
package org.apache.isis.core.specsupport.scenarios;
+import org.apache.isis.applib.internal.context._Context;
/**
* The scope at which the specification will run; acts as a factory to create
@@ -39,7 +40,7 @@ public class ScenarioExecutionScope {
public ScenarioExecutionScope(String scenarioExecutionClassName) {
try {
this.scenarioExecutionClass = (Class<? extends ScenarioExecution>)
- Thread.currentThread().getContextClassLoader().loadClass(scenarioExecutionClassName);
+ _Context.loadClass(scenarioExecutionClassName);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 9114767..ecf8d4c 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -30,6 +30,7 @@ import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
+import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
@@ -334,7 +335,7 @@ public class IsisWicketApplication
try {
super.init();
- IsisContext.setClassLoader(this.getClass().getClassLoader());
+ _Context.putSingleton(ClassLoader.class, this.getClass().getClassLoader());
futures = startBackgroundInitializationThreads();
@@ -864,7 +865,7 @@ public class IsisWicketApplication
}
getServletContext().setAttribute(WebAppConstants.ISIS_SESSION_FACTORY, null);
super.onDestroy();
- IsisContext.destroy();
+ IsisContext.clear();
} catch(final RuntimeException ex) {
// symmetry with #init()
LOG.error("Failed to destroy", ex);
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java
index d3470db..7c1fd0c 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java
@@ -22,11 +22,7 @@ package org.apache.isis.viewer.wicket.viewer.integration.wicket;
import java.util.Arrays;
import java.util.List;
-import org.apache.wicket.Session;
-import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
-import org.apache.wicket.authroles.authorization.strategies.role.Roles;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.cycle.RequestCycle;
+import javax.validation.constraints.NotNull;
import org.apache.isis.applib.clock.Clock;
import org.apache.isis.applib.services.session.SessionLoggingService;
@@ -40,6 +36,11 @@ import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider;
import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
+import org.apache.wicket.Session;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
+import org.apache.wicket.authroles.authorization.strategies.role.Roles;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.cycle.RequestCycle;
/**
* Viewer-specific implementation of {@link AuthenticatedWebSession}, which
@@ -169,21 +170,35 @@ public class AuthenticatedWebSessionForIsis extends AuthenticatedWebSession impl
final SessionLoggingService.Type type,
final String username,
final SessionLoggingService.CausedBy causedBy) {
+
+
+ final IsisSessionFactory isisSessionFactory = getIsisSessionFactoryIfAny();
final SessionLoggingService sessionLoggingService = getSessionLoggingService();
- if (sessionLoggingService != null) {
- getIsisSessionFactory().doInSession(new Runnable() {
- @Override
- public void run() {
- // use hashcode as session identifier, to avoid re-binding http sessions if using Session#getId()
- int sessionHashCode = System.identityHashCode(AuthenticatedWebSessionForIsis.this);
- sessionLoggingService.log(type, username, Clock.getTimeAsDateTime().toDate(), causedBy, Integer.toString(sessionHashCode));
- }
- });
- }
+
+ final Runnable loggingTask = ()->{
+ // use hashcode as session identifier, to avoid re-binding http sessions if using Session#getId()
+ int sessionHashCode = System.identityHashCode(AuthenticatedWebSessionForIsis.this);
+ sessionLoggingService.log(type, username, Clock.getTimeAsDateTime().toDate(), causedBy, Integer.toString(sessionHashCode));
+ };
+
+ if(isisSessionFactory!=null) {
+ isisSessionFactory.doInSession(loggingTask);
+ } else {
+ loggingTask.run();
+ }
+
}
- protected SessionLoggingService getSessionLoggingService() {
- return getIsisSessionFactory().getServicesInjector().lookupService(SessionLoggingService.class);
+ protected @NotNull SessionLoggingService getSessionLoggingService() {
+ try {
+ final SessionLoggingService service = getIsisSessionFactory().getServicesInjector()
+ .lookupService(SessionLoggingService.class);
+ return (service!=null) ? service : new SessionLoggingService.Stderr();
+ } catch (Exception e) {
+ // fallback to System.err
+ return new SessionLoggingService.Stderr();
+ }
+
}
@Override
@@ -191,11 +206,20 @@ public class AuthenticatedWebSessionForIsis extends AuthenticatedWebSession impl
// do nothing here because this will lead to problems with Shiro
// see https://issues.apache.org/jira/browse/ISIS-1018
}
+
+ // -- HELPER
-
- IsisSessionFactory getIsisSessionFactory() {
+ private IsisSessionFactory getIsisSessionFactory() {
return IsisContext.getSessionFactory();
}
+
+ private IsisSessionFactory getIsisSessionFactoryIfAny() {
+ try {
+ return getIsisSessionFactory();
+ } catch (Exception e) {
+ return null;
+ }
+ }
}
diff --git a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java
index 6121101..d9cb9e3 100644
--- a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java
+++ b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertThat;
import java.util.Arrays;
import java.util.Collection;
+import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -34,7 +35,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
-
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
@@ -47,32 +49,45 @@ import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassRegistryDe
@RunWith(Parameterized.class)
public class WicketObjectModule_bindingsStandard {
- private IsisWicketModule wicketObjectsModule;
- private Injector injector;
- private final Class<?> from;
- private final Class<?> to;
+ private IsisWicketModule wicketObjectsModule;
+ private Injector injector;
+ private final Class<?> from;
+ private final Class<?> to;
+
+ @Parameters
+ public static Collection<Object[]> params() {
+ return Arrays.asList(new Object[][] {
+ { ComponentFactoryRegistrar.class, ComponentFactoryRegistrarDefault.class },
+ { ComponentFactoryRegistry.class, ComponentFactoryRegistryDefault.class },
+ { PageClassList.class, PageClassListDefault.class },
+ { PageClassRegistry.class, PageClassRegistryDefault.class },
+ });
+ }
+
+ public WicketObjectModule_bindingsStandard(final Class<?> from, final Class<?> to) {
+ this.from = from;
+ this.to = to;
+ }
- @Parameters
- public static Collection<Object[]> params() {
- return Arrays.asList(new Object[][] { { ComponentFactoryRegistrar.class, ComponentFactoryRegistrarDefault.class }, { ComponentFactoryRegistry.class, ComponentFactoryRegistryDefault.class }, { PageClassList.class, PageClassListDefault.class },
- { PageClassRegistry.class, PageClassRegistryDefault.class }, });
- }
+ @Before
+ public void setUp() throws Exception {
+ wicketObjectsModule = new IsisWicketModule();
+ injector = Guice.createInjector(wicketObjectsModule, new ConfigModule());
+ }
- public WicketObjectModule_bindingsStandard(final Class<?> from, final Class<?> to) {
- this.from = from;
- this.to = to;
- }
+ @Test
+ public void binding() {
+ final Object instance = injector.getInstance(from);
+ assertThat(instance, is(instanceOf(to)));
+ }
- @Before
- public void setUp() throws Exception {
- wicketObjectsModule = new IsisWicketModule();
- injector = Guice.createInjector(wicketObjectsModule);
- }
+ // -- CONFIGURATION BINDING
- @Test
- public void binding() {
- final Object instance = injector.getInstance(from);
- assertThat(instance, is(instanceOf(to)));
- }
+ private static class ConfigModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ bind(IsisConfiguration.class).to(IsisConfigurationDefault.class);
+ }
+ }
}
diff --git a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_Instantiation.java b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_Instantiation.java
index 4f5c860..0c5efde 100644
--- a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_Instantiation.java
+++ b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_Instantiation.java
@@ -55,7 +55,7 @@ public class AuthenticatedWebSessionForIsis_Instantiation {
new AuthenticatedWebSessionForIsis(stubRequest);
}
- @Test(expected = IllegalArgumentException.class)
+ @Test(expected = Exception.class)
public void requestMustBeProvided() {
new AuthenticatedWebSessionForIsis(null);
}
diff --git a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
index b482435..1898edd 100644
--- a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
+++ b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
@@ -62,7 +62,7 @@ public class PageClassListDefault_RegistrationAndCaching {
registryImpl.registerPage(PageType.ACTION_PROMPT, TestingActionPage.class);
final Class<? extends Page> pageClass = registryImpl.getPageClass(PageType.ACTION_PROMPT);
- assertThat(pageClass, is(instanceOf(TestingActionPage.class)));
+ assertThat(pageClass, is(org.hamcrest.Matchers.equalTo(TestingActionPage.class)));
}
}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/JarManifestModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/JarManifestModel.java
index d78a290..c2187d0 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/JarManifestModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/JarManifestModel.java
@@ -35,6 +35,7 @@ import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
+import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.core.commons.lang.CloseableExtensions;
import org.apache.isis.viewer.wicket.model.models.ModelAbstract;
@@ -75,7 +76,7 @@ public class JarManifestModel extends ModelAbstract<JarManifestModel> {
Enumeration<?> resEnum;
try {
- resEnum = Thread.currentThread().getContextClassLoader().getResources(JarFile.MANIFEST_NAME);
+ resEnum = _Context.getDefaultClassLoader().getResources(JarFile.MANIFEST_NAME);
} catch (IOException e) {
return;
}
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.