Hi Andy

please revert it since it was the first version of the code we had in
tomee jaxrs integration and needed to be refactored to match real
needs. If your issue is with wadl generator please do something
specific to wadlgenerator in configureFactory (if provider instanceof
wadlgenerator replace cxf one or sthg like that)



Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau




---------- Forwarded message ----------
From:  <[email protected]>
Date: 2014-02-17 14:12 GMT+01:00
Subject: svn commit: r1568973 - in /tomee/tomee/trunk:
server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
To: [email protected]


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