Author: andygumbrecht
Date: Mon Feb 17 13:12:50 2014
New Revision: 1568973
URL: http://svn.apache.org/r1568973
Log:
Visit https://issues.apache.org/jira/browse/TOMEE-1126.
Synchronization.
Modified:
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
Modified:
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1568973&r1=1568972&r2=1568973&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
(original)
+++
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
Mon Feb 17 13:12:50 2014
@@ -79,7 +79,15 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.net.HttpURLConnection;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.regex.Pattern;
@@ -120,7 +128,22 @@ public class CxfRsHttpListener implement
STATIC_CONTENT_TYPES.put("pdf", "application/pdf");
STATIC_CONTENT_TYPES.put("xsd", "application/xml");
- for (final ProviderInfo<RequestHandler> rh :
org.apache.cxf.jaxrs.provider.ProviderFactory.getSharedInstance().getRequestHandlers())
{
+ final String clazz =
SystemInstance.get().getProperty("openejb.cxf-rs.provider.classes", "default");
+ final org.apache.cxf.jaxrs.provider.ProviderFactory factory =
org.apache.cxf.jaxrs.provider.ProviderFactory.getSharedInstance();
+
+ if (!"default".equals(clazz)) {
+
+ final String[] classes = clazz.split(",");
+ for (final String aClass : classes) {
+ try {
+
factory.setUserProviders(Arrays.asList(Class.forName(clazz).newInstance()));
+ } catch (final Exception e) {
+ LOGGER.warning("Failed to load class: " + clazz + " - " +
e.getMessage());
+ }
+ }
+ }
+
+ for (final ProviderInfo<RequestHandler> rh :
factory.getRequestHandlers()) {
final RequestHandler provider = rh.getProvider();
if (WadlGenerator.class.isInstance(provider)) {
final WadlGenerator wadlGenerator =
WadlGenerator.class.cast(provider);
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=1568973&r1=1568972&r2=1568973&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
Mon Feb 17 13:12:50 2014
@@ -31,6 +31,7 @@ import org.apache.tomee.loader.TomcatHel
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -39,96 +40,99 @@ import java.util.logging.Logger;
public class ServerListener implements LifecycleListener {
private static final Logger LOGGER =
Logger.getLogger(ServerListener.class.getName());
- static private boolean listenerInstalled;
+ static private final AtomicBoolean listenerInstalled = new
AtomicBoolean(false);
- public void lifecycleEvent(LifecycleEvent event) {
+ public void lifecycleEvent(final LifecycleEvent event) {
if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType()) &&
StandardServer.class.isInstance(event.getSource())) {
installServerInfo();
}
- // only install once
- if (listenerInstalled ||
!Lifecycle.AFTER_INIT_EVENT.equals(event.getType())) return;
- if (!(event.getSource() instanceof StandardServer)) return;
+ synchronized (listenerInstalled) {
- try {
- final StandardServer server = (StandardServer) event.getSource();
-
- TomcatHelper.setServer(server);
-
- final Properties properties = new Properties();
- System.getProperties().setProperty("openejb.embedder.source",
getClass().getSimpleName());
- properties.setProperty("openejb.embedder.source",
getClass().getSimpleName());
+ // only install once
+ if (listenerInstalled.get() ||
!Lifecycle.AFTER_INIT_EVENT.equals(event.getType())) return;
+ if (!(event.getSource() instanceof StandardServer)) return;
+ try {
+ final StandardServer server = (StandardServer)
event.getSource();
- // if SystemInstance is already initialized, then return
- if (SystemInstance.isInitialized()) {
- return;
- }
-
- // set the openejb.loader property to tomcat-system
- properties.setProperty("openejb.loader", "tomcat-system");
-
- // Get the value of catalina.home and set it to openejb.home
- String catalinaHome = System.getProperty("catalina.home");
- properties.setProperty("openejb.home", catalinaHome);
+ TomcatHelper.setServer(server);
- //Sets system property for openejb.home
- System.setProperty("openejb.home", catalinaHome);
+ final Properties properties = new Properties();
+ System.getProperties().setProperty("openejb.embedder.source",
getClass().getSimpleName());
+ properties.setProperty("openejb.embedder.source",
getClass().getSimpleName());
- //get the value of catalina.base and set it to openejb.base
- String catalinaBase = System.getProperty("catalina.base");
- properties.setProperty("openejb.base", catalinaBase);
- //Sets system property for openejb.base
- System.setProperty("openejb.base", catalinaBase);
+ // if SystemInstance is already initialized, then return
+ if (SystemInstance.isInitialized()) {
+ return;
+ }
+ // set the openejb.loader property to tomcat-system
+ properties.setProperty("openejb.loader", "tomcat-system");
- // System.setProperty("tomcat.version", "x.y.z.w");
- // System.setProperty("tomcat.built", "mmm dd yyyy hh:mm:ss");
- // set the System properties, tomcat.version, tomcat.built
- try {
- ClassLoader classLoader =
ServerListener.class.getClassLoader();
- Properties tomcatServerInfo =
IO.readProperties(classLoader.getResourceAsStream("org/apache/catalina/util/ServerInfo.properties"),
new Properties());
+ // Get the value of catalina.home and set it to openejb.home
+ final String catalinaHome =
System.getProperty("catalina.home");
+ properties.setProperty("openejb.home", catalinaHome);
+
+ //Sets system property for openejb.home
+ System.setProperty("openejb.home", catalinaHome);
+
+ //get the value of catalina.base and set it to openejb.base
+ final String catalinaBase =
System.getProperty("catalina.base");
+ properties.setProperty("openejb.base", catalinaBase);
+
+ //Sets system property for openejb.base
+ System.setProperty("openejb.base", catalinaBase);
+
+
+ // System.setProperty("tomcat.version", "x.y.z.w");
+ // System.setProperty("tomcat.built", "mmm dd yyyy hh:mm:ss");
+ // set the System properties, tomcat.version, tomcat.built
+ try {
+ final ClassLoader classLoader =
ServerListener.class.getClassLoader();
+ final Properties tomcatServerInfo =
IO.readProperties(classLoader.getResourceAsStream("org/apache/catalina/util/ServerInfo.properties"),
new Properties());
+
+ String serverNumber =
tomcatServerInfo.getProperty("server.number");
+ if (serverNumber == null) {
+ // Tomcat5 only has server.info
+ final String serverInfo =
tomcatServerInfo.getProperty("server.info");
+ if (serverInfo != null) {
+ final int slash = serverInfo.indexOf('/');
+ serverNumber = serverInfo.substring(slash + 1);
+ }
+ }
+ if (serverNumber != null) {
+ System.setProperty("tomcat.version", serverNumber);
+ }
- String serverNumber =
tomcatServerInfo.getProperty("server.number");
- if (serverNumber == null) {
- // Tomcat5 only has server.info
- String serverInfo =
tomcatServerInfo.getProperty("server.info");
- if (serverInfo != null) {
- int slash = serverInfo.indexOf('/');
- serverNumber = serverInfo.substring(slash + 1);
+ final String serverBuilt =
tomcatServerInfo.getProperty("server.built");
+ if (serverBuilt != null) {
+ System.setProperty("tomcat.built", serverBuilt);
}
- }
- if (serverNumber != null) {
- System.setProperty("tomcat.version", serverNumber);
+ } catch (final Throwable e) {
+ // no-op
}
- String serverBuilt =
tomcatServerInfo.getProperty("server.built");
- if (serverBuilt != null) {
- System.setProperty("tomcat.built", serverBuilt);
+ // manage additional libraries
+ try {
+ ProvisioningUtil.addAdditionalLibraries();
+ } catch (final IOException e) {
+ // ignored
}
- } catch (Throwable e) {
- // no-op
- }
- // manage additional libraries
- try {
- ProvisioningUtil.addAdditionalLibraries();
- } catch (IOException e) {
- // ignored
- }
+ final TomcatLoader loader = new TomcatLoader();
+ loader.init(properties);
- TomcatLoader loader = new TomcatLoader();
- loader.init(properties);
-
- listenerInstalled = true;
- } catch (Exception e) {
- LOGGER.log(Level.SEVERE, "TomEE Listener can't start OpenEJB", e);
- // e.printStackTrace(System.err);
+ listenerInstalled.set(true);
+ } catch (final Exception e) {
+ LOGGER.log(Level.SEVERE, "TomEE Listener can't start OpenEJB",
e);
+ // e.printStackTrace(System.err);
+ }
}
}
- private void installServerInfo() {
+ private synchronized void installServerInfo() {
if (SystemInstance.get().getOptions().get("tomee.keep-server-info",
false)) {
return;
}
@@ -146,7 +150,7 @@ public class ServerListener implements L
final String version = OpenEjbVersion.get().getVersion();
final String tomeeVersion = (Integer.parseInt("" +
version.charAt(0)) - 3) + version.substring(1, version.length());
field.set(null, value.substring(0, slash) + " (TomEE)" +
value.substring(slash) + " (" + tomeeVersion + ")");
- } catch (Exception e) {
+ } catch (final Exception e) {
// no-op
} finally {
if (field != null) {