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.