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();
}