You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/06/17 15:22:11 UTC
tomee git commit: another explicit instantiation + lazy creation of
Messages in Instance since it is 100% error messages
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 <rm...@apache.org>
Authored: Wed Jun 17 15:22:04 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
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);