Author: rmannibucau Date: Fri Jan 31 17:05:07 2014 New Revision: 1563178 URL: http://svn.apache.org/r1563178 Log: TOMEE-1114 support openejb-standalone with tomee maven plugin
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java tomee/tomee/trunk/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/TomEEMavenPluginRule.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=1563178&r1=1563177&r2=1563178&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 Jan 31 17:05:07 2014 @@ -16,12 +16,6 @@ */ 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; @@ -35,6 +29,12 @@ 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; + /** * @version $Rev$ $Date$ */ @@ -156,6 +156,9 @@ public class RemoteServer { final File openejbJar = lib("openejb-core", lib, webapplib); final File javaagentJar = lib("openejb-javaagent", lib, webapplib); + final File conf = new File(home, "conf"); + final File loggingProperties = new File(conf, "logging.properties"); + //File openejbJar = new File(lib, "openejb-core-" + version + ".jar"); final String java; @@ -167,30 +170,62 @@ public class RemoteServer { java = new File(System.getProperty("java.home"), "bin/java").getAbsolutePath(); } + final List<String> argsList = new ArrayList<String>(20); + argsList.add(java); + argsList.add("-XX:+HeapDumpOnOutOfMemoryError"); + + if (debug) { + argsList.add("-Xdebug"); + argsList.add("-Xnoagent"); + argsList.add("-Djava.compiler=NONE"); + argsList.add("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=" + options.get(SERVER_DEBUG_PORT, 5005)); + } + + if (profile) { + String yourkitHome = options.get("yourkit.home", "/Applications/YourKit_Java_Profiler_9.5.6.app/bin/mac/"); + if (!yourkitHome.endsWith("/")) + yourkitHome += "/"; + final String yourkitOpts = options.get("yourkit.opts", "disablestacktelemetry,disableexceptiontelemetry,builtinprobes=none,delay=10000,sessionname=Tomcat"); + argsList.add("-agentpath:" + yourkitHome + "libyjpagent.jnilib=" + yourkitOpts); + } + + if (javaOpts != null) { + Collections.addAll(argsList, javaOpts.split(" +")); + } + + final Map<String, String> addedArgs = new HashMap<String, String>(); + if (additionalArgs != null) { + for (final String arg : additionalArgs) { + final String[] values = arg.split("="); + if (values.length == 1) { + addedArgs.put(values[0], "null"); + } else { + addedArgs.put(values[0], values[1]); + } + argsList.add(arg); + } + } + + if (!addedArgs.containsKey("-Djava.util.logging.config.file") && loggingProperties.exists()) { + argsList.add("-Djava.util.logging.config.file=" + loggingProperties.getAbsolutePath()); + } + + argsList.add("-javaagent:" + javaagentJar.getAbsolutePath()); + //DMB: If you don't use an array, you get problems with jar paths containing spaces // the command won't parse correctly + final String ps = File.pathSeparator; + final String[] args; - final int debugPort = options.get(SERVER_DEBUG_PORT, 5005); if (!tomcat) { - if (debug) { - args = new String[]{java, - "-XX:+HeapDumpOnOutOfMemoryError", - "-Xdebug", - "-Xnoagent", - "-Djava.compiler=NONE", - "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=" + debugPort, - - "-javaagent:" + javaagentJar.getAbsolutePath(), - - "-jar", openejbJar.getAbsolutePath(), "start" - }; - } else { - args = new String[]{java, - "-XX:+HeapDumpOnOutOfMemoryError", - "-javaagent:" + javaagentJar.getAbsolutePath(), - "-jar", openejbJar.getAbsolutePath(), "start" - }; + final StringBuilder cp = new StringBuilder(openejbJar.getAbsolutePath()); + if (additionalClasspath != null) { + cp.append(ps).append(additionalClasspath); } + + argsList.add("-cp"); + argsList.add(cp.toString()); + argsList.add("org.apache.openejb.cli.Bootstrap"); } else { final File bin = new File(home, "bin"); final File tlib = new File(home, "lib"); @@ -198,58 +233,15 @@ public class RemoteServer { final File juliJar = new File(bin, "tomcat-juli.jar"); final File commonsLoggingJar = new File(bin, "commons-logging-api.jar"); - final File conf = new File(home, "conf"); - final File loggingProperties = new File(conf, "logging.properties"); - final File endorsed = new File(home, "endorsed"); final File temp = new File(home, "temp"); - final List<String> argsList = new ArrayList<String>(); - argsList.add(java); - argsList.add("-XX:+HeapDumpOnOutOfMemoryError"); - - if (debug) { - argsList.add("-Xdebug"); - argsList.add("-Xnoagent"); - argsList.add("-Djava.compiler=NONE"); - argsList.add("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=" + debugPort); - } - - if (profile) { - String yourkitHome = options.get("yourkit.home", "/Applications/YourKit_Java_Profiler_9.5.6.app/bin/mac/"); - if (!yourkitHome.endsWith("/")) - yourkitHome += "/"; - final String yourkitOpts = options.get("yourkit.opts", "disablestacktelemetry,disableexceptiontelemetry,builtinprobes=none,delay=10000,sessionname=Tomcat"); - argsList.add("-agentpath:" + yourkitHome + "libyjpagent.jnilib=" + yourkitOpts); - } - - if (javaOpts != null) { - Collections.addAll(argsList, javaOpts.split(" +")); - } - - final Map<String, String> addedArgs = new HashMap<String, String>(); - if (additionalArgs != null) { - for (final String arg : additionalArgs) { - final String[] values = arg.split("="); - if (values.length == 1) { - addedArgs.put(values[0], "null"); - } else { - addedArgs.put(values[0], values[1]); - } - argsList.add(arg); - } - } - - argsList.add("-javaagent:" + javaagentJar.getAbsolutePath()); if (!addedArgs.containsKey("-Dcom.sun.management.jmxremote")) { argsList.add("-Dcom.sun.management.jmxremote"); } if (!addedArgs.containsKey("-Djava.util.logging.manager")) { argsList.add("-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"); } - if (!addedArgs.containsKey("-Djava.util.logging.config.file") && loggingProperties.exists()) { - argsList.add("-Djava.util.logging.config.file=" + loggingProperties.getAbsolutePath()); - } if (!addedArgs.containsKey("-Djava.io.tmpdir")) { argsList.add("-Djava.io.tmpdir=" + temp.getAbsolutePath()); } @@ -281,7 +273,7 @@ public class RemoteServer { argsList.add("-ea"); argsList.add("-classpath"); - final String ps = File.pathSeparator; + final StringBuilder cp = new StringBuilder(bootstrapJar.getAbsolutePath()).append(ps).append(juliJar.getAbsolutePath()); if (commonsLoggingJar.exists()) { cp.append(ps).append(commonsLoggingJar.getAbsolutePath()); @@ -292,14 +284,14 @@ public class RemoteServer { argsList.add(cp.toString()); argsList.add("org.apache.catalina.startup.Bootstrap"); - if (cmd == null) { - argsList.add("start"); - } else { - argsList.add(cmd); - } + } - args = argsList.toArray(new String[argsList.size()]); + if (cmd == null) { + argsList.add("start"); + } else { + argsList.add(cmd); } + args = argsList.toArray(new String[argsList.size()]); if (verbose) { System.out.println(Join.join("\n", args)); @@ -308,11 +300,7 @@ public class RemoteServer { // kill3UNIXDebug(); final Process process = Runtime.getRuntime().exec(args); - if (tomcat) { - Pipe.pipeOut(process); // why would we need to redirect System.in to the process, TomEE doesn't use it - } else { - Pipe.pipe(process); - } + Pipe.pipeOut(process); // why would we need to redirect System.in to the process, TomEE doesn't use it if ("start".equals(cmd)) { server = process; Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java?rev=1563178&r1=1563177&r2=1563178&view=diff ============================================================================== --- tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java (original) +++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java Fri Jan 31 17:05:07 2014 @@ -121,6 +121,9 @@ public abstract class AbstractTomEEMojo @Parameter(property = "tomee-plugin.shutdown", defaultValue = "8005") protected int tomeeShutdownPort; + @Parameter(property = "tomee-plugin.shutdown-command", defaultValue = "SHUTDOWN") + protected String tomeeShutdownCommand; + @Parameter(property = "tomee-plugin.ajp", defaultValue = "8009") protected int tomeeAjpPort; @@ -240,6 +243,7 @@ public abstract class AbstractTomEEMojo protected File deployedFile = null; protected RemoteServer server = null; + protected String container = "TomEE"; @Override public void execute() throws MojoExecutionException, MojoFailureException { @@ -327,8 +331,13 @@ public abstract class AbstractTomEEMojo final File loggingProperties = new File(catalinaBase, "conf/logging.properties"); if (loggingProperties.exists() && !new File(config, "conf/logging.properties").exists()) { try { - final String content = IO.slurp(loggingProperties) - .replace(SimpleFormatter.class.getName(), SimpleTomEEFormatter.class.getName()); + String content = IO.slurp(loggingProperties); + if (!content.contains("java.util.logging.ConsoleHandler.formatter")) { + content += System.getProperty("line.separator") + "java.util.logging.ConsoleHandler.formatter = " + SimpleTomEEFormatter.class.getName(); + } else { + content = content.replace(SimpleFormatter.class.getName(), SimpleTomEEFormatter.class.getName()); + } + final FileWriter writer = new FileWriter(loggingProperties); try { writer.write(content); @@ -537,6 +546,10 @@ public abstract class AbstractTomEEMojo private void overrideAddresses() { final File serverXml = new File(catalinaBase, "conf/server.xml"); + if (!serverXml.exists()) { // openejb + return; + } + final QuickServerXmlParser parser = QuickServerXmlParser.parse(serverXml); String value = read(serverXml); @@ -697,6 +710,7 @@ public abstract class AbstractTomEEMojo System.setProperty("server.debug.port", Integer.toString(debugPort)); } System.setProperty("server.shutdown.port", Integer.toString(tomeeShutdownPort)); + System.setProperty("server.shutdown.command", tomeeShutdownCommand); server = new RemoteServer(getConnectAttempts(), false); server.setAdditionalClasspath(getAdditionalClasspath()); @@ -707,9 +721,13 @@ public abstract class AbstractTomEEMojo strings.add("-Dtomee.noshutdownhook=true"); } - getLog().info("Running '" + getClass().getSimpleName().replace("TomEEMojo", "").toLowerCase(Locale.ENGLISH) - + "'. Configured TomEE in plugin is " + tomeeHost + ":" + tomeeHttpPort - + " (plugin shutdown port is " + tomeeShutdownPort + ")"); + if ("TomEE".equals(container)) { + getLog().info("Running '" + getClass().getSimpleName().replace("TomEEMojo", "").toLowerCase(Locale.ENGLISH) + + "'. Configured TomEE in plugin is " + tomeeHost + ":" + tomeeHttpPort + + " (plugin shutdown port is " + tomeeShutdownPort + ")"); + } else { + getLog().info("Running '" + getClass().getSimpleName().replace("TomEEMojo", "").toLowerCase(Locale.ENGLISH)); + } final InputStream originalIn = System.in; // piped when starting resmote server so saving it @@ -770,9 +788,9 @@ public abstract class AbstractTomEEMojo } try { server.getServer().waitFor(); - getLog().info("TomEE stopped"); + getLog().info(container + " stopped"); } catch (Exception e) { - getLog().error("Can't stop TomEE", e); + getLog().error("Can't stop " + container, e); } server = null; @@ -826,6 +844,11 @@ public abstract class AbstractTomEEMojo remoteRepos = new ArrayList<ArtifactRepository>(); } + if ((tomeeClassifier != null && (tomeeClassifier.isEmpty() || tomeeClassifier.equals("ignore"))) + || ("org.apache.openejb".equals(tomeeGroupId) && "openejb-standalone".equals(tomeeArtifactId))) { + tomeeClassifier = null; + } + try { final Artifact artifact = factory.createDependencyArtifact(tomeeGroupId, tomeeArtifactId, createFromVersion(tomeeVersion), tomeeType, tomeeClassifier, SCOPE_COMPILE); resolver.resolve(artifact, remoteRepos, local); @@ -845,7 +868,7 @@ public abstract class AbstractTomEEMojo while (entries.hasMoreElements()) { final ZipEntry entry = entries.nextElement(); String name = entry.getName(); - if (name.startsWith("apache-tomee-")) { + if (name.startsWith("apache-tomee-") || name.startsWith("apache-openejb-")) { int idx = name.indexOf("/"); if (idx < 0) { idx = name.indexOf(File.separator); @@ -880,16 +903,31 @@ public abstract class AbstractTomEEMojo } } - final FileWriter writer = new FileWriter(new File(catalinaBase, "conf/tomee.xml")); + File file = new File(catalinaBase, "conf/tomee.xml"); + if (file.exists()) { + container = "TomEE"; + } else { + container = "OpenEJB"; + file = new File(catalinaBase, "conf/openejb.xml"); + if (file.exists()) { + webappDir = "apps"; + } + } + + final FileWriter writer = new FileWriter(file); + final String rootTag = container.toLowerCase(Locale.ENGLISH); writer.write("<?xml version=\"1.0\"?>\n" + - "<tomee>\n" + + "<" + rootTag + ">\n" + " <Deployments dir=\"apps\" />\n" + - "</tomee>\n"); + "</" + rootTag + ">\n"); writer.close(); - new File(catalinaBase, "apps").mkdirs(); + final File appsFolder = new File(catalinaBase, "apps"); + if (!appsFolder.exists()) { + appsFolder.mkdirs(); + } - getLog().info("TomEE was unzipped in '" + catalinaBase.getAbsolutePath() + "'"); + getLog().info(container + " was unzipped in '" + catalinaBase.getAbsolutePath() + "'"); } catch (Exception e) { throw new TomEEException(e.getMessage(), e); } finally { Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/TomEEMavenPluginRule.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/TomEEMavenPluginRule.java?rev=1563178&r1=1563177&r2=1563178&view=diff ============================================================================== --- tomee/tomee/trunk/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/TomEEMavenPluginRule.java (original) +++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/test/java/org/apache/openejb/maven/plugin/TomEEMavenPluginRule.java Fri Jan 31 17:05:07 2014 @@ -193,6 +193,7 @@ public class TomEEMavenPluginRule implem tomEEMojo.tomeeHttpPort = NetworkUtil.getNextAvailablePort(); tomEEMojo.tomeeAjpPort = NetworkUtil.getNextAvailablePort(); tomEEMojo.tomeeShutdownPort = NetworkUtil.getNextAvailablePort(); + tomEEMojo.tomeeShutdownCommand = "SHUTDOWN"; tomEEMojo.tomeeHost = "localhost"; tomEEMojo.useConsole = true;