diff --git a/framework/build.gradle b/framework/build.gradle index 3480934652..7c6d61b925 100644 --- a/framework/build.gradle +++ b/framework/build.gradle @@ -21,7 +21,7 @@ plugins { } group 'com.nosto.play' -version '1.8.0-nosto-GA-13' +version '1.8.0-nosto-GA-14' java { withSourcesJar() diff --git a/framework/src/play/classloading/ApplicationClassloader.java b/framework/src/play/classloading/ApplicationClassloader.java index b8a83df17f..bb66ac78f6 100644 --- a/framework/src/play/classloading/ApplicationClassloader.java +++ b/framework/src/play/classloading/ApplicationClassloader.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -119,7 +120,9 @@ public Class loadApplicationClass(String name) { Class clazz = findLoadedClass(name); if (clazz == null) { if (name.endsWith("package-info")) { - definePackage(getPackageName(name), null, null, null, null, null, null, null); + if (getDefinedPackage(getPackageName(name)) == null) { + definePackage(getPackageName(name), null, null, null, null, null, null, null); + } } else { loadPackage(name); } @@ -151,14 +154,17 @@ public Class loadApplicationClass(String name) { } if (!applicationClass.isClass()) { - definePackage(applicationClass.getPackage(), null, null, null, null, null, null, null); + if (getDefinedPackage(applicationClass.getPackage()) == null) { + definePackage(applicationClass.getPackage(), null, null, null, null, null, null, null); + } } else { loadPackage(name); } if (bc != null) { applicationClass.enhancedByteCode = bc; - applicationClass.javaClass = defineClass(applicationClass.name, applicationClass.enhancedByteCode, 0, - applicationClass.enhancedByteCode.length, protectionDomain); + applicationClass.javaClass = Optional.ofNullable(findLoadedClass(applicationClass.name)) + .orElseGet(() -> defineClass(applicationClass.name, applicationClass.enhancedByteCode, 0, + applicationClass.enhancedByteCode.length, protectionDomain)); resolveClass(applicationClass.javaClass); if (!applicationClass.isClass()) { applicationClass.javaPackage = applicationClass.javaClass.getPackage();