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 2013/09/30 09:44:55 UTC
svn commit: r1527471 - in /tomee/tomee/trunk:
arquillian/arquillian-tomee-common/
arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/
arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/em...
Author: rmannibucau
Date: Mon Sep 30 07:44:54 2013
New Revision: 1527471
URL: http://svn.apache.org/r1527471
Log:
TOMEE-1051 using a filter for arquillian to avoid issues when mapping an app filter to /*
Added:
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianFilterRunner.java
tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/
tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/AllFilterTest.java
tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/MyFilter.java
Modified:
tomee/tomee/trunk/arquillian/arquillian-tomee-common/pom.xml
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
tomee/tomee/trunk/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
tomee/tomee/trunk/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-common/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/pom.xml?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-common/pom.xml (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-common/pom.xml Mon Sep 30 07:44:54 2013
@@ -31,6 +31,12 @@
<dependencies>
<dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-servlet_2.5_spec</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-common</artifactId>
<version>${project.version}</version>
Added: tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianFilterRunner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianFilterRunner.java?rev=1527471&view=auto
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianFilterRunner.java (added)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianFilterRunner.java Mon Sep 30 07:44:54 2013
@@ -0,0 +1,66 @@
+/*
+ * 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.common;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServlet;
+import java.io.IOException;
+
+// this filter simply allows us to invoke arquillian servlet directly
+// instead of needing to pass through the servlet filters
+//
+// it allows us to work out of the box with framework using a dispatcher (filter) on /*
+// it is commonn with tapestry, spring, wicket, ....
+//
+// We can't rely on scanning (@WebFilter) since we can't enrich the app because we need it for client tests too and
+// we need it to be added first
+//
+// @WebFilter(urlPatterns = "/ArquillianServletRunner", filterName = "org.apache.openejb.arquillian.common.ArquillianFilterRunner")
+public class ArquillianFilterRunner implements Filter {
+ private static final String ARQUILLIAN_SERVLET_RUNNER = "org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner";
+
+ private HttpServlet deletage = null;
+
+ @Override
+ public void init(final FilterConfig filterConfig) throws ServletException {
+ try {
+ deletage = HttpServlet.class.cast(Thread.currentThread().getContextClassLoader().loadClass(ARQUILLIAN_SERVLET_RUNNER).newInstance());
+ deletage.init();
+ } catch (final Exception e) {
+ // no-op: can happen if the servlet is not present, that's a normal case
+ }
+ }
+
+ @Override
+ public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
+ if (deletage != null) {
+ deletage.service(servletRequest, servletResponse);
+ }
+ }
+
+ @Override
+ public void destroy() {
+ if (deletage != null) {
+ deletage.destroy();
+ }
+ }
+}
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java Mon Sep 30 07:44:54 2013
@@ -311,7 +311,7 @@ public class Setup {
public static void installArquillianBeanDiscoverer(final File home) {
final File destination = new File(home, TOMEE_BEAN_DISCOVERER_JAR);
ShrinkWrap.create(JavaArchive.class, destination.getName())
- .addClasses(BeanDicovererInstaller.class, TestClassDiscoverer.class)
+ .addClasses(BeanDicovererInstaller.class, TestClassDiscoverer.class, ArquillianFilterRunner.class)
.addAsManifestResource(new StringAsset(BeanDicovererInstaller.class.getName()), ArchivePaths.create("org.apache.openejb.extension"))
.as(ZipExporter.class).exportTo(destination, false);
}
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java Mon Sep 30 07:44:54 2013
@@ -49,10 +49,8 @@ import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
-import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -121,7 +119,7 @@ public abstract class TomEEContainer<Con
}
final ObjectMap map = new ObjectMap(configuration);
- for (Map.Entry<String, Object> entry : map.entrySet()) {
+ for (final Map.Entry<String, Object> entry : map.entrySet()) {
if (!entry.getKey().toLowerCase().endsWith("port")) continue;
try {
Object value = entry.getValue();
@@ -271,8 +269,7 @@ public abstract class TomEEContainer<Con
String arquillianServlet;
// Avoids "inconvertible types" error in windows build
- final Object object = archive;
- if (object instanceof WebArchive) {
+ if (archive instanceof WebArchive) {
arquillianServlet = "/" + getArchiveNameWithoutExtension(archive);
} else {
arquillianServlet = "/arquillian-protocol";
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java Mon Sep 30 07:44:54 2013
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.arquillian.embedded;
+import org.apache.openejb.arquillian.common.ArquillianFilterRunner;
import org.apache.openejb.arquillian.common.Files;
import org.apache.openejb.arquillian.common.TestClassDiscoverer;
import org.apache.openejb.arquillian.common.TomEEContainer;
@@ -96,7 +97,9 @@ public class EmbeddedTomEEContainer exte
try {
this.container.start();
SystemInstance.get().setComponent(AdditionalBeanDiscoverer.class, new TestClassDiscoverer());
- } catch (Exception e) {
+ // this property is not mandatory by default but depending the protocol it can be relevant so adding it by default
+ SystemInstance.get().setProperty("org.apache.openejb.servlet.filters", ArquillianFilterRunner.class.getName() + "=/ArquillianServletRunner");
+ } catch (final Exception e) {
e.printStackTrace();
throw new LifecycleException("Something went wrong", e);
}
@@ -106,7 +109,7 @@ public class EmbeddedTomEEContainer exte
public void stop() throws LifecycleException {
try {
this.container.stop();
- } catch (Exception e) {
+ } catch (final Exception e) {
throw new LifecycleException("Unable to stop server", e);
}
}
@@ -139,7 +142,7 @@ public class EmbeddedTomEEContainer exte
startCdiContexts(name); // ensure tests can use request/session scopes even if we don't have a request
return new ProtocolMetaData().addContext(httpContext);
- } catch (Exception e) {
+ } catch (final Exception e) {
e.printStackTrace();
throw new DeploymentException("Unable to deploy", e);
}
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java Mon Sep 30 07:44:54 2013
@@ -16,6 +16,7 @@
*/
package org.apache.tomee.arquillian.remote;
+import org.apache.openejb.arquillian.common.ArquillianFilterRunner;
import org.apache.openejb.arquillian.common.ArquillianUtil;
import org.apache.openejb.arquillian.common.Files;
import org.apache.openejb.arquillian.common.IO;
@@ -26,6 +27,7 @@ import org.apache.openejb.config.RemoteS
import org.apache.tomee.util.InstallationEnrichers;
import org.apache.tomee.util.SimpleTomEEFormatter;
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;
@@ -34,7 +36,6 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -43,13 +44,11 @@ import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
-/*
- * TODO: delete old embedded adapter, move the tests and set those up
- */
public class RemoteTomEEContainer extends TomEEContainer<RemoteTomEEConfiguration> {
-
private static final Logger logger = Logger.getLogger(RemoteTomEEContainer.class.getName());
+ private static final String ARQUILLIAN_FILTER = "-Dorg.apache.openejb.servlet.filters=" + ArquillianFilterRunner.class.getName() + "=" + ServletMethodExecutor.ARQUILLIAN_SERVLET_MAPPING;
+
private RemoteServer container;
private boolean shutdown = false;
private File tomeeHome;
@@ -99,7 +98,7 @@ public class RemoteTomEEContainer extend
deploy(archive);
}
}
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.log(Level.SEVERE, "Unable to start remote container", e);
throw new LifecycleException("Unable to start remote container:" + e.getMessage(), e);
} finally {
@@ -113,12 +112,14 @@ public class RemoteTomEEContainer extend
private List<String> args() {
String opts = configuration.getCatalina_opts();
- if (opts == null || (opts = opts.trim()).isEmpty()) {
- return Arrays.asList("-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false");
+ if (opts != null) {
+ opts = opts.trim();
+ }
+ if (opts == null || opts.isEmpty()) {
+ return Arrays.asList("-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false", ARQUILLIAN_FILTER);
}
final List<String> splitOnSpace = new ArrayList<String>();
- opts = opts.replace("\n", " ").trim();
final Iterator<String> it = new ArgsIterator(opts);
while (it.hasNext()) {
@@ -128,6 +129,7 @@ public class RemoteTomEEContainer extend
if (!splitOnSpace.contains("-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true")) {
splitOnSpace.add("-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false");
}
+ splitOnSpace.add(ARQUILLIAN_FILTER);
return splitOnSpace;
}
Added: tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/AllFilterTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/AllFilterTest.java?rev=1527471&view=auto
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/AllFilterTest.java (added)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/AllFilterTest.java Mon Sep 30 07:44:54 2013
@@ -0,0 +1,86 @@
+/*
+ * 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.tests.filter;
+
+import org.apache.openejb.loader.IO;
+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.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptors;
+import org.jboss.shrinkwrap.descriptor.api.webapp25.WebAppDescriptor;
+import org.jboss.shrinkwrap.descriptor.api.webapp25.WebAppVersionType;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(Arquillian.class)
+public class AllFilterTest {
+ @Deployment
+ public static Archive<?> war() throws Exception {
+ final String port = findPort();
+ System.setProperty(AllFilterTest.class.getName() + ".port", port); // for embedded case
+
+ return ShrinkWrap.create(WebArchive.class, "filter.war")
+ .addClass(MyFilter.class)
+ .addAsWebInfResource(new StringAsset(port), "classes/port.conf") // for remote case
+ .addAsWebInfResource(new StringAsset(Descriptors.create(WebAppDescriptor.class)
+ .version(WebAppVersionType._2_5)
+ .metadataComplete(true)
+ .createFilter()
+ .filterName("My")
+ .filterClass(MyFilter.class.getName())
+ .up()
+ .createFilterMapping()
+ .filterName("My")
+ .urlPattern("/*")
+ .up()
+ .exportAsString()), "web.xml");
+ }
+
+ @Test // needs to be executed on server side otherwise all is done with local executor and test obviously works
+ public void requestShouldWorkEvenIfFilterInterceptsAllIncludingTheArquillianServlet() throws IOException {
+ assertEquals("No problemo!", IO.slurp(new URL("http://localhost:" + httpPort() + "/filter/")));
+ }
+
+ private static String httpPort() throws IOException {
+ final String property = System.getProperty(AllFilterTest.class.getName() + ".port");
+ if (property != null) {
+ return property;
+ } // else remote
+ return org.apache.openejb.loader.IO.slurp(Thread.currentThread().getContextClassLoader().getResourceAsStream("port.conf"));
+ }
+
+ private static String findPort() throws Exception {
+ final String opts = System.getProperty("java.opts");
+ if (opts != null) {
+ return opts.substring(opts.indexOf("tomee.httpPort=") + "tomee.httpPort=".length());
+ } // else embedded
+ final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ final ObjectName on = server.queryMBeans(new ObjectName("Tomcat:type=ProtocolHandler,port=*"), null).iterator().next().getObjectName();
+ return "" + server.getAttribute(on, "port");
+ }
+}
Added: tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/MyFilter.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/MyFilter.java?rev=1527471&view=auto
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/MyFilter.java (added)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/filter/MyFilter.java Mon Sep 30 07:44:54 2013
@@ -0,0 +1,43 @@
+/*
+ * 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.tests.filter;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.io.IOException;
+
+public class MyFilter implements Filter {
+ @Override
+ public void init(final FilterConfig filterConfig) throws ServletException {
+ // no-op
+ }
+
+ @Override
+ public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
+ response.getWriter().write("No problemo!");
+ // don't use chain so we can't access arquillian servlet
+ }
+
+ @Override
+ public void destroy() {
+ // no-op
+ }
+}
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java Mon Sep 30 07:44:54 2013
@@ -16,6 +16,7 @@
*/
package org.apache.tomee.arquillian.webapp;
+import org.apache.openejb.arquillian.common.ArquillianFilterRunner;
import org.apache.openejb.arquillian.common.Files;
import org.apache.openejb.arquillian.common.IO;
import org.apache.openejb.arquillian.common.Setup;
@@ -25,12 +26,14 @@ import org.apache.openejb.config.RemoteS
import org.apache.tomee.installer.Installer;
import org.apache.tomee.installer.Paths;
import org.jboss.arquillian.container.spi.client.container.LifecycleException;
+import org.jboss.arquillian.protocol.servlet.ServletMethodExecutor;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
+import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
@@ -160,7 +163,7 @@ public class TomEEWebappContainer extend
}
container = new RemoteServer();
- container.start();
+ container.start(Arrays.asList("-Dorg.apache.openejb.servlet.filters=" + ArquillianFilterRunner.class.getName() + "=" + ServletMethodExecutor.ARQUILLIAN_SERVLET_MAPPING), "start", true);
} catch (Exception e) {
throw new LifecycleException("Unable to start remote container", e);
}
Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1527471&r1=1527470&r2=1527471&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Mon Sep 30 07:44:54 2013
@@ -41,6 +41,8 @@ import org.apache.catalina.deploy.Contex
import org.apache.catalina.deploy.ContextResource;
import org.apache.catalina.deploy.ContextResourceLink;
import org.apache.catalina.deploy.ContextTransaction;
+import org.apache.catalina.deploy.FilterDef;
+import org.apache.catalina.deploy.FilterMap;
import org.apache.catalina.deploy.NamingResources;
import org.apache.catalina.deploy.ResourceBase;
import org.apache.catalina.ha.CatalinaCluster;
@@ -937,6 +939,26 @@ public class TomcatWebAppBuilder impleme
}
}
initContextLoader(standardContext);
+
+ // used to add custom filters first - our arquillian integration uses it for instance
+ // needs to be done now (= before start event) because of addFilterMapBefore() usage
+ final String filters = SystemInstance.get().getProperty("org.apache.openejb.servlet.filters");
+ if (filters != null) {
+ final String[] names = filters.split(",");
+ for (final String name : names) {
+ final String[] clazzMapping = name.split("=");
+
+ final FilterDef filterDef = new FilterDef();
+ filterDef.setFilterClass(clazzMapping[0]);
+ filterDef.setFilterName(clazzMapping[0]);
+ standardContext.addFilterDef(filterDef);
+
+ final FilterMap filterMap = new FilterMap();
+ filterMap.setFilterName(clazzMapping[0]);
+ filterMap.addURLPattern(clazzMapping[1]);
+ standardContext.addFilterMapBefore(filterMap);
+ }
+ }
}
private void initContextLoader(final StandardContext standardContext) {
@@ -1527,7 +1549,7 @@ public class TomcatWebAppBuilder impleme
}
}
-
+ // owb integration filters
final WebBeansContext webBeansContext = getWebBeansContext(contextInfo);
if (webBeansContext != null) {
// it is important to have a begin and a end listener