Author: rmannibucau Date: Thu May 22 18:58:07 2014 New Revision: 1596940 URL: http://svn.apache.org/r1596940 Log: TOMEE-1220 jars.txt in conf/ for container enrichment
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java?rev=1596940&r1=1596939&r2=1596940&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java Thu May 22 18:58:07 2014 @@ -49,8 +49,6 @@ import java.util.Set; * Note: if a line doesn't start with '+' it is considered as an addition */ public class ProvisioningClassLoaderConfigurer implements ClassLoaderConfigurer { - private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, ProvisioningClassLoaderConfigurer.class); - // just some default if one is not set private URL[] added = new URL[0]; private Filter excluded = FalseFilter.INSTANCE; @@ -122,7 +120,7 @@ public class ProvisioningClassLoaderConf } } catch (final Exception e) { - LOGGER.error("Can't read " + configFile, e); + Logger.getInstance(LogCategory.OPENEJB, ProvisioningClassLoaderConfigurer.class).error("Can't read " + configFile, e); } finally { IO.close(reader); } Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java?rev=1596940&r1=1596939&r2=1596940&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java Thu May 22 18:58:07 2014 @@ -17,9 +17,7 @@ package org.apache.openejb.util; -import org.apache.log4j.ConsoleAppender; import org.apache.log4j.PropertyConfigurator; -import org.apache.log4j.SimpleLayout; import org.apache.log4j.xml.DOMConfigurator; import org.apache.openejb.cdi.logging.Log4jLoggerFactory; import org.apache.openejb.loader.FileUtils; @@ -101,8 +99,17 @@ public class Log4jLogStreamFactory imple DOMConfigurator.configure(log4jXml.toURI().toURL()); } else { - // install our logging.properties file into the conf dir - installLoggingPropertiesFile(loggingPropertiesFile); + // needs mvn:org.apache.logging.log4j:log4j-1.2-api:2.0-rc1, + // typically container will contain: + // + // mvn:org.apache.logging.log4j:log4j-api:2.0-rc1 + // mvn:org.apache.logging.log4j:log4j-core:2.0-rc1 + // mvn:org.apache.logging.log4j:log4j-1.2-api:2.0-rc1 + final File log4j2Xml = new File(confDir, "log4j2.xml"); + if (!log4j2Xml.exists()) { + // install our logging.properties file into the conf dir + installLoggingPropertiesFile(loggingPropertiesFile); + } // else ignore, DOMConfigurator is just a mock doing nothing so don't call it and don't install defaults } } } @@ -168,9 +175,13 @@ public class Log4jLogStreamFactory imple private org.apache.log4j.Logger getFallabckLogger() { final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger("OpenEJB.logging"); + /* will break log4j support and not that needed since we'll get the same by default just not with a nice layout + which is good when something is wrong + final SimpleLayout simpleLayout = new SimpleLayout(); final ConsoleAppender newAppender = new ConsoleAppender(simpleLayout); logger.addAppender(newAppender); + */ return logger; } Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java?rev=1596940&r1=1596939&r2=1596940&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java Thu May 22 18:58:07 2014 @@ -22,6 +22,8 @@ import org.apache.catalina.LifecycleEven import org.apache.catalina.LifecycleListener; import org.apache.catalina.core.StandardServer; import org.apache.catalina.util.ServerInfo; +import org.apache.openejb.classloader.ClassLoaderConfigurer; +import org.apache.openejb.config.QuickJarsTxtParser; import org.apache.openejb.loader.IO; import org.apache.openejb.loader.ProvisioningUtil; import org.apache.openejb.loader.SystemInstance; @@ -31,7 +33,9 @@ import org.apache.tomee.loader.TomcatHel import java.io.File; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.Properties; @@ -127,24 +131,38 @@ public class ServerListener implements L // no-op } + final TomcatLoader loader = new TomcatLoader(); + loader.initSystemInstance(properties); + // manage additional libraries if (URLClassLoader.class.isInstance(classLoader)) { final URLClassLoader ucl = URLClassLoader.class.cast(classLoader); try { final Method addUrl = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); - for (final File f : ProvisioningUtil.addAdditionalLibraries()) { - if (!addUrl.isAccessible()) { // set it lazily - addUrl.setAccessible(true); + final boolean acc = addUrl.isAccessible(); + try { + for (final File f : ProvisioningUtil.addAdditionalLibraries()) { + addUrl(ucl, addUrl, f.toURI().toURL()); + } + + final File globalJaxrsTxt = SystemInstance.get().getConf(QuickJarsTxtParser.FILE_NAME); + final ClassLoaderConfigurer configurer = QuickJarsTxtParser.parse(globalJaxrsTxt); + if (configurer != null) { + for (final URL f : configurer.additionalURLs()) { + addUrl(ucl, addUrl, f); + } } - addUrl.invoke(ucl, f.toURI().toURL()); + } finally { + addUrl.setAccessible(acc); } } catch (final Exception e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } + } else { + LOGGER.finer("container classloader is not an URL one so can't check provisining: " + classLoader); } - final TomcatLoader loader = new TomcatLoader(); - loader.init(properties); + loader.initialize(properties); TomEELogConfigurer.configureLogs(); @@ -156,6 +174,13 @@ public class ServerListener implements L } } + private static void addUrl(final URLClassLoader ucl, final Method addUrl, final URL url) throws IllegalAccessException, InvocationTargetException, MalformedURLException { + if (!addUrl.isAccessible()) { // set it lazily + addUrl.setAccessible(true); + } + addUrl.invoke(ucl, url); + } + private synchronized void installServerInfo() { if (SystemInstance.get().getOptions().get("tomee.keep-server-info", false)) { return; Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java?rev=1596940&r1=1596939&r2=1596940&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java Thu May 22 18:58:07 2014 @@ -110,20 +110,22 @@ public class TomcatLoader implements Loa private static final List<ServerService> services = new ArrayList<ServerService> (); /** - * Â {@inheritDoc} + * this method will be split in two to be able to use SystemInstance in between both invocations + * ie use configuration before effective boot */ + @Deprecated public void init(Properties properties) throws Exception { + initSystemInstance(properties); + initialize(properties); + } + public void initSystemInstance(final Properties properties) throws Exception { // Enable System EJBs like the MEJB and DeployerEJB initDefaults(properties); // Loader maybe the first thing executed in a new classloader // so we must attempt to initialize the system instance. SystemInstance.init(properties); - - Warmup.warmup(); // better than static (we are sure we don't hit it too eagerly) and doesn't cost more since uses static block - - initialize(properties); } public void initDefaults(Properties properties) { @@ -136,6 +138,8 @@ public class TomcatLoader implements Loa } public void initialize(Properties properties) throws Exception { + Warmup.warmup(); // better than static (we are sure we don't hit it too eagerly) and doesn't cost more since uses static block + //Install Log OptionsLog.install();