You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by st...@apache.org on 2015/05/12 16:46:04 UTC

[7/8] tomee git commit: TOMEE-1581 endorsed and javaagent for tomee remote arquillian adapter

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/fb_tomee2_owb16
Commit: 25207a096c397ab885fb8d260c4a6fd688063cf8
Parents: 515d875
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon May 11 09:44:08 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
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