Author: rmannibucau
Date: Tue Aug 21 09:04:00 2012
New Revision: 1375434

URL: http://svn.apache.org/viewvc?rev=1375434&view=rev
Log:
small refactoring of warmup logic + enhancing the way ports are replaced in 
server.xml for (remote) arquillian adapters

Added:
    
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/QuickServerXmlParser.java
Modified:
    
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java

Added: 
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/QuickServerXmlParser.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/QuickServerXmlParser.java?rev=1375434&view=auto
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/QuickServerXmlParser.java
 (added)
+++ 
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/QuickServerXmlParser.java
 Tue Aug 21 09:04:00 2012
@@ -0,0 +1,91 @@
+package org.apache.openejb.arquillian.common;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class QuickServerXmlParser extends DefaultHandler {
+    private static final SAXParserFactory FACTORY = 
SAXParserFactory.newInstance();
+    static {
+        FACTORY.setNamespaceAware(true);
+        FACTORY.setValidating(false);
+    }
+
+    private static final String STOP_KEY = "STOP";
+    private static final String HTTP_KEY = "STOP";
+    private static final String AJP_KEY = "STOP";
+    private static final String DEFAULT_CONNECTOR_KEY = "HTTP";
+
+    public static final String DEFAULT_HTTP_PORT = "8080";
+    public static final String DEFAULT_STOP_PORT = "8005";
+    public static final String DEFAULT_AJP_PORT = "8009";
+
+    private final Map<String, String> ports = new TreeMap<String, 
String>(String.CASE_INSENSITIVE_ORDER);
+
+    public QuickServerXmlParser() {
+        ports.put(STOP_KEY, DEFAULT_STOP_PORT);
+        ports.put(HTTP_KEY, DEFAULT_HTTP_PORT);
+        ports.put(AJP_KEY, DEFAULT_AJP_PORT);
+    }
+
+    public static void main(String[] args) throws Exception {
+        System.out.println(parse(new File("/tmp/server.xml")));
+    }
+
+    @Override
+    public void startElement(final String uri, final String localName,
+                             final String qName, final Attributes attributes) 
throws SAXException {
+        if ("Server".equalsIgnoreCase(localName)) {
+            final String port = attributes.getValue("port");
+            if (port != null) {
+                ports.put(STOP_KEY, port);
+            } else {
+                ports.put(STOP_KEY, port);
+            }
+        } else if ("Connector".equalsIgnoreCase(localName)) {
+            String protocol = attributes.getValue("protocol");
+            if (protocol == null) {
+                protocol = DEFAULT_CONNECTOR_KEY;
+            } else if (protocol.contains("/")) {
+                protocol = protocol.substring(0, protocol.indexOf("/"));
+            }
+            final String port = attributes.getValue("port");
+            ports.put(protocol.toUpperCase(), port);
+        }
+    }
+
+    public static QuickServerXmlParser parse(final File serverXml) {
+        final QuickServerXmlParser handler = new QuickServerXmlParser();
+        try {
+            final SAXParser parser = FACTORY.newSAXParser();
+            parser.parse(serverXml, handler);
+        } catch (Exception e) {
+            // no-op: using defaults
+        }
+        return handler;
+    }
+
+    public String http() {
+        return ports.get(DEFAULT_HTTP_PORT);
+    }
+
+    public String ajp() {
+        return ports.get(DEFAULT_AJP_PORT);
+    }
+
+    public String stop() {
+        return ports.get(DEFAULT_STOP_PORT);
+    }
+
+    @Override
+    public String toString() {
+        return "QuickServerXmlParser" + ports;
+    }
+}

Modified: 
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java?rev=1375434&r1=1375433&r2=1375434&view=diff
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
 (original)
+++ 
openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
 Tue Aug 21 09:04:00 2012
@@ -48,10 +48,6 @@ import java.util.logging.Logger;
 public class Setup {
     private static final Logger LOGGER = 
Logger.getLogger(Setup.class.getName()); // JUL is used by arquillian so that's 
fine
 
-    public static final int DEFAULT_HTTP_PORT = 8080;
-    public static final int DEFAULT_STOP_PORT = 8005;
-    public static final int DEFAULT_AJP_PORT = 8009;
-
     public static void exportProperties(final File openejbHome, final 
TomEEConfiguration c) {
         System.setProperty("java.naming.provider.url", "http://"; + c.getHost() 
+ ":" + c.getHttpPort() + "/tomee/ejb");
         System.setProperty("connect.tries", "90");
@@ -63,23 +59,14 @@ public class Setup {
     }
 
     public static void updateServerXml(final File openejbHome, final int 
httpPort, final int stopPort, final int ajpPort) throws IOException {
+        final File sXml = new File(openejbHome, "conf" + File.separator + 
"server.xml");
+        final QuickServerXmlParser ports = QuickServerXmlParser.parse(sXml);
+
         final Map<String, String> replacements = new HashMap<String, String>();
-        replacements.put(Integer.toString(DEFAULT_HTTP_PORT), 
String.valueOf(httpPort));
-        replacements.put(Integer.toString(DEFAULT_STOP_PORT), 
String.valueOf(stopPort));
-        replacements.put(Integer.toString(DEFAULT_AJP_PORT), 
String.valueOf(ajpPort));
-        final String s = File.separator;
-        replace(replacements, new File(openejbHome, "conf" + s + 
"server.xml"));
-
-        // tmp
-        System.out.println("config http = " + httpPort);
-        System.out.println("config stop = " + stopPort);
-        System.out.println("server.xml:");
-        try {
-            System.out.println(org.apache.openejb.loader.IO.slurp(new 
File(openejbHome, "conf" + s + "server.xml")));
-        } catch (IOException e) {
-            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
-        }
-        // end tmp
+        replacements.put(ports.http(), String.valueOf(httpPort));
+        replacements.put(ports.stop(), String.valueOf(stopPort));
+        replacements.put(ports.ajp(), String.valueOf(ajpPort));
+        replace(replacements, sXml);
     }
 
     public static File findHome(File directory) {
@@ -264,7 +251,7 @@ public class Setup {
             final Method ajbPort = config.getClass().getMethod("getAjpPort");
             return (Integer) ajbPort.invoke(config);
         } catch (Exception e) {
-            return DEFAULT_AJP_PORT;
+            return Integer.parseInt(QuickServerXmlParser.DEFAULT_AJP_PORT);
         }
     }
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java?rev=1375434&r1=1375433&r2=1375434&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
 Tue Aug 21 09:04:00 2012
@@ -16,11 +16,10 @@
  */
 package org.apache.openejb;
 
-import java.util.concurrent.Semaphore;
-import org.apache.openejb.util.JuliLogStreamFactory;
-import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 
+import java.util.concurrent.Semaphore;
+
 /**
 * @version $Rev$ $Date$
 */
@@ -73,7 +72,7 @@ public class Core {
                 "org.apache.xbean.naming.reference.SimpleReference",
                 "org.apache.xbean.propertyeditor.PropertyEditors",
                 "org.apache.xbean.propertyeditor.ReferenceIdentityMap",
-                "org.apache.xbean.recipe.ReflectionUtil",
+                "org.apache.xbean.recipe.ReflectionUtil"
         };
 
         final Thread preloadMessages = new Thread() {
@@ -94,34 +93,32 @@ public class Core {
             Class.forName("org.apache.openejb.util.JuliLogStreamFactory", 
true, loader);
         } catch (Throwable e) {
             // no-op
-        } finally {
-            semaphore.release();
         }
 
-        for (final String className : classes) {
-            try {
-                semaphore.acquire();
-                final Thread thread = new Thread(new Runnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            Class.forName(className, true, loader);
-                        } catch (Throwable e) {
-                            // no-op
-                        } finally {
-                            semaphore.release();
+        final int part = classes.length / permits; // works since we have a 
pair number of classes
+        for (int i = 0; i < permits; i++) {
+            final int offset = i * part;
+            final Thread thread = new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        semaphore.acquire();
+                        for (int c = offset; c < offset + part; c++) {
+                            Class.forName(classes[c], true, loader);
                         }
+                    } catch (Throwable e) {
+                        // no-op
+                    } finally {
+                        semaphore.release();
                     }
-                });
-                thread.setDaemon(true);
-                thread.start();
-            } catch (InterruptedException e) {
-                Thread.interrupted();
-            }
+                }
+            });
+            thread.setDaemon(true);
+            thread.start();
         }
         try {
-            semaphore.acquire(permits);
             preloadMessages.join();
+            semaphore.acquire(permits);
         } catch (InterruptedException e) {
             Thread.interrupted();
         }


Reply via email to