@@ -138,11 +138,25 @@ public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundExce
138138 throw new ClassNotFoundException (name );
139139 }
140140
141- return super .loadClass (name , resolve );
141+ synchronized (getClassLoadingLock (name )) {
142+ Class <?> clazz = findLoadedClass (name );
143+ // first search agent classes
144+ if (clazz == null ) {
145+ clazz = findAgentClass (name );
146+ }
147+ // search from parent and urls added to this loader
148+ if (clazz == null ) {
149+ clazz = super .loadClass (name , false );
150+ }
151+ if (resolve ) {
152+ resolveClass (clazz );
153+ }
154+
155+ return clazz ;
156+ }
142157 }
143158
144- @ Override
145- protected Class <?> findClass (String name ) throws ClassNotFoundException {
159+ private Class <?> findAgentClass (String name ) throws ClassNotFoundException {
146160 JarEntry jarEntry = findJarEntry (name .replace ('.' , '/' ) + ".class" );
147161 if (jarEntry != null ) {
148162 byte [] bytes ;
@@ -156,8 +170,7 @@ protected Class<?> findClass(String name) throws ClassNotFoundException {
156170 return defineClass (name , bytes );
157171 }
158172
159- // find class from agent initializer jar
160- return super .findClass (name );
173+ return null ;
161174 }
162175
163176 public Class <?> defineClass (String name , byte [] bytes ) {
@@ -281,7 +294,7 @@ private URL getJarEntryUrl(JarEntry jarEntry) {
281294 public Enumeration <URL > findResources (String name ) throws IOException {
282295 // find resources from agent initializer jar
283296 Enumeration <URL > delegate = super .findResources (name );
284- // agent jar can have only once resource for given name
297+ // agent jar can have only one resource for given name
285298 URL url = findJarResource (name );
286299 if (url != null ) {
287300 return new Enumeration <URL >() {
0 commit comments