@Override public void contextInitialized(ServletContextEvent servletContextEvent) { ServletContext servletContext = servletContextEvent.getServletContext(); String contextPath = servletContext.getRealPath(StringPool.BLANK); String spiEmbeddedLibDirName = servletContext.getInitParameter("spiEmbeddedLibDir"); Set<File> jarFiles = new LinkedHashSet<File>(); // Load embedded Tomcat File spiEmbeddedLibDir = new File(contextPath, spiEmbeddedLibDirName); addJarFiles(jarFiles, spiEmbeddedLibDir); // Load portal-service.jar from MPI addJarFiles(jarFiles, PortalClassLoaderUtil.getClassLoader(), PortalException.class.getName()); // Load JDBC driver jars from MPI addJarFiles( jarFiles, PortalClassLoaderUtil.getClassLoader(), PropsUtil.get(PropsKeys.JDBC_DEFAULT_DRIVER_CLASS_NAME)); // Load ext jars addJarFiles(jarFiles, new File(spiEmbeddedLibDir, "ext")); StringBundler sb = new StringBundler(jarFiles.size() * 2 + 4); for (File file : jarFiles) { sb.append(file.getAbsolutePath()); sb.append(File.pathSeparator); } sb.append(contextPath); sb.append("/WEB-INF/classes"); SPI_CLASS_PATH = sb.toString(); if (_log.isDebugEnabled()) { _log.debug("SPI class path " + SPI_CLASS_PATH); } String spiProviderClassName = servletContext.getInitParameter("spiProviderClassName"); Thread currentThread = Thread.currentThread(); ClassLoader contextClassLoader = currentThread.getContextClassLoader(); try { Class<SPIProvider> spiProviderClass = null; if (SPIUtil.isSPI()) { spiProviderClass = (Class<SPIProvider>) loadClassDirectly(contextClassLoader, spiProviderClassName); } else { spiProviderClass = (Class<SPIProvider>) contextClassLoader.loadClass(spiProviderClassName); } SPIProvider spiProvider = spiProviderClass.newInstance(); boolean result = spiProviderReference.compareAndSet(null, spiProvider); if (!result) { _log.error( "Duplicate SPI provider " + spiProvider + " is already registered in servlet context " + servletContext.getContextPath()); } else { MPIHelperUtil.registerSPIProvider(spiProvider); } } catch (Exception e) { _log.error("Unable to create SPI provider with name " + spiProviderClassName, e); } }