Repository: tomee
Updated Branches:
  refs/heads/master 345967ac9 -> 7bc8519e6


another explicit instantiation + lazy creation of Messages in Instance since it 
is 100% error messages


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/7bc8519e
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/7bc8519e
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/7bc8519e

Branch: refs/heads/master
Commit: 7bc8519e6b8d06865404d92102033a3c03ec0eb1
Parents: 345967a
Author: Romain Manni-Bucau <[email protected]>
Authored: Wed Jun 17 15:22:04 2015 +0200
Committer: Romain Manni-Bucau <[email protected]>
Committed: Wed Jun 17 15:22:04 2015 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/openejb/OpenEJB.java   | 34 +++++++++-----
 .../apache/tomee/catalina/ServerListener.java   | 49 ++++++++++++--------
 2 files changed, 51 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/7bc8519e/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java 
b/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
index 32c761e..3742c4e 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
@@ -35,6 +35,7 @@ import org.apache.openejb.util.SafeToolkit;
 import javax.transaction.TransactionManager;
 import java.util.Date;
 import java.util.Properties;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * @version $Rev$ $Date$
@@ -56,7 +57,6 @@ public final class OpenEJB {
 
     public static class Instance {
 
-        private static final Messages messages = new 
Messages("org.apache.openejb.util.resources");
         private final Throwable initialized;
 
         /**
@@ -119,18 +119,19 @@ public final class OpenEJB {
             //OWB support.  The classloader has to be able to load all OWB 
components including the ones supplied by OpenEjb.
             CdiBuilder.initializeOWB(getClass().getClassLoader());
 
-            final String className = 
system.getOptions().get("openejb.assembler", 
"org.apache.openejb.assembler.classic.Assembler");
+            final String className = 
system.getOptions().get("openejb.assembler", (String) null);
 
             logger.debug("startup.instantiatingAssemblerClass", className);
 
             final Assembler assembler;
             try {
-                assembler = (Assembler) 
SafeToolkit.getToolkit("OpenEJB").newInstance(className);
+                assembler = className == null ?
+                        new org.apache.openejb.assembler.classic.Assembler() : 
(Assembler) SafeToolkit.getToolkit("OpenEJB").newInstance(className);
             } catch (final OpenEJBException oe) {
                 logger.fatal("startup.assemblerCannotBeInstantiated", oe);
                 throw oe;
             } catch (final Throwable t) {
-                final String msg = 
messages.message("startup.openejbEncounteredUnexpectedError");
+                final String msg = 
messages().message("startup.openejbEncounteredUnexpectedError");
                 logger.fatal(msg, t);
                 throw new OpenEJBException(msg, t);
             }
@@ -141,7 +142,7 @@ public final class OpenEJB {
                 logger.fatal("startup.assemblerFailedToInitialize", oe);
                 throw oe;
             } catch (final Throwable t) {
-                final String msg = 
messages.message("startup.assemblerEncounteredUnexpectedError");
+                final String msg = 
messages().message("startup.assemblerEncounteredUnexpectedError");
                 logger.fatal(msg, t);
                 throw new OpenEJBException(msg, t);
             }
@@ -152,14 +153,14 @@ public final class OpenEJB {
                 logger.fatal("startup.assemblerFailedToBuild", oe);
                 throw oe;
             } catch (final Throwable t) {
-                final String msg = 
messages.message("startup.assemblerEncounterUnexpectedBuildError");
+                final String msg = 
messages().message("startup.assemblerEncounterUnexpectedBuildError");
                 logger.fatal(msg, t);
                 throw new OpenEJBException(msg, t);
             }
 
             final ContainerSystem containerSystem = 
assembler.getContainerSystem();
             if (containerSystem == null) {
-                final String msg = 
messages.message("startup.assemblerReturnedNullContainer");
+                final String msg = 
messages().message("startup.assemblerReturnedNullContainer");
                 logger.fatal(msg);
                 throw new OpenEJBException(msg);
             }
@@ -233,7 +234,7 @@ public final class OpenEJB {
 
             final SecurityService securityService = 
assembler.getSecurityService();
             if (securityService == null) {
-                final String msg = 
messages.message("startup.assemblerReturnedNullSecurityService");
+                final String msg = 
messages().message("startup.assemblerReturnedNullSecurityService");
                 logger.fatal(msg);
                 throw new OpenEJBException(msg);
             } else {
@@ -243,7 +244,7 @@ public final class OpenEJB {
 
             final TransactionManager transactionManager = 
assembler.getTransactionManager();
             if (transactionManager == null) {
-                final String msg = 
messages.message("startup.assemblerReturnedNullTransactionManager");
+                final String msg = 
messages().message("startup.assemblerReturnedNullTransactionManager");
                 logger.fatal(msg);
                 throw new OpenEJBException(msg);
             } else {
@@ -278,7 +279,16 @@ public final class OpenEJB {
         init(props, null);
     }
 
-    private static final Messages messages = new 
Messages("org.apache.openejb.util.resources");
+    private static final AtomicReference<Messages> messagesRef = new 
AtomicReference<>();
+
+    private static Messages messages() { // only used for errors so lazy init 
is great
+        Messages m = messagesRef.get();
+        if (m == null) {
+            m = new Messages("org.apache.openejb.util.resources");
+            messagesRef.compareAndSet(null, m);
+        }
+        return m;
+    }
 
     /**
      * 2 usages
@@ -286,11 +296,11 @@ public final class OpenEJB {
     public static void init(final Properties initProps, final 
ApplicationServer appServer) throws OpenEJBException {
         if (isInitialized()) {
             if (instance != null) {
-                final String msg = 
messages.message("startup.alreadyInitialized");
+                final String msg = 
messages().message("startup.alreadyInitialized");
                 logger().error(msg, instance.initialized);
                 throw new OpenEJBException(msg, instance.initialized);
             } else {
-                final String msg = 
messages.message("startup.alreadyInitialized");
+                final String msg = 
messages().message("startup.alreadyInitialized");
                 logger().error(msg);
                 throw new OpenEJBException(msg);
             }

http://git-wip-us.apache.org/repos/asf/tomee/blob/7bc8519e/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
index 1a30f1a..0235c02 100644
--- 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
+++ 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
@@ -30,6 +30,7 @@ import org.apache.openejb.util.OpenEjbVersion;
 import org.apache.tomee.loader.TomcatHelper;
 
 import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -37,11 +38,15 @@ import java.lang.reflect.Modifier;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import static java.util.Arrays.asList;
+
 // this listener is the real tomee one (the OpenEJBListener is more tomcat 
oriented)
 // so it even changes the server info
 public class ServerListener implements LifecycleListener {
@@ -129,31 +134,35 @@ public class ServerListener implements LifecycleListener {
                 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);
-                        final boolean acc = addUrl.isAccessible();
-                        try {
-                            for (final File f : 
ProvisioningUtil.addAdditionalLibraries()) {
-                                addUrl(ucl, addUrl, f.toURI().toURL());
-                            }
+                try {
+                    final Collection<URL> files = new ArrayList<>();
+                    for (final File f : 
ProvisioningUtil.addAdditionalLibraries()) {
+                        files.add(f.toURI().toURL());
+                    }
+
+                    final ClassLoaderConfigurer configurer = 
QuickJarsTxtParser.parse(SystemInstance.get().getConf(QuickJarsTxtParser.FILE_NAME));
+                    if (configurer != null) {
+                        files.addAll(asList(configurer.additionalURLs()));
+                    }
 
-                            final File globalJarsTxt = 
SystemInstance.get().getConf(QuickJarsTxtParser.FILE_NAME);
-                            final ClassLoaderConfigurer configurer = 
QuickJarsTxtParser.parse(globalJarsTxt);
-                            if (configurer != null) {
-                                for (final URL f : 
configurer.additionalURLs()) {
-                                    addUrl(ucl, addUrl, f);
+                    if (!files.isEmpty() && 
URLClassLoader.class.isInstance(classLoader)) {
+                        final URLClassLoader ucl = 
URLClassLoader.class.cast(classLoader);
+                        try {
+                            final Method addUrl = 
URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
+                            final boolean acc = addUrl.isAccessible();
+                            try {
+                                for (final URL url : files) {
+                                    addUrl(ucl, addUrl, url);
                                 }
+                            } finally {
+                                addUrl.setAccessible(acc);
                             }
-                        } finally {
-                            addUrl.setAccessible(acc);
+                        } catch (final Exception e) {
+                            LOGGER.log(Level.SEVERE, e.getMessage(), e);
                         }
-                    } 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);
+                } catch (final IOException ex) {
+                    LOGGER.log(Level.SEVERE, ex.getMessage(), ex);
                 }
 
                 loader.initialize(properties);

Reply via email to