but +1 with Romain. JLouis
2014-02-17 14:43 GMT+01:00 Jean-Louis MONTEIRO <[email protected]>: > With even it's even simpler I guess. > > JLouis > > > 2014-02-17 14:33 GMT+01:00 Romain Manni-Bucau <[email protected]>: > > 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) { >> > > > > -- > Jean-Louis > -- Jean-Louis
