You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2014/02/17 14:12:51 UTC

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

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



Re: 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

Posted by Jean-Louis MONTEIRO <je...@gmail.com>.
Ok, let's retry :D
I wanted to say, with Server Events (@Observes), you can maybe also add
some configuration.

JLouis


2014-02-17 14:44 GMT+01:00 Jean-Louis MONTEIRO <je...@gmail.com>:

> but +1 with Romain.
>
> JLouis
>
>
> 2014-02-17 14:43 GMT+01:00 Jean-Louis MONTEIRO <je...@gmail.com>:
>
> With even it's even simpler I guess.
>>
>> JLouis
>>
>>
>> 2014-02-17 14:33 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
>>
>> 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:  <an...@apache.org>
>>> 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: commits@tomee.apache.org
>>>
>>>
>>> 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) {
>>>
>>
>>
>>
>> --
>> Jean-Louis
>>
>
>
>
> --
> Jean-Louis
>



-- 
Jean-Louis

Re: 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

Posted by Jean-Louis MONTEIRO <je...@gmail.com>.
but +1 with Romain.

JLouis


2014-02-17 14:43 GMT+01:00 Jean-Louis MONTEIRO <je...@gmail.com>:

> With even it's even simpler I guess.
>
> JLouis
>
>
> 2014-02-17 14:33 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> 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:  <an...@apache.org>
>> 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: commits@tomee.apache.org
>>
>>
>> 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) {
>>
>
>
>
> --
> Jean-Louis
>



-- 
Jean-Louis

Re: 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

Posted by Jean-Louis MONTEIRO <je...@gmail.com>.
With even it's even simpler I guess.

JLouis


2014-02-17 14:33 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:

> 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:  <an...@apache.org>
> 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: commits@tomee.apache.org
>
>
> 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) {
>



-- 
Jean-Louis

Fwd: 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

Posted by Romain Manni-Bucau <rm...@gmail.com>.
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:  <an...@apache.org>
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: commits@tomee.apache.org


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