Repository: tomee Updated Branches: refs/heads/master 515d8753a -> 25207a096
TOMEE-1581 endorsed and javaagent for tomee remote arquillian adapter Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/25207a09 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/25207a09 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/25207a09 Branch: refs/heads/master Commit: 25207a096c397ab885fb8d260c4a6fd688063cf8 Parents: 515d875 Author: Romain Manni-Bucau <[email protected]> Authored: Mon May 11 09:44:08 2015 +0200 Committer: Romain Manni-Bucau <[email protected]> Committed: Mon May 11 09:44:08 2015 +0200 ---------------------------------------------------------------------- .../apache/openejb/arquillian/common/Setup.java | 33 ++++++++++++-- .../remote/RemoteTomEEConfiguration.java | 20 ++++++++ .../arquillian/remote/RemoteTomEEContainer.java | 27 +++++++++-- .../openejb/arquillian/AdditionalLibsTest.java | 6 +-- .../arquillian/javaagent/JavaagentTest.java | 48 ++++++++++++++++++++ .../src/test/resources/arquillian.xml | 5 +- 6 files changed, 125 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/25207a09/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java index e57fc70..c390190 100644 --- a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java +++ b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java @@ -42,6 +42,8 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import static java.util.Collections.emptyMap; + /** * @version $Rev$ $Date$ */ @@ -357,13 +359,13 @@ public class Setup { Files.delete(destination); } - public static void addTomEELibraries(final File tomeeHome, final String additionalLibs) { + public static Map<File, String> addTomEELibraries(final File libFolder, final String additionalLibs, final boolean parseArgs) { if (additionalLibs == null) { - return; + return emptyMap(); } final String libs = additionalLibs.trim(); if (libs.isEmpty()) { - return; + return emptyMap(); } try { // initializing the SystemInstance because we'll need it for configuration @@ -374,22 +376,43 @@ public class Setup { // no-op } - final File libFolder = new File(tomeeHome, "lib"); + final Map<File, String> configs = new HashMap<>(); for (final String lib : libs.split("\n")) { final String trim = lib.trim(); if (trim.isEmpty() || trim.startsWith("#")) { continue; } + + final String args; + if (parseArgs) { // javaagent friendly + int argsIdx = trim.indexOf('='); + if (argsIdx < 0) { + argsIdx = trim.indexOf('?'); + } + if (argsIdx > 0) { + args = trim.substring(argsIdx); + } else { + args = ""; + } + } else { + args = null; + } + final Set<String> locations = ProvisioningUtil.realLocation(trim); for (final String location : locations) { final File from = new File(location); try { - org.apache.openejb.loader.IO.copy(from, new File(libFolder, from.getName())); + final File to = new File(libFolder, from.getName()); + org.apache.openejb.loader.IO.copy(from, to); + if (args != null) { + configs.put(to, args); + } } catch (final IOException e) { throw new IllegalArgumentException(e); } } } + return configs; } private static class TrueFilter implements FileFilter { http://git-wip-us.apache.org/repos/asf/tomee/blob/25207a09/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java index 8ed1fe1..63e78f0 100644 --- a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java +++ b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEConfiguration.java @@ -39,6 +39,8 @@ public class RemoteTomEEConfiguration extends TomEEConfiguration { private String conf; private String bin; private String lib; + private String endorsed; + private String javaagent; private String additionalLibs; private boolean cleanOnStartUp; private boolean debug; @@ -94,6 +96,24 @@ public class RemoteTomEEConfiguration extends TomEEConfiguration { return additionalLibs; } + public String getEndorsed() { + return endorsed; + } + + public String getJavaagent() { + return javaagent; + } + + @Multiline + public void setEndorsed(final String endorsed) { + this.endorsed = endorsed; + } + + @Multiline + public void setJavaagent(final String javaagent) { + this.javaagent = javaagent; + } + @Multiline public void setAdditionalLibs(final String additionalLibs) { this.additionalLibs = additionalLibs; http://git-wip-us.apache.org/repos/asf/tomee/blob/25207a09/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java index 15fb446..ce953f7 100644 --- a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java +++ b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java @@ -30,7 +30,6 @@ import org.jboss.arquillian.container.spi.client.container.LifecycleException; import org.jboss.arquillian.protocol.servlet.ServletMethodExecutor; import org.jboss.shrinkwrap.api.Archive; -import javax.naming.NamingException; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -44,6 +43,7 @@ import java.util.Properties; import java.util.TreeMap; import java.util.logging.Level; import java.util.logging.Logger; +import javax.naming.NamingException; public class RemoteTomEEContainer extends TomEEContainer<RemoteTomEEConfiguration> { private static final Logger logger = Logger.getLogger(RemoteTomEEContainer.class.getName()); @@ -214,14 +214,33 @@ public class RemoteTomEEContainer extends TomEEContainer<RemoteTomEEConfiguratio Setup.synchronizeFolder(tomeeHome, configuration.getConf(), "conf"); Setup.synchronizeFolder(tomeeHome, configuration.getBin(), "bin"); Setup.synchronizeFolder(tomeeHome, configuration.getLib(), "lib"); - Setup.addTomEELibraries(tomeeHome, configuration.getAdditionalLibs()); + Setup.addTomEELibraries(new File(tomeeHome, "lib"), configuration.getAdditionalLibs(), false); + if (configuration.getEndorsed() != null && !configuration.getEndorsed().isEmpty()) { + final File endorsed = new File(tomeeHome, "endorsed"); + Files.mkdir(endorsed); + Setup.addTomEELibraries(endorsed, configuration.getEndorsed(), false); + } + + String opts = configuration.getCatalina_opts(); + if (configuration.getJavaagent() != null && !configuration.getJavaagent().isEmpty()) { + final File javaagent = new File(tomeeHome, "javaagent"); + Files.mkdir(javaagent); + final Map<File, String> agents = Setup.addTomEELibraries(javaagent, configuration.getJavaagent(), true); + if (!agents.isEmpty()) { + if (opts == null) { + opts = ""; + } + for (final Map.Entry<File, String> entry : agents.entrySet()) { + opts += " \"-javaagent:" + entry.getKey().getAbsolutePath() + entry.getValue() + "\""; + } + } + configuration.setCatalina_opts(opts); + } Setup.configureServerXml(tomeeHome, configuration); 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); http://git-wip-us.apache.org/repos/asf/tomee/blob/25207a09/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/AdditionalLibsTest.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/AdditionalLibsTest.java b/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/AdditionalLibsTest.java index 0b4bb19..6dcd604 100644 --- a/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/AdditionalLibsTest.java +++ b/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/AdditionalLibsTest.java @@ -16,7 +16,7 @@ */ package org.apache.openejb.arquillian; -import org.apache.sirona.repositories.Repository; +import org.apache.sirona.web.servlet.SironaFilter; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; @@ -47,9 +47,9 @@ public class AdditionalLibsTest { return name.startsWith("sirona-"); } }); - assertEquals(3, sirona.length); // core, web, aop + assertEquals(1, sirona.length); // web - assertNotNull(Repository.INSTANCE); // would fail if libs are missing + assertNotNull(new SironaFilter()); // would fail if libs are missing } private static class Tester { http://git-wip-us.apache.org/repos/asf/tomee/blob/25207a09/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/javaagent/JavaagentTest.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/javaagent/JavaagentTest.java b/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/javaagent/JavaagentTest.java new file mode 100644 index 0000000..6ef2951 --- /dev/null +++ b/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/javaagent/JavaagentTest.java @@ -0,0 +1,48 @@ +/* + * 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.openejb.arquillian.javaagent; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.lang.management.ManagementFactory; + +import static org.junit.Assert.fail; + +@RunWith(Arquillian.class) +public class JavaagentTest { + @Deployment + public static Archive<?> empty() { + return ShrinkWrap.create(WebArchive.class, "javaagent.war").addAsResource(EmptyAsset.INSTANCE, "foo"); + } + + @Test + public void checkAgent() { + for (final String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) { + if (arg.startsWith("-javaagent") && arg.endsWith("sirona-javaagent-0.2-incubating-shaded.jar")) { + return; + } + } + fail("didnt find sirona as javaagent"); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/25207a09/arquillian/arquillian-tomee-remote/src/test/resources/arquillian.xml ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-remote/src/test/resources/arquillian.xml b/arquillian/arquillian-tomee-remote/src/test/resources/arquillian.xml index cb7fc55..2478713 100644 --- a/arquillian/arquillian-tomee-remote/src/test/resources/arquillian.xml +++ b/arquillian/arquillian-tomee-remote/src/test/resources/arquillian.xml @@ -28,10 +28,11 @@ <property name="ajpPort">-1</property> <property name="dir">target/apache-tomee-remote</property> <property name="additionalLibs"> - mvn:org.apache.sirona:sirona-core:0.2-incubating - mvn:org.apache.sirona:sirona-aop:0.2-incubating mvn:org.apache.sirona:sirona-web:0.2-incubating </property> + <property name="javaagent"> + mvn:org.apache.sirona:sirona-javaagent:0.2-incubating:jar:shaded + </property> <property name="appWorkingDir">target/arquillian-test-working-dir</property> <property name="properties"> openejb.classloader.forced-load=org.apache.openejb
