2424import  org .apache .catalina .loader .ParallelWebappClassLoader ;
2525import  org .apache .commons .logging .Log ;
2626import  org .apache .commons .logging .LogFactory ;
27+ import  org .apache .tomcat .util .compat .JreCompat ;
2728
2829/** 
2930 * Extension of Tomcat's {@link ParallelWebappClassLoader} that does not consider the 
3233 * executable archives). 
3334 * 
3435 * @author Phillip Webb 
36+  * @author Andy Clement 
3537 * @since 2.0.0 
3638 */ 
3739public  class  TomcatEmbeddedWebappClassLoader  extends  ParallelWebappClassLoader  {
3840
3941	private  static  final  Log  logger  = LogFactory .getLog (TomcatEmbeddedWebappClassLoader .class );
4042
4143	static  {
42- 		ClassLoader .registerAsParallelCapable ();
44+ 		if  (!JreCompat .isGraalAvailable ()) {
45+ 			ClassLoader .registerAsParallelCapable ();
46+ 		}
4347	}
4448
4549	public  TomcatEmbeddedWebappClassLoader () {
@@ -61,7 +65,7 @@ public Enumeration<URL> findResources(String name) throws IOException {
6165
6266	@ Override 
6367	public  Class <?> loadClass (String  name , boolean  resolve ) throws  ClassNotFoundException  {
64- 		synchronized  (getClassLoadingLock (name )) {
68+ 		synchronized  (JreCompat . isGraalAvailable () ?  this  :  getClassLoadingLock (name )) {
6569			Class <?> result  = findExistingLoadedClass (name );
6670			result  = (result  != null ) ? result  : doLoadClass (name );
6771			if  (result  == null ) {
@@ -73,7 +77,7 @@ public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundExce
7377
7478	private  Class <?> findExistingLoadedClass (String  name ) {
7579		Class <?> resultClass  = findLoadedClass0 (name );
76- 		resultClass  = (resultClass  != null ) ? resultClass  : findLoadedClass (name );
80+ 		resultClass  = (resultClass  != null  ||  JreCompat . isGraalAvailable () ) ? resultClass  : findLoadedClass (name );
7781		return  resultClass ;
7882	}
7983
0 commit comments