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) {


Reply via email to