private void addRarClassLoader(String appName, DelegatingClassLoader appSpecificConnectorClassLoader, String raName) { if(logger.isLoggable(Level.FINEST)){ logger.finest("raName for app [ "+appName+" ] : " + raName); } DelegatingClassLoader.ClassFinder cf = getClassFinder(raName); if(cf != null){ appSpecificConnectorClassLoader.addDelegate(cf); }else{ //not possible /* TODO V3 if(!ConnectorsUtil.isEmbedded(appName, raName)){ throw new IllegalStateException("RAR Classloader of RAR [ "+raName+" ] not found for " + "application [ "+appName+" ]"); } */ } }
synchronized (ConnectorClassLoaderServiceImpl.class){ if(globalConnectorCL == null){ ClassLoader parent = getCommonClassLoader(); globalConnectorCL = new DelegatingClassLoader(parent); for(DelegatingClassLoader.ClassFinder cf : appsSpecificCCLUtil.getSystemRARClassLoaders()){ if (hasGlobalAccessForRARs(appName)) { assert (globalConnectorCL != null); loader = globalConnectorCL; } else { appsSpecificCCLUtil.detectReferredRARs(appName); loader = createConnectorClassLoaderForApplication(appName);
private DelegatingClassLoader createConnectorClassLoaderForApplication(String appName){ DelegatingClassLoader appSpecificConnectorClassLoader = new DelegatingClassLoader(getCommonClassLoader()); //add system ra classloaders for(DelegatingClassLoader.ClassFinder cf : appsSpecificCCLUtil.getSystemRARClassLoaders()){ appSpecificConnectorClassLoader.addDelegate(cf); } for(String raName : appsSpecificCCLUtil.getRARsReferredByApplication(appName)){ addRarClassLoader(appName, appSpecificConnectorClassLoader, raName); } for(String raName : appsSpecificCCLUtil.getRequiredResourceAdapters(appName)){ addRarClassLoader(appName, appSpecificConnectorClassLoader, raName); } return appSpecificConnectorClassLoader; }