You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/10/15 13:38:38 UTC

svn commit: r1398254 - in /openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote: RemoteTomEEConfiguration.java RemoteTomEEContainer.java

Author: rmannibucau
Date: Mon Oct 15 11:38:38 2012
New Revision: 1398254

URL: http://svn.apache.org/viewvc?rev=1398254&view=rev
Log:
TOMEE-467 adding CATALINA_OPTS to arquillian tomee remote in arquillian.xml

Modified:
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java?rev=1398254&r1=1398253&r2=1398254&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java Mon Oct 15 11:38:38 2012
@@ -41,6 +41,7 @@ public class RemoteTomEEConfiguration ex
     private boolean cleanOnStartUp;
     private boolean debug;
     private int debugPort = 5005;
+    private String CATALINA_OPTS = null; // using this format to match the script one
 
     public String getGroupId() {
         return groupId;
@@ -168,4 +169,12 @@ public class RemoteTomEEConfiguration ex
     public void setDebugPort(int debugPort) {
         this.debugPort = debugPort;
     }
+
+    public String getCATALINA_OPTS() {
+        return CATALINA_OPTS;
+    }
+
+    public void setCATALINA_OPTS(final String opts) {
+        this.CATALINA_OPTS = opts;
+    }
 }

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java?rev=1398254&r1=1398253&r2=1398254&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java Mon Oct 15 11:38:38 2012
@@ -27,6 +27,10 @@ import org.jboss.arquillian.container.sp
 import javax.naming.NamingException;
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.logging.Level;
@@ -74,7 +78,7 @@ public class RemoteTomEEContainer extend
             }
             container = new RemoteServer();
 
-            container.start();
+            container.start(args(), "start", true);
         } catch (Exception e) {
             logger.log(Level.SEVERE, "Unable to start remote container", e);
             throw new LifecycleException("Unable to start remote container:" + e.getMessage(), e);
@@ -87,6 +91,23 @@ public class RemoteTomEEContainer extend
         }
     }
 
+    private List<String> args() {
+        String opts = configuration.getCATALINA_OPTS();
+        if (opts == null || (opts = opts.trim()).isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        final List<String> splitOnSpace = new ArrayList<String>();
+        opts = opts.replace("\n", " ").trim();
+
+        final Iterator<String> it = new ArgsIterator(opts);
+        while (it.hasNext()) {
+            splitOnSpace.add(it.next());
+        }
+
+        return splitOnSpace;
+    }
+
     private static void resetSystemProperty(final String key, final String value) {
         if (value == null) {
             System.getProperties().remove(key);
@@ -181,4 +202,61 @@ public class RemoteTomEEContainer extend
             throw ne;
         }
     }
+
+    private static class ArgsIterator implements Iterator<String> {
+        private final String string;
+        private int currentIndex;
+
+        public ArgsIterator(final String opts) {
+            string = opts;
+            currentIndex = 0;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return string != null && currentIndex < string.length();
+        }
+
+        @Override
+        public String next() {
+            skipWhiteCharacters();
+
+            if (done()) {
+                throw new UnsupportedOperationException("No more element");
+            }
+
+            char endChar;
+            if (string.charAt(currentIndex) == '"') {
+                currentIndex++;
+                endChar = '"';
+            } else {
+                endChar = ' ';
+            }
+
+            final int start = currentIndex;
+            int end = string.indexOf(endChar, currentIndex + 1);
+            if (end <= 0) {
+                end = string.length();
+            }
+
+            currentIndex = end + 1;
+
+            return string.substring(start, end);
+        }
+
+        private void skipWhiteCharacters() {
+            while (!done() && (string.charAt(currentIndex) == ' ' || string.charAt(currentIndex) == '\t')) {
+                currentIndex++;
+            }
+        }
+
+        private boolean done() {
+            return currentIndex >= string.length();
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
 }