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 2014/03/21 07:57:03 UTC

svn commit: r1579890 - in /tomee/tomee/trunk: container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-loader/src/main/java/org/apache/openejb/loader/ maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ mave...

Author: rmannibucau
Date: Fri Mar 21 06:57:02 2014
New Revision: 1579890

URL: http://svn.apache.org/r1579890
Log:
TOMEE-1144 supporting full java run - no script

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
    tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Options.java
    tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ExecMojo.java
    tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/runner/ExecRunner.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java?rev=1579890&r1=1579889&r2=1579890&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java Fri Mar 21 06:57:02 2014
@@ -16,6 +16,12 @@
  */
 package org.apache.openejb.config;
 
+import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.Options;
+import org.apache.openejb.util.Join;
+import org.apache.openejb.util.Pipe;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -29,13 +35,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.loader.IO;
-import org.apache.openejb.loader.Options;
-import org.apache.openejb.util.Join;
-import org.apache.openejb.util.Pipe;
-
 /**
+ * NOTE: don't add inner classes or anonymous one or dependency without updating ExecMojo
+ *
  * @version $Rev$ $Date$
  */
 @SuppressWarnings("UseOfSystemOutOrSystemErr")
@@ -330,41 +332,6 @@ public class RemoteServer {
         }
     }
 
-    // debugging method (mainly for buildbot), don't let it activated when all is fine
-    private void kill3UNIXDebug() { //NOPMD
-        final Thread t = new Thread() {
-            @Override
-            public void run() {
-                setName("[DEBUG] Dump Observer");
-
-                boolean end = false;
-                int i = 0;
-                while (!end) {
-                    try {
-                        if (server == null) {
-                            throw new IllegalThreadStateException();
-                        }
-                        server.exitValue();
-                        end = true;
-                    } catch (final IllegalThreadStateException e) {
-                        i++;
-                        try {
-                            Thread.sleep(Integer.getInteger("sleep", 5000 * 60));
-                        } catch (final InterruptedException e1) {
-                            e1.printStackTrace();
-                        }
-                        if (i == 5) {
-                            kill3UNIX();
-                            i = 0;
-                        }
-                    }
-                }
-            }
-        };
-        t.setDaemon(true);
-        t.start();
-    }
-
     public void kill3UNIX() { // debug purpose only
         if (System.getProperty("os.name", "unknown").toLowerCase().startsWith("windows")) {
             return;
@@ -560,20 +527,22 @@ public class RemoteServer {
     static final List<Process> kill = new ArrayList<Process>();
 
     static {
-        Runtime.getRuntime().addShutdownHook(new Thread() {
-            @Override
-            public void run() {
-                for (final Process server : kill) {
-                    try {
-                        if (server != null) {
-                            server.destroy();
-                            server.waitFor();
-                        }
-                    } catch (final Throwable e) {
-                        //Ignore
+        Runtime.getRuntime().addShutdownHook(new CleanUpThread());
+    }
+
+    public static class CleanUpThread extends Thread {
+        @Override
+        public void run() {
+            for (final Process server : kill) {
+                try {
+                    if (server != null) {
+                        server.destroy();
+                        server.waitFor();
                     }
+                } catch (final Throwable e) {
+                    //Ignore
                 }
             }
-        });
+        }
     }
 }

Modified: tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Options.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Options.java?rev=1579890&r1=1579889&r2=1579890&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Options.java (original)
+++ tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Options.java Fri Mar 21 06:57:02 2014
@@ -333,7 +333,7 @@ public class Options {
         return sb.toString();
     }
 
-    private final static class NullOptions extends Options {
+    public final static class NullOptions extends Options {
 
         private Log logger;
 

Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ExecMojo.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ExecMojo.java?rev=1579890&r1=1579889&r2=1579890&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ExecMojo.java (original)
+++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ExecMojo.java Fri Mar 21 06:57:02 2014
@@ -25,13 +25,18 @@ import org.apache.maven.plugin.MojoFailu
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.config.RemoteServer;
 import org.apache.openejb.loader.Files;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.JarLocation;
 import org.apache.openejb.loader.LoaderRuntimeException;
+import org.apache.openejb.loader.Options;
 import org.apache.openejb.loader.Zips;
 import org.apache.openejb.maven.plugin.runner.ExecRunner;
+import org.apache.openejb.util.Join;
 import org.apache.openejb.util.Pipe;
+import org.apache.tomee.util.QuickServerXmlParser;
 import org.codehaus.plexus.archiver.jar.Manifest;
 import org.codehaus.plexus.util.IOUtil;
 
@@ -95,8 +100,19 @@ public class ExecMojo extends BuildTomEE
         config.put("distribution", distributionName);
         config.put("workingDir", runtimeWorkingDir);
         config.put("command", script);
-        config.put("catalinaOpts", toString(generateJVMArgs()));
+        final List<String> jvmArgs = generateJVMArgs();
+        config.put("catalinaOpts", toString(jvmArgs));
         config.put("timestamp", Long.toString(System.currentTimeMillis()));
+        // java only
+        final String cp = getAdditionalClasspath();
+        if (cp != null) {
+            config.put("additionalClasspath", cp);
+        }
+        config.put("shutdownCommand", tomeeShutdownCommand);
+        int i = 0;
+        for (final String jvmArg : jvmArgs) {
+            config.put("jvmArg." + i++, jvmArg);
+        }
 
         // create an executable jar with main runner and zipFile
         final FileOutputStream fileOutputStream = new FileOutputStream(execFile);
@@ -143,8 +159,12 @@ public class ExecMojo extends BuildTomEE
                     Files.class, Files.PatternFileFilter.class, Files.DeleteThread.class,
                     Files.FileRuntimeException.class, Files.FileDoesNotExistException.class, Files.NoopOutputStream.class,
                     LoaderRuntimeException.class,
-                    Pipe.class, IO.class, Zips.class, JarLocation.class
-            )) {
+                    Pipe.class, IO.class, Zips.class, JarLocation.class,
+                    RemoteServer.class, RemoteServer.CleanUpThread.class,
+                    OpenEJBRuntimeException.class, Join.class, QuickServerXmlParser.class,
+                    Options.class, Options.NullLog.class, Options.TomEEPropertyAdapter.class, Options.NullOptions.class,
+                    Options.Log.class
+                    )) {
                 final String name = clazz.getName().replace('.', '/') + ".class";
                 os.putArchiveEntry(new JarArchiveEntry(name));
                 IOUtils.copy(getClass().getResourceAsStream('/' + name), os);

Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/runner/ExecRunner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/runner/ExecRunner.java?rev=1579890&r1=1579889&r2=1579890&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/runner/ExecRunner.java (original)
+++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/runner/ExecRunner.java Fri Mar 21 06:57:02 2014
@@ -16,15 +16,19 @@
  */
 package org.apache.openejb.maven.plugin.runner;
 
+import org.apache.openejb.config.RemoteServer;
 import org.apache.openejb.loader.Files;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.Zips;
 import org.apache.openejb.util.Pipe;
+import org.apache.tomee.util.QuickServerXmlParser;
 
 import java.io.File;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Locale;
 import java.util.Properties;
 
@@ -33,7 +37,14 @@ import static java.util.Arrays.asList;
 public class ExecRunner {
     private static final String SH_BAT_AUTO = "[.sh|.bat]";
 
-    public static void main(final String[] args) throws Exception {
+    public static void main(final String[] rawArgs) throws Exception {
+        final String[] args;
+        if (rawArgs == null || rawArgs.length == 0) {
+            args = new String[] { "run" };
+        } else {
+            args = rawArgs;
+        }
+
         final Properties config = new Properties();
 
         final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
@@ -65,6 +76,14 @@ public class ExecRunner {
         if (extracted != null && extracted.length == 1) {
             distribOutput = extracted[0];
         }
+        final File[] scripts = new File(distribOutput, "conf").listFiles();
+        if (scripts != null) { // dont use filefilter to avoid dependency issue
+            for (final File f : scripts) {
+                if (f.getName().endsWith(".sh") && !f.canExecute()) {
+                    f.setExecutable(true, true);
+                }
+            }
+        }
 
         String cmd = config.getProperty("command");
         if (cmd.endsWith(SH_BAT_AUTO)) {
@@ -85,34 +104,58 @@ public class ExecRunner {
         }
 
         final Collection<String> params = new ArrayList<String>();
-        params.add(cmd);
-        if (args != null) {
+        if ("java".equals(cmd)) {
+            final QuickServerXmlParser parser = QuickServerXmlParser.parse(new File(distribOutput,"conf/server.xml"));
+
+            System.setProperty("openejb.home", distribOutput.getAbsolutePath());
+            System.setProperty("server.shutdown.port", parser.stop());
+            System.setProperty("server.shutdown.command", config.getProperty("shutdownCommand"));
+
+            final RemoteServer server = new RemoteServer();
+            if (config.containsKey("additionalClasspath")) {
+                server.setAdditionalClasspath(config.getProperty("additionalClasspath"));
+            }
+
+            final List<String> jvmArgs = new LinkedList<String>();
+            for (final String k : config.stringPropertyNames()) {
+                if (k.startsWith("jvmArg.")) {
+                    jvmArgs.add(config.getProperty(k));
+                }
+            }
+
+            if ("run".equals(args[0])) {
+                args[0] = "start";
+            }
+            server.start(jvmArgs, args[0], true);
+            server.getServer().waitFor();
+        } else {
+            params.add(cmd);
             params.addAll(asList(args));
-        }
 
-        final ProcessBuilder builder = new ProcessBuilder(params.toArray(new String[params.size()])).directory(distribOutput);
+            final ProcessBuilder builder = new ProcessBuilder(params.toArray(new String[params.size()])).directory(distribOutput);
 
-        final String catalinaOpts = config.getProperty("catalinaOpts");
-        if (catalinaOpts != null) { // inherit from existing env
-            builder.environment().put("CATALINA_OPTS", catalinaOpts);
-        }
+            final String catalinaOpts = config.getProperty("catalinaOpts");
+            if (catalinaOpts != null) { // inherit from existing env
+                builder.environment().put("CATALINA_OPTS", catalinaOpts);
+            }
 
-        boolean redirectOut = false;
-        try { // java >= 7
-            ProcessBuilder.class.getDeclaredMethod("inheritIO").invoke(builder);
-        } catch (final Throwable th){ // java 6
-            redirectOut = true;
-        }
+            boolean redirectOut = false;
+            try { // java >= 7
+                ProcessBuilder.class.getDeclaredMethod("inheritIO").invoke(builder);
+            } catch (final Throwable th){ // java 6
+                redirectOut = true;
+            }
+
+            final Process process = builder.start();
+            if (redirectOut) {
+                Pipe.pipe(process);
+            }
 
-        final Process process = builder.start();
-        if (redirectOut) {
-            Pipe.pipe(process);
+            process.waitFor();
         }
 
-        process.waitFor();
         System.out.flush();
         System.err.flush();
-        System.out.println("Exit status: " + process.exitValue());
     }
 
     private ExecRunner() {