You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/11/04 17:45:25 UTC

svn commit: r1405584 - in /openejb/trunk/openejb: arquillian/arquillian-common/ arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/ arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/ ...

Author: dblevins
Date: Sun Nov  4 16:45:25 2012
New Revision: 1405584

URL: http://svn.apache.org/viewvc?rev=1405584&view=rev
Log:
TOMEE-519 - UnpackWars true/false added to arquillian.xml options
TOMEE-517 - Possible conflict with arquillian.xml provided properties
TOMEE-520 - Some paths not correct for Windows in TomEE Remote Arquillian Adapter
Misc improvements

Modified:
    openejb/trunk/openejb/arquillian/arquillian-common/pom.xml
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
    openejb/trunk/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/QuickServerXmlParser.java

Modified: openejb/trunk/openejb/arquillian/arquillian-common/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-common/pom.xml?rev=1405584&r1=1405583&r2=1405584&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-common/pom.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-common/pom.xml Sun Nov  4 16:45:25 2012
@@ -47,5 +47,10 @@
       <artifactId>arquillian-container-spi</artifactId>
       <version>${version.arquillian}</version>
     </dependency>
+    <dependency>
+      <groupId>org.codehaus.swizzle</groupId>
+      <artifactId>swizzle-stream</artifactId>
+      <version>1.6.1</version>
+    </dependency>
   </dependencies>
 </project>

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=1405584&r1=1405583&r2=1405584&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 Sun Nov  4 16:45:25 2012
@@ -20,6 +20,7 @@ import org.apache.openejb.loader.Provisi
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.JarExtractor;
 import org.apache.tomee.util.QuickServerXmlParser;
+import org.codehaus.swizzle.stream.ReplaceStringsInputStream;
 import org.jboss.arquillian.container.spi.client.container.LifecycleException;
 import org.jboss.shrinkwrap.api.ArchivePaths;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
@@ -27,23 +28,16 @@ import org.jboss.shrinkwrap.api.asset.St
 import org.jboss.shrinkwrap.api.exporter.ZipExporter;
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
 import java.lang.reflect.Method;
 import java.net.Socket;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
+import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -52,10 +46,10 @@ 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 String TOMEE_BEAN_DISCOVERER_JAR = "lib/arquillian-tomee-bean-discoverer.jar";
+    public static final String TOMEE_BEAN_DISCOVERER_JAR = "lib" + File.separator + "arquillian-tomee-bean-discoverer.jar";
     private static final String DEFAULT_MEM_CONFIG = "-Xmx512m -Xms256m -XX:PermSize=64m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m";
 
-    public static void exportProperties(final File openejbHome, final TomEEConfiguration c, final boolean defaultMem) {
+    public static void exportProperties(final File tomeeHome, final TomEEConfiguration c, final boolean defaultMem) {
         System.setProperty("java.naming.provider.url", "http://" + c.getHost() + ":" + c.getHttpPort() + "/tomee/ejb");
         System.setProperty("connect.tries", "90");
         System.setProperty("server.http.port", String.valueOf(c.getHttpPort()));
@@ -65,19 +59,26 @@ public class Setup {
         } else {
             System.setProperty("java.opts", "-Dtomee.httpPort=" + c.getHttpPort());
         }
-        System.setProperty("openejb.home", openejbHome.getAbsolutePath());
-        System.setProperty("tomee.home", openejbHome.getAbsolutePath());
+        System.setProperty("openejb.home", tomeeHome.getAbsolutePath());
+        System.setProperty("tomee.home", tomeeHome.getAbsolutePath());
     }
 
-    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);
+    public static void updateServerXml(File tomeeHome, TomEEConfiguration configuration) throws IOException {
+        final File serverXml = Files.path(tomeeHome, "conf", "server.xml");
+        final QuickServerXmlParser ports = QuickServerXmlParser.parse(serverXml);
 
         final Map<String, String> replacements = new HashMap<String, String>();
-        replacements.put(ports.http(), String.valueOf(httpPort));
-        replacements.put(ports.stop(), String.valueOf(stopPort));
-        replacements.put(ports.ajp(), String.valueOf(ajpPort));
-        replace(replacements, sXml);
+        replacements.put(ports.http(), String.valueOf(configuration.getHttpPort()));
+        replacements.put(ports.stop(), String.valueOf(configuration.getStopPort()));
+        replacements.put(ports.ajp(), String.valueOf(ajpPort(configuration)));
+
+        if (configuration.isUnpackWars()) {
+            replacements.put("unpackWARs=\"false\"", "unpackWARs=\"true\"");
+        } else {
+            replacements.put("unpackWARs=\"true\"", "unpackWARs=\"false\"");
+        }
+
+        replace(replacements, serverXml);
     }
 
     public static File findHome(File directory) {
@@ -164,68 +165,21 @@ public class Setup {
     }
 
     public static void replace(final Map<String, String> replacements, final File file) throws IOException {
-        BufferedReader reader = null;
-        PrintWriter writer = null;
 
-        try {
-            final File tmpFile = copyToTempFile(file);
-            reader = new BufferedReader(new FileReader(tmpFile));
-            writer = new PrintWriter(new FileWriter(file));
-            String line;
-
-            while ((line = reader.readLine()) != null) {
-                final Iterator<String> iterator = replacements.keySet().iterator();
-                while (iterator.hasNext()) {
-                    final String pattern = iterator.next();
-                    final String replacement = replacements.get(pattern);
+        InputStream in = IO.read(file);
+        in = new ReplaceStringsInputStream(in, replacements);
 
-                    line = line.replaceAll(pattern, replacement);
-                }
+        final String data = IO.slurp(in);
 
-                writer.println(line);
-            }
-        } finally {
-            if (reader != null) {
-                reader.close();
-            }
+        IO.copy(data.getBytes(), file);
 
-            if (writer != null) {
-                writer.close();
-            }
-        }
         if (LOGGER.isLoggable(Level.FINE)) {
-            IO.copy(file, System.out);
+            IO.copy(data.getBytes(), System.out);
         }
     }
 
-    private static File copyToTempFile(final File file) throws IOException {
-        InputStream is = null;
-        OutputStream os = null;
-
-        File tmpFile;
-        try {
-            tmpFile = File.createTempFile("oejb", ".fil");
-            tmpFile.deleteOnExit();
-
-            is = new FileInputStream(file);
-            os = new FileOutputStream(tmpFile);
-
-            IO.copy(is, os);
-        } finally {
-            if (is != null) {
-                is.close();
-            }
-
-            if (os != null) {
-                os.close();
-            }
-        }
-
-        return tmpFile;
-    }
-
-    public static void removeUselessWebapps(final File openejbHome) {
-        final File webapps = new File(openejbHome, "webapps");
+    public static void removeUselessWebapps(final File tomeeHome) {
+        final File webapps = new File(tomeeHome, "webapps");
         if (webapps.isDirectory()) {
             final File[] files = webapps.listFiles();
             if (files != null) {
@@ -239,23 +193,26 @@ public class Setup {
         }
     }
 
-    public static void configureServerXml(final File openejbHome, final TomEEConfiguration configuration) throws IOException {
+    public static void configureServerXml(final File tomeeHome, final TomEEConfiguration configuration) throws IOException {
+
         if (configuration.getServerXml() != null) {
-            final File sXml = new File(configuration.getServerXml());
-            if (!sXml.exists()) {
-                LOGGER.severe("provided server.xml doesn't exist: '" + sXml.getPath() + "'");
+
+            final File serverXml = new File(configuration.getServerXml());
+
+            if (!serverXml.exists()) {
+                LOGGER.severe("Provided server.xml doesn't exist: '" + serverXml.getPath() + "'");
             } else {
-                final FileOutputStream fos = new FileOutputStream(new File(openejbHome, "conf/server.xml"));
-                try {
-                    IO.copy(sXml, fos);
-                } finally {
-                    IO.close(fos);
-                }
-                configuration.setStopPort(Integer.parseInt(QuickServerXmlParser.parse(sXml).stop()));
+
+                // Read in the contents to memory so we can avoid re-reading for parsing
+                final String data = IO.slurp(serverXml);
+
+                IO.copy(data.getBytes(), Files.path(tomeeHome, "conf", "server.xml"));
+                configuration.setStopPort(Integer.parseInt(QuickServerXmlParser.parse(data).stop()));
+
                 return; // in this case we don't want to override the conf
             }
         }
-        Setup.updateServerXml(openejbHome, configuration.getHttpPort(), configuration.getStopPort(), ajpPort(configuration));
+        updateServerXml(tomeeHome, configuration);
     }
 
     private static int ajpPort(final TomEEConfiguration config) {
@@ -267,58 +224,57 @@ public class Setup {
         }
     }
 
-    public static void configureSystemProperties(final File openejbHome, final TomEEConfiguration configuration) {
-        final StringBuilder builder = new StringBuilder();
-        final File systemProperties = new File(openejbHome, "conf/system.properties");
-        if (systemProperties.exists()) {
+    public static void configureSystemProperties(final File tomeeHome, final TomEEConfiguration configuration) {
+        final File file = Files.path(tomeeHome, "conf", "system.properties");
+
+        // Must use an actual properties object to avoid duplicate keys
+        final Properties properties = new Properties();
+
+        if (file.exists()) {
             try {
-                builder.append(org.apache.openejb.loader.IO.slurp(systemProperties));
+                IO.readProperties(file, properties);
             } catch (IOException e) {
-                LOGGER.log(Level.SEVERE, "can't read " + systemProperties.getAbsolutePath(), e);
+                LOGGER.log(Level.SEVERE, "Can't read " + file.getAbsolutePath(), e);
+            }
+        }
+
+        if (configuration.getProperties() != null) {
+            try {
+                final InputStream bytes = IO.read(configuration.getProperties().getBytes());
+                IO.readProperties(bytes, properties);
+            } catch (IOException e) {
+                LOGGER.log(Level.SEVERE, "Can't parse <property name=\"properties\"> value '" + configuration.getProperties() + "'", e);
             }
         }
-        builder.append("\n").append(configuration.systemProperties());
 
         if (configuration.isQuickSession()) {
-            builder.append("\nopenejb.session.manager=org.apache.tomee.catalina.session.QuickSessionManager");
+            properties.put("openejb.session.manager", "org.apache.tomee.catalina.session.QuickSessionManager");
         }
-        builder.append("\n");
 
-        FileWriter writer = null;
         try {
-            writer = new FileWriter(systemProperties);
-            writer.write(builder.toString());
+            IO.writeProperties(file, properties);
         } catch (IOException e) {
-            LOGGER.log(Level.SEVERE, "can't save system properties " + systemProperties.getAbsolutePath(), e);
-            return;
-        } finally {
-            try {
-                final IOException ioe = IO.close(writer);
-                if (ioe != null) {
-                    LOGGER.log(Level.SEVERE, "can't save system properties " + systemProperties.getAbsolutePath(), ioe);
-                }
-            } catch (IOException ignored) {
-                // no-op
-            }
+            LOGGER.log(Level.SEVERE, "Can't save system properties " + file.getAbsolutePath(), e);
         }
     }
 
-    public static void synchronizeFolder(final File openejbHome, final String src, final String dir) {
+
+    public static void synchronizeFolder(final File tomeeHome, final String src, final String dir) {
         if (src != null && !src.isEmpty()) {
             final File confSrc = new File(src);
             if (confSrc.exists()) {
-                final File conf = new File(openejbHome, dir);
+                final File conf = new File(tomeeHome, dir);
                 final Collection<File> files = org.apache.openejb.loader.Files.collect(confSrc, new DirectFileOnlyFilter(confSrc));
                 files.remove(confSrc);
                 for (File f : files) {
                     try {
                         org.apache.openejb.loader.IO.copy(f, new File(conf, relativize(f, confSrc)));
                     } catch (Exception e) {
-                        LOGGER.log(Level.WARNING, "ignoring copy of " + f.getAbsolutePath(), e);
+                        LOGGER.log(Level.WARNING, "Ignoring copy of " + f.getAbsolutePath(), e);
                     }
                 }
             } else {
-                LOGGER.warning("can't find " + confSrc.getAbsolutePath());
+                LOGGER.warning("Can't find " + confSrc.getAbsolutePath());
             }
         }
     }
@@ -340,22 +296,6 @@ public class Setup {
         Files.delete(destination);
     }
 
-    private static class TrueFileFilter implements FileFilter {
-        private static TrueFileFilter INSTANCE = null;
-
-        public static TrueFileFilter instance() {
-            if (INSTANCE == null) {
-                INSTANCE = new TrueFileFilter();
-            }
-            return INSTANCE;
-        }
-
-        @Override
-        public boolean accept(final File pathname) {
-            return true;
-        }
-    }
-
     private static class DirectFileOnlyFilter implements FileFilter {
         private final File accepted;
 

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java?rev=1405584&r1=1405583&r2=1405584&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java Sun Nov  4 16:45:25 2012
@@ -37,6 +37,15 @@ public class TomEEConfiguration implemen
     protected String properties = "";
     protected String portRange = ""; // only used if port < 0, empty means whatever, can be "1024-65535"
     protected boolean quickSession = true;
+    protected boolean unpackWars = true;
+
+    public boolean isUnpackWars() {
+        return unpackWars;
+    }
+
+    public void setUnpackWars(boolean unpackWars) {
+        this.unpackWars = unpackWars;
+    }
 
     public int getHttpPort() {
         return httpPort;

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=1405584&r1=1405583&r2=1405584&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 Sun Nov  4 16:45:25 2012
@@ -26,7 +26,6 @@ import org.jboss.arquillian.container.sp
 
 import javax.naming.NamingException;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -34,6 +33,7 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.TreeMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -82,6 +82,7 @@ public class RemoteTomEEContainer extend
 
             container.setAdditionalClasspath(addOneLineFormatter(tomeeHome));
             container.start(args(), "start", true);
+            container.killOnExit();
         } catch (Exception e) {
             logger.log(Level.SEVERE, "Unable to start remote container", e);
             throw new LifecycleException("Unable to start remote container:" + e.getMessage(), e);
@@ -98,7 +99,7 @@ public class RemoteTomEEContainer extend
         final String name = SimpleTomEEFormatter.class.getPackage().getName().replace('.', '/') + "/" + SimpleTomEEFormatter.class.getSimpleName() + ".class";
         final InputStream is = getClass().getResourceAsStream("/" + name);
         if (is != null) {
-            final File parent = new File(home, "bin/classes");
+            final File parent = Files.path(home, "bin", "classes");
             final File destination = new File(parent, name);
             if (!destination.getParentFile().mkdirs()) {
                 LOGGER.warning("Can't create " + destination.getPath());
@@ -179,9 +180,8 @@ public class RemoteTomEEContainer extend
         Setup.synchronizeFolder(tomeeHome, configuration.getBin(), "bin");
         Setup.synchronizeFolder(tomeeHome, configuration.getLib(), "lib");
 
-        Setup.configureSystemProperties(tomeeHome, configuration);
-
         final String opts = configuration.getCatalina_opts();
+
         Setup.exportProperties(tomeeHome, configuration, opts == null || (!opts.contains("-Xm") && !opts.matches(".*-XX:[^=]*Size=.*")));
         Setup.installArquillianBeanDiscoverer(tomeeHome);
 
@@ -189,29 +189,16 @@ public class RemoteTomEEContainer extend
             Setup.removeUselessWebapps(tomeeHome);
         }
 
-        if (configuration.isSimpleLog()) {
-            boolean doIt = true;
-            if (configuration.getConf() != null) { // let the user override it
-                final File confFolder = new File(configuration.getConf());
-                if (confFolder.exists() && new File(confFolder, "logging.properties").exists()) {
-                    doIt = false;
-                }
-            }
+        if (configuration.isSimpleLog() && noLoggingConfigProvided()) {
+            final File loggingProperties = Files.path(tomeeHome, "conf", "logging.properties");
 
-            if (doIt) {
-                FileWriter writer = null;
-                try {
-                    writer = new FileWriter(new File(tomeeHome, "conf/logging.properties"));
-                    writer.write("handlers = java.util.logging.ConsoleHandler\n" +
-                            ".handlers = java.util.logging.ConsoleHandler\n" +
-                            "java.util.logging.ConsoleHandler.level = INFO\n" +
-                            "java.util.logging.ConsoleHandler.formatter = " + SimpleTomEEFormatter.class.getName());
-                } catch (IOException ioe) {
-                    // no-op
-                } finally {
-                    IO.closeSilently(writer);
-                }
-            }
+            final Properties logging = new Properties();
+            logging.put("handlers", "java.util.logging.ConsoleHandler");
+            logging.put(".handlers", "java.util.logging.ConsoleHandler");
+            logging.put("java.util.logging.ConsoleHandler.level", "INFO");
+            logging.put("java.util.logging.ConsoleHandler.formatter", SimpleTomEEFormatter.class.getName());
+
+            IO.writeProperties(loggingProperties, logging);
         }
 
         if (logger.isLoggable(Level.FINE)) {
@@ -222,6 +209,14 @@ public class RemoteTomEEContainer extend
         }
     }
 
+    private boolean noLoggingConfigProvided() {
+        if (configuration.getConf() == null) return true;
+
+        final File conf = new File(configuration.getConf());
+
+        return !(conf.exists() && new File(conf, "logging.properties").exists());
+    }
+
     @Override
     public void stop() throws LifecycleException {
         // only stop the container if we started it

Modified: openejb/trunk/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/QuickServerXmlParser.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/QuickServerXmlParser.java?rev=1405584&r1=1405583&r2=1405584&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/QuickServerXmlParser.java (original)
+++ openejb/trunk/openejb/tomee/tomee-util/src/main/java/org/apache/tomee/util/QuickServerXmlParser.java Sun Nov  4 16:45:25 2012
@@ -22,6 +22,7 @@ import org.xml.sax.helpers.DefaultHandle
 
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.util.Map;
 import java.util.TreeMap;
@@ -106,6 +107,17 @@ public class QuickServerXmlParser extend
         return handler;
     }
 
+    public static QuickServerXmlParser parse(final String serverXmlContents) {
+        final QuickServerXmlParser handler = new QuickServerXmlParser();
+        try {
+            final SAXParser parser = FACTORY.newSAXParser();
+            parser.parse(new ByteArrayInputStream(serverXmlContents.getBytes()), handler);
+        } catch (Exception e) {
+            // no-op: using defaults
+        }
+        return handler;
+    }
+
     public String http() {
         return value(HTTP_KEY, DEFAULT_HTTP_PORT);
     }