From cadaedcdee32c750414ccbabe5e1804aca50ac1c Mon Sep 17 00:00:00 2001 From: David Estes Date: Tue, 21 Jul 2020 16:42:05 -0400 Subject: [PATCH 1/3] fixing type-registry concurrency issue --- .../org/springsource/loaded/TypeRegistry.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java b/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java index 83621ea..39eea2d 100644 --- a/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java +++ b/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java @@ -1125,10 +1125,13 @@ public class TypeRegistry { if (typeId >= reloadableTypes.length) { resizeReloadableTypeArray(typeId); } - reloadableTypes[typeId] = rtype; - if ((typeId + 1) > reloadableTypesSize) { - reloadableTypesSize = typeId + 1; + synchronized(this) { + reloadableTypes[typeId] = rtype; + if ((typeId + 1) > reloadableTypesSize) { + reloadableTypesSize = typeId + 1; + } } + // allocatedIds.put(slashname, rtype); // allocatedButNotYetRegisteredItds.remove(slashname); int cglibIndex = slashname.indexOf("$$EnhancerBy"); @@ -1196,10 +1199,13 @@ public class TypeRegistry { if (typeId >= reloadableTypes.length) { resizeReloadableTypeArray(typeId); } - reloadableTypes[typeId] = rtype; - if ((typeId + 1) > reloadableTypesSize) { - reloadableTypesSize = typeId + 1; + synchronized(this) { + reloadableTypes[typeId] = rtype; + if ((typeId + 1) > reloadableTypesSize) { + reloadableTypesSize = typeId + 1; + } } + } /** From cf07166f1d0b45bc7a614c2cde07db758a7c256e Mon Sep 17 00:00:00 2001 From: davydotcom Date: Sun, 23 Aug 2020 16:35:57 -0400 Subject: [PATCH 2/3] Checking if ReflectionUtils class exists and clears its cache in the event of a class chanage --- .../java/org/springsource/loaded/ReloadableType.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java b/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java index 1a3f40f..e96c454 100644 --- a/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java +++ b/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java @@ -441,6 +441,16 @@ public class ReloadableType { tagAsAffectedByReload(); tagSupertypesAsAffectedByReload(); tagSubtypesAsAffectedByReload(); + //ReflectionUtils has a cache that needs cleared + try { + Class reflecutionUtil = Class.forName("org.springframework.util.ReflectionUtils"); + // java.lang.NoSuchMethodException: org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.clear() + Method clearMethod = reflecutionUtil.getMethod("clearCache");//DeclaredMethod("clear"); + clearMethod.invoke(null); + } catch(Exception e3) { + //this better not blow up in my face + } + // ReflectionUtils.clearCache(); typeRegistry.fireReloadEvent(this, versionsuffix); From 489c5e259dc0f02a4dd5c16fb3102b5c271589e5 Mon Sep 17 00:00:00 2001 From: davydotcom Date: Thu, 27 Aug 2020 08:27:42 -0400 Subject: [PATCH 3/3] removing useless commented code --- .../src/main/java/org/springsource/loaded/ReloadableType.java | 1 - 1 file changed, 1 deletion(-) diff --git a/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java b/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java index e96c454..b7869a5 100644 --- a/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java +++ b/springloaded/src/main/java/org/springsource/loaded/ReloadableType.java @@ -450,7 +450,6 @@ public class ReloadableType { } catch(Exception e3) { //this better not blow up in my face } - // ReflectionUtils.clearCache(); typeRegistry.fireReloadEvent(this, versionsuffix);