Repository: tomee
Updated Branches:
  refs/heads/tomee-7.1.x ab8dd10a2 -> 01fb28e1a


TOMEE-2253 - tomee.sh -version not working properly with Java 11


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/155fa669
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/155fa669
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/155fa669

Branch: refs/heads/tomee-7.1.x
Commit: 155fa669a5ddab7d10b5c440fa4da6f0ea0c5046
Parents: ab8dd10
Author: Daniel Cunha (soro) <daniels...@apache.org>
Authored: Tue Oct 23 17:29:37 2018 -0300
Committer: Daniel Cunha (soro) <daniels...@apache.org>
Committed: Tue Dec 4 14:09:01 2018 -0300

----------------------------------------------------------------------
 .../java/org/apache/openejb/cli/Bootstrap.java  |  44 +--
 .../openejb/loader/BasicURLClassPath.java       |   4 +-
 tomee/apache-tomee/pom.xml                      |  12 +
 .../src/test/java/org/apache/tomee/Test.java    |  24 ++
 .../java/org/apache/tomee/TestCommand1.java     |  25 ++
 .../java/org/apache/tomee/TestCommand2.java     |  26 ++
 .../test/java/org/apache/tomee/TomEECliIT.java  | 272 +++++++++++++++++++
 7 files changed, 385 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java 
b/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java
index 98f8741..0b9f26c 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java
@@ -17,7 +17,7 @@
 
 package org.apache.openejb.cli;
 
-import org.apache.openejb.loader.ClassPath;
+import org.apache.openejb.loader.BasicURLClassPath;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemClassPath;
 import org.apache.openejb.util.JavaSecurityManagers;
@@ -28,8 +28,11 @@ import java.io.File;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
 import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.StringTokenizer;
 
+import static org.apache.openejb.loader.JarLocation.jarLocation;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -87,13 +90,14 @@ public class Bootstrap {
         JavaSecurityManagers.setSystemProperty(prop, val);
     }
 
-    private static ClassLoader setupClasspath() {
+    private static URLClassLoader setupClasspath() {
         final String base = 
JavaSecurityManagers.getSystemProperty(OPENEJB_BASE_PROPERTY_NAME, "");
         final String home = 
JavaSecurityManagers.getSystemProperty("catalina.home", 
JavaSecurityManagers.getSystemProperty(OPENEJB_HOME_PROPERTY_NAME, base));
         try {
             final File lib = new File(home + File.separator + "lib");
-            final ClassPath systemCP = new SystemClassPath();
-            systemCP.getClassLoader();
+            final BasicURLClassPath.CustomizableURLClassLoader 
dynamicURLClassLoader =
+                    new 
BasicURLClassPath.CustomizableURLClassLoader(ClassLoader.getSystemClassLoader());
+
             File config = new File(base, "conf/catalina.properties");
             if (!config.isFile()) {
                 config = new File(home, "conf/catalina.properties");
@@ -116,25 +120,25 @@ public class Bootstrap {
                     if (repository.endsWith("*.jar")) {
                         final File dir = new File(repository.substring(0, 
repository.length() - "*.jar".length()));
                         if (dir.isDirectory()) {
-                            systemCP.addJarsToPath(dir);
+                            dynamicURLClassLoader.add(dir.toURI().toURL());
                         }
                     } else if (repository.endsWith(".jar")) {
                         final File file = new File(repository);
                         if (file.isFile()) {
-                            systemCP.addJarToPath(file.toURI().toURL());
+                            dynamicURLClassLoader.add(file.toURI().toURL());
                         }
                     } else {
                         final File dir = new File(repository);
                         if (dir.isDirectory()) {
-                            systemCP.addJarToPath(dir.toURI().toURL());
+                            dynamicURLClassLoader.add(dir.toURI().toURL());
                         }
                     }
                 }
             } else {
-                systemCP.addJarsToPath(lib);
-                systemCP.addJarToPath(lib.toURI().toURL());
+                dynamicURLClassLoader.add(lib.toURI().toURL());
             }
-            return systemCP.getClassLoader();
+
+            return dynamicURLClassLoader;
         } catch (final Exception e) {
             System.err.println("Error setting up the classpath: " + 
e.getClass() + ": " + e.getMessage());
             e.printStackTrace();
@@ -146,17 +150,18 @@ public class Bootstrap {
      * Read commands from BASE_PATH (using XBean's ResourceFinder) and execute 
the one specified on the command line
      */
     public static void main(final String[] args) throws Exception {
-        setupHome(args);
-        final ClassLoader loader = setupClasspath();
-        if (loader != null) {
-            Thread.currentThread().setContextClassLoader(loader);
-            if (loader != ClassLoader.getSystemClassLoader()) {
-                
System.setProperty("openejb.classloader.first.disallow-system-loading", "true");
+        try (final URLClassLoader loader = setupClasspath()) {
+            setupHome(args);
+
+            if (loader != null) {
+                Thread.currentThread().setContextClassLoader(loader);
+                if (loader != ClassLoader.getSystemClassLoader()) {
+                    
System.setProperty("openejb.classloader.first.disallow-system-loading", "true");
+                }
             }
-        }
 
-        final Class<?> clazz = (loader == null ? 
Bootstrap.class.getClassLoader() : 
loader).loadClass(OPENEJB_CLI_MAIN_CLASS_NAME);
-        try {
+            final Class<?> clazz = (loader == null ? 
Bootstrap.class.getClassLoader() : 
loader).loadClass(OPENEJB_CLI_MAIN_CLASS_NAME);
+
             final Object main = clazz.getConstructor().newInstance();
             main.getClass().getMethod("main", String[].class).invoke(main, new 
Object[]{args});
         } catch (final InvocationTargetException e) {
@@ -173,5 +178,4 @@ public class Bootstrap {
             throw new IllegalStateException(cause);
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
 
b/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
index d459664..e8acf96 100644
--- 
a/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
+++ 
b/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
@@ -142,12 +142,12 @@ public abstract class BasicURLClassPath implements 
ClassPath {
         return ucpField;
     }
 
-    protected static class CustomizableURLClassLoader extends URLClassLoader {
+    public static class CustomizableURLClassLoader extends URLClassLoader {
         static {
             ClassLoader.registerAsParallelCapable();
         }
 
-        protected CustomizableURLClassLoader(final ClassLoader parent) {
+        public CustomizableURLClassLoader(final ClassLoader parent) {
             super(new URL[0], parent);
         }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/tomee/apache-tomee/pom.xml
----------------------------------------------------------------------
diff --git a/tomee/apache-tomee/pom.xml b/tomee/apache-tomee/pom.xml
index 258634a..1d3b325 100644
--- a/tomee/apache-tomee/pom.xml
+++ b/tomee/apache-tomee/pom.xml
@@ -50,6 +50,18 @@
       <scope>test</scope>
     </dependency>
     <dependency>
+      <groupId>org.jboss.shrinkwrap</groupId>
+      <artifactId>shrinkwrap-api</artifactId>
+      <version>1.2.6</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap</groupId>
+      <artifactId>shrinkwrap-impl-base</artifactId>
+      <version>1.2.6</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>jline</groupId>
       <artifactId>jline</artifactId>
       <scope>provided</scope>

http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/tomee/apache-tomee/src/test/java/org/apache/tomee/Test.java
----------------------------------------------------------------------
diff --git a/tomee/apache-tomee/src/test/java/org/apache/tomee/Test.java 
b/tomee/apache-tomee/src/test/java/org/apache/tomee/Test.java
new file mode 100644
index 0000000..c788582
--- /dev/null
+++ b/tomee/apache-tomee/src/test/java/org/apache/tomee/Test.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee;
+
+public class Test {
+
+    public static void main(String[] args) {
+        System.out.println("TESTING CLASSLOADER!!");
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand1.java
----------------------------------------------------------------------
diff --git 
a/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand1.java 
b/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand1.java
new file mode 100644
index 0000000..1fe2af7
--- /dev/null
+++ b/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand1.java
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee;
+
+public class TestCommand1 {
+
+    public static void main(String[] args) {
+        final Test test = new Test();
+        test.main(args);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand2.java
----------------------------------------------------------------------
diff --git 
a/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand2.java 
b/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand2.java
new file mode 100644
index 0000000..b66bedd
--- /dev/null
+++ b/tomee/apache-tomee/src/test/java/org/apache/tomee/TestCommand2.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee;
+
+import org.apache.openejb.cli.Bootstrap;
+
+public class TestCommand2 {
+
+    public static void main(String[] args) throws Exception {
+        new Bootstrap().main(new String[]{"classloadertest"});
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/155fa669/tomee/apache-tomee/src/test/java/org/apache/tomee/TomEECliIT.java
----------------------------------------------------------------------
diff --git a/tomee/apache-tomee/src/test/java/org/apache/tomee/TomEECliIT.java 
b/tomee/apache-tomee/src/test/java/org/apache/tomee/TomEECliIT.java
new file mode 100644
index 0000000..92fe6f4
--- /dev/null
+++ b/tomee/apache-tomee/src/test/java/org/apache/tomee/TomEECliIT.java
@@ -0,0 +1,272 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee;
+
+import org.apache.openejb.loader.IO;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.exporter.ZipExporter;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.nio.file.Files;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class TomEECliIT {
+
+    @Test
+    public void testTomEECliWithJar() throws IOException, InterruptedException 
{
+        final File file = Files.createTempDirectory("tomee-test").toFile();
+        final File jar = new File(file.getAbsolutePath() + "/test.jar");
+
+        final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, 
"test.jar")
+                .addClasses(org.apache.tomee.Test.class)
+                .add(new StringAsset("main.class = org.apache.tomee.Test\n" +
+                        "name = classloadertest\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest");
+
+        archive.as(ZipExporter.class).exportTo(jar);
+
+        File work = new File("target/webprofile-work-dir/").getAbsoluteFile();
+        if (!work.exists()) {
+            work = new 
File("apache-tomee/target/webprofile-work-dir/").getAbsoluteFile();
+        }
+
+        final File[] files = work.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(final File pathname) {
+                return pathname.isDirectory() && 
pathname.getName().startsWith("apache-tomcat-");
+            }
+        });
+
+        final File tomee = (null != files ? files[0] : null);
+        if (tomee == null) {
+            fail("Failed to find Tomcat directory required for this test - 
Ensure you have run at least the maven phase: mvn process-resources");
+        }
+
+        final ProcessBuilder builder = new ProcessBuilder()
+            .command("java", "-cp", jar.getAbsolutePath() + File.pathSeparator 
+
+                            tomee.getAbsolutePath() + File.separator + "lib" + 
File.separator + "openejb-core-8.0.0-SNAPSHOT.jar" + File.pathSeparator +
+                            tomee.getAbsolutePath() + File.separator + "lib" + 
File.separator + "commons-cli-1.2.jar",
+                    "org.apache.openejb.cli.Bootstrap", "classloadertest");
+
+        final Process start = builder.start();
+        start.waitFor();
+
+        final String result = IO.slurp(start.getInputStream());
+        assertTrue(result.contains("TESTING CLASSLOADER!!"));
+    }
+
+    @Test
+    public void testTomEECliWithJarDir() throws IOException, 
InterruptedException {
+        final File file = Files.createTempDirectory("tomee-test").toFile();
+        final File jar = new File(file.getAbsolutePath() + "/test.jar");
+
+        final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, 
"test.jar")
+                .addClasses(org.apache.tomee.Test.class)
+                .add(new StringAsset("main.class = org.apache.tomee.Test\n" +
+                        "name = classloadertest\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest");
+
+        archive.as(ZipExporter.class).exportTo(jar);
+
+        File work = new File("target/webprofile-work-dir/").getAbsoluteFile();
+        if (!work.exists()) {
+            work = new 
File("apache-tomee/target/webprofile-work-dir/").getAbsoluteFile();
+        }
+
+        final File[] files = work.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(final File pathname) {
+                return pathname.isDirectory() && 
pathname.getName().startsWith("apache-tomcat-");
+            }
+        });
+
+        final File tomee = (null != files ? files[0] : null);
+        if (tomee == null) {
+            fail("Failed to find Tomcat directory required for this test - 
Ensure you have run at least the maven phase: mvn process-resources");
+        }
+
+        final ProcessBuilder builder = new ProcessBuilder()
+                .command("java", "-cp", file.getAbsolutePath() + 
File.separator + "*" + File.pathSeparator +
+                                tomee.getAbsolutePath() + File.separator + 
"lib" + File.separator + "*",
+                        "org.apache.openejb.cli.Bootstrap", "classloadertest");
+
+        final Process start = builder.start();
+        start.waitFor();
+
+        final String result = IO.slurp(start.getInputStream());
+        assertTrue(result.contains("TESTING CLASSLOADER!!"));
+    }
+
+    @Test
+    public void testTomEECliWithJarCallingAnotherMain() throws IOException, 
InterruptedException {
+        final File file = Files.createTempDirectory("tomee-test").toFile();
+        final File jar = new File(file.getAbsolutePath() + "/test.jar");
+        final File jar2 = new File(file.getAbsolutePath() + "/test2.jar");
+
+        final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, 
"test.jar")
+                .addClasses(org.apache.tomee.Test.class)
+                .add(new StringAsset("main.class = org.apache.tomee.Test\n" +
+                        "name = classloadertest\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest");
+
+        final JavaArchive archive2 = ShrinkWrap.create(JavaArchive.class, 
"test2.jar")
+                .addClasses(org.apache.tomee.TestCommand1.class)
+                .add(new StringAsset("main.class = 
org.apache.tomee.TestCommand1\n" +
+                        "name = classloadertest2\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest2");
+
+        archive.as(ZipExporter.class).exportTo(jar);
+        archive2.as(ZipExporter.class).exportTo(jar2);
+
+        File work = new File("target/webprofile-work-dir/").getAbsoluteFile();
+        if (!work.exists()) {
+            work = new 
File("apache-tomee/target/webprofile-work-dir/").getAbsoluteFile();
+        }
+
+        final File[] files = work.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(final File pathname) {
+                return pathname.isDirectory() && 
pathname.getName().startsWith("apache-tomcat-");
+            }
+        });
+
+        final File tomee = (null != files ? files[0] : null);
+        if (tomee == null) {
+            fail("Failed to find Tomcat directory required for this test - 
Ensure you have run at least the maven phase: mvn process-resources");
+        }
+
+        final ProcessBuilder builder = new ProcessBuilder()
+                .command("java", "-cp", jar.getAbsolutePath() + 
File.pathSeparator +
+                                jar2.getAbsolutePath() + File.pathSeparator +
+                                tomee.getAbsolutePath() + File.separator + 
"lib" + File.separator + "openejb-core-8.0.0-SNAPSHOT.jar" + File.pathSeparator 
+
+                                tomee.getAbsolutePath() + File.separator + 
"lib" + File.separator + "commons-cli-1.2.jar",
+                        "org.apache.openejb.cli.Bootstrap", 
"classloadertest2");
+
+        final Process start = builder.start();
+        start.waitFor();
+
+        final String result = IO.slurp(start.getInputStream());
+        assertTrue(result.contains("TESTING CLASSLOADER!!"));
+    }
+
+    @Test
+    public void testTomEECliWithJarDirCallingAnotherMain() throws IOException, 
InterruptedException {
+        final File file = Files.createTempDirectory("tomee-test").toFile();
+        final File jar = new File(file.getAbsolutePath() + "/test.jar");
+        final File jar2 = new File(file.getAbsolutePath() + "/test2.jar");
+
+        final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, 
"test.jar")
+                .addClasses(org.apache.tomee.Test.class)
+                .add(new StringAsset("main.class = org.apache.tomee.Test\n" +
+                        "name = classloadertest\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest");
+
+        final JavaArchive archive2 = ShrinkWrap.create(JavaArchive.class, 
"test2.jar")
+                .addClasses(org.apache.tomee.TestCommand1.class)
+                .add(new StringAsset("main.class = 
org.apache.tomee.TestCommand1\n" +
+                        "name = classloadertest2\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest2");
+
+        archive.as(ZipExporter.class).exportTo(jar);
+        archive2.as(ZipExporter.class).exportTo(jar2);
+
+        File work = new File("target/webprofile-work-dir/").getAbsoluteFile();
+        if (!work.exists()) {
+            work = new 
File("apache-tomee/target/webprofile-work-dir/").getAbsoluteFile();
+        }
+
+        final File[] files = work.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(final File pathname) {
+                return pathname.isDirectory() && 
pathname.getName().startsWith("apache-tomcat-");
+            }
+        });
+
+        final File tomee = (null != files ? files[0] : null);
+        if (tomee == null) {
+            fail("Failed to find Tomcat directory required for this test - 
Ensure you have run at least the maven phase: mvn process-resources");
+        }
+
+        final ProcessBuilder builder = new ProcessBuilder()
+                .command("java", "-cp", file.getAbsolutePath() + 
File.separator + "*" + File.pathSeparator +
+                                tomee.getAbsolutePath() + File.separator + 
"lib" + File.separator + "*",
+                        "org.apache.openejb.cli.Bootstrap", 
"classloadertest2");
+
+        final Process start = builder.start();
+        start.waitFor();
+
+        final String result = IO.slurp(start.getInputStream());
+        assertTrue(result.contains("TESTING CLASSLOADER!!"));
+    }
+
+    @Test
+    public void testDelegatesToCLIMain() throws IOException, 
InterruptedException {
+        final File file = Files.createTempDirectory("tomee-test").toFile();
+        final File jar = new File(file.getAbsolutePath() + "/test.jar");
+        final File jar2 = new File(file.getAbsolutePath() + "/test2.jar");
+
+        final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, 
"test.jar")
+                .addClasses(org.apache.tomee.Test.class)
+                .add(new StringAsset("main.class = org.apache.tomee.Test\n" +
+                        "name = classloadertest\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest");
+
+        final JavaArchive archive2 = ShrinkWrap.create(JavaArchive.class, 
"test2.jar")
+                .addClasses(org.apache.tomee.TestCommand2.class)
+                .add(new StringAsset("main.class = 
org.apache.tomee.TestCommand2\n" +
+                        "name = classloadertest2\n" +
+                        "description = Show a simple msg"), 
"META-INF/org.apache.openejb.cli/classloadertest2");
+
+        archive.as(ZipExporter.class).exportTo(jar);
+        archive2.as(ZipExporter.class).exportTo(jar2);
+
+        File work = new File("target/webprofile-work-dir/").getAbsoluteFile();
+        if (!work.exists()) {
+            work = new 
File("apache-tomee/target/webprofile-work-dir/").getAbsoluteFile();
+        }
+
+        final File[] files = work.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(final File pathname) {
+                return pathname.isDirectory() && 
pathname.getName().startsWith("apache-tomcat-");
+            }
+        });
+
+        final File tomee = (null != files ? files[0] : null);
+        if (tomee == null) {
+            fail("Failed to find Tomcat directory required for this test - 
Ensure you have run at least the maven phase: mvn process-resources");
+        }
+
+        final ProcessBuilder builder = new ProcessBuilder()
+                .command("java", "-cp", file.getAbsolutePath() + 
File.separator + "*" + File.pathSeparator +
+                                tomee.getAbsolutePath() + File.separator + 
"lib" + File.separator + "*",
+                        "org.apache.openejb.cli.Bootstrap", 
"classloadertest2");
+
+        final Process start = builder.start();
+        start.waitFor();
+
+        final String result = IO.slurp(start.getInputStream());
+        assertTrue(result.contains("TESTING CLASSLOADER!!"));
+    }
+}

Reply via email to