From 889336b2405ed9c5e9f7e3fc3809b099671622db Mon Sep 17 00:00:00 2001 From: yarhoo Date: Tue, 9 Apr 2019 11:10:29 +0800 Subject: [PATCH] fix spring cglib proxy error "Reloading agent exited via exception, please raise a jira" , when enable Option watchJars. issue #96 ,#102 --- .../loaded/agent/ReloadableFileChangeListener.java | 7 ++++++- .../loaded/agent/SpringLoadedPreProcessor.java | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/springloaded/src/main/java/org/springsource/loaded/agent/ReloadableFileChangeListener.java b/springloaded/src/main/java/org/springsource/loaded/agent/ReloadableFileChangeListener.java index a4554998..7affa426 100644 --- a/springloaded/src/main/java/org/springsource/loaded/agent/ReloadableFileChangeListener.java +++ b/springloaded/src/main/java/org/springsource/loaded/agent/ReloadableFileChangeListener.java @@ -108,9 +108,10 @@ public void fileChanged(File file) { public void register(ReloadableType rtype, File file) { if (file.getName().endsWith(".jar")) { // Compute the last mod time of the entry in the jar + String slashname = ""; try { ZipFile zf = new ZipFile(file); - String slashname = rtype.getSlashedName() + ".class"; + slashname = rtype.getSlashedName() + ".class"; ZipEntry ze = zf.getEntry(slashname); long lmt = ze.getTime();//LastModifiedTime().toMillis(); JarEntry je = new JarEntry(rtype, slashname, lmt); @@ -128,6 +129,10 @@ public void register(ReloadableType rtype, File file) { } catch (IOException e) { e.printStackTrace(); + }catch (NullPointerException ex) + { + log.warning("class : " +slashname + "not exist in Jar , register watch failed " ); + ex.printStackTrace(); } } else { diff --git a/springloaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java b/springloaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java index 818713fe..a11b3ff4 100644 --- a/springloaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java +++ b/springloaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java @@ -340,7 +340,13 @@ else if ((GlobalConfiguration.investigateSystemClassReflection } else { if (GlobalConfiguration.fileSystemMonitoring && watchPath != null) { - typeRegistry.monitorForUpdates(rtype, watchPath); + String slashname = rtype.slashedtypename; + int cglibIndex = slashname.indexOf("$$EnhancerBy"); + int fcIndex = slashname.indexOf("$$FastClassBy"); + // ( skip the fast class for a proxy ) + if (fcIndex == -1 && cglibIndex == -1) { + typeRegistry.monitorForUpdates(rtype, watchPath); + } } return rtype.bytesLoaded; }