Index: tests/src/test/java/org/jboss/weld/test/tomcat/lookup/CatFilter.java =================================================================== --- tests/src/test/java/org/jboss/weld/test/tomcat/lookup/CatFilter.java Mon Mar 01 16:34:18 CET 2010 +++ tests/src/test/java/org/jboss/weld/test/tomcat/lookup/CatFilter.java Mon Mar 01 16:34:18 CET 2010 @@ -0,0 +1,32 @@ +package org.jboss.weld.test.tomcat.lookup; + +import javax.inject.Inject; +import javax.servlet.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class CatFilter implements Filter +{ + + @Inject Sewer sewer; + + public void init(FilterConfig filterConfig) throws ServletException + { + isSewerNameOk(); + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException + { + ((HttpServletResponse)response).setStatus(isSewerNameOk() ? HttpServletResponse.SC_OK : HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } + + public void destroy() + { + isSewerNameOk(); + } + + private boolean isSewerNameOk() throws NullPointerException + { + return Sewer.NAME.equals(sewer.getName()); + } +} Index: tests/src/test/resources/org/jboss/weld/test/tomcat/lookup/web-filter-injection.xml =================================================================== --- tests/src/test/resources/org/jboss/weld/test/tomcat/lookup/web-filter-injection.xml Mon Mar 01 16:02:50 CET 2010 +++ tests/src/test/resources/org/jboss/weld/test/tomcat/lookup/web-filter-injection.xml Mon Mar 01 16:02:50 CET 2010 @@ -0,0 +1,28 @@ + + + + + JBoss Test Harness + + + org.jboss.testharness.impl.runner.servlet.HarnessServletListener + + + + org.jboss.weld.environment.servlet.Listener + + + + Cat Filter + org.jboss.weld.test.tomcat.lookup.CatFilter + + + + Cat Filter + /cat + + + Index: tests/src/test/java/org/jboss/weld/test/tomcat/lookup/BatServlet.java =================================================================== --- tests/src/test/java/org/jboss/weld/test/tomcat/lookup/BatServlet.java Mon Mar 01 16:45:57 CET 2010 +++ tests/src/test/java/org/jboss/weld/test/tomcat/lookup/BatServlet.java Mon Mar 01 16:45:57 CET 2010 @@ -0,0 +1,26 @@ +package org.jboss.weld.test.tomcat.lookup; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class BatServlet extends HttpServlet +{ + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + resp.setStatus(getStatus(req)); + } + + private int getStatus(HttpServletRequest req) + { + return req.getAttribute(BatListener.BAT_ATTRIBUTE_NAME) == Boolean.TRUE && + req.getSession().getAttribute(BatListener.BAT_ATTRIBUTE_NAME) == Boolean.TRUE && + req.getSession().getServletContext().getAttribute(BatListener.BAT_ATTRIBUTE_NAME) == Boolean.TRUE + ? HttpServletResponse.SC_OK + : HttpServletResponse.SC_INTERNAL_SERVER_ERROR; + } + +} Index: tests/src/test/resources/org/jboss/weld/test/tomcat/lookup/web-listener-injection.xml =================================================================== --- tests/src/test/resources/org/jboss/weld/test/tomcat/lookup/web-listener-injection.xml Mon Mar 01 16:34:19 CET 2010 +++ tests/src/test/resources/org/jboss/weld/test/tomcat/lookup/web-listener-injection.xml Mon Mar 01 16:34:19 CET 2010 @@ -0,0 +1,32 @@ + + + + + JBoss Test Harness + + + org.jboss.testharness.impl.runner.servlet.HarnessServletListener + + + + org.jboss.weld.environment.servlet.Listener + + + + org.jboss.weld.test.tomcat.lookup.BatListener + + + + Bat Servlet + org.jboss.weld.test.tomcat.lookup.BatServlet + + + + Bat Servlet + /bat + + + Index: tests/src/test/java/org/jboss/weld/test/tomcat/lookup/ListenerInjectionTest.java =================================================================== --- tests/src/test/java/org/jboss/weld/test/tomcat/lookup/ListenerInjectionTest.java Mon Mar 01 16:37:40 CET 2010 +++ tests/src/test/java/org/jboss/weld/test/tomcat/lookup/ListenerInjectionTest.java Mon Mar 01 16:37:40 CET 2010 @@ -0,0 +1,55 @@ +package org.jboss.weld.test.tomcat.lookup; + + + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.jboss.testharness.impl.packaging.Artifact; +import org.jboss.testharness.impl.packaging.Classes; +import org.jboss.testharness.impl.packaging.IntegrationTest; +import org.jboss.testharness.impl.packaging.Resource; +import org.jboss.testharness.impl.packaging.Resources; +import org.jboss.weld.test.AbstractWeldTest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +@Artifact(addCurrentPackage=false) +@IntegrationTest(runLocally=true) +@Resources({ + @Resource(source="context-servlet-injection.xml", destination="/META-INF/context.xml"), + @Resource(source="web-listener-injection.xml", destination="/WEB-INF/web.xml") +}) +@Classes({ + BatListener.class, + BatServlet.class, + Sewer.class +}) +public class ListenerInjectionTest extends AbstractWeldTest +{ + + private static final Logger log = LoggerFactory.getLogger(ListenerInjectionTest.class); + + @Override + @BeforeClass + public void beforeClass() throws Throwable + { + log.info("To run the servlet listener injection test you must add tomcat-support.jar to $CATALINA_BASE/lib"); + super.beforeClass(); + } + + + @Test + public void testListenerInjection() throws Exception + { + HttpClient client = new HttpClient(); + HttpMethod method = new GetMethod(getContextPath() + "/bat"); + int sc = client.executeMethod(method); + System.out.println("sc = " + sc); + assert sc == HttpServletResponse.SC_OK; + } +} Index: tests/src/test/java/org/jboss/weld/test/tomcat/lookup/FilterInjectionTest.java =================================================================== --- tests/src/test/java/org/jboss/weld/test/tomcat/lookup/FilterInjectionTest.java Mon Mar 01 16:22:46 CET 2010 +++ tests/src/test/java/org/jboss/weld/test/tomcat/lookup/FilterInjectionTest.java Mon Mar 01 16:22:46 CET 2010 @@ -0,0 +1,52 @@ +package org.jboss.weld.test.tomcat.lookup; + + + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.jboss.testharness.impl.packaging.Artifact; +import org.jboss.testharness.impl.packaging.Classes; +import org.jboss.testharness.impl.packaging.IntegrationTest; +import org.jboss.testharness.impl.packaging.Resource; +import org.jboss.testharness.impl.packaging.Resources; +import org.jboss.weld.test.AbstractWeldTest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +@Artifact(addCurrentPackage=false) +@IntegrationTest(runLocally=true) +@Resources({ + @Resource(source="context-servlet-injection.xml", destination="/META-INF/context.xml"), + @Resource(source="web-filter-injection.xml", destination="/WEB-INF/web.xml") +}) +@Classes({ + CatFilter.class, + Sewer.class +}) +public class FilterInjectionTest extends AbstractWeldTest +{ + + private static final Logger log = LoggerFactory.getLogger(FilterInjectionTest.class); + + @Override + @BeforeClass + public void beforeClass() throws Throwable + { + log.info("To run the servlet filter injection test you must add tomcat-support.jar to $CATALINA_BASE/lib"); + super.beforeClass(); + } + + + @Test + public void testFilterInjection() throws Exception + { + HttpClient client = new HttpClient(); + HttpMethod method = new GetMethod(getContextPath() + "/cat"); + assert client.executeMethod(method) == HttpServletResponse.SC_OK; + } +} Index: tests/src/test/java/org/jboss/weld/test/tomcat/lookup/BatListener.java =================================================================== --- tests/src/test/java/org/jboss/weld/test/tomcat/lookup/BatListener.java Mon Mar 01 16:45:57 CET 2010 +++ tests/src/test/java/org/jboss/weld/test/tomcat/lookup/BatListener.java Mon Mar 01 16:45:57 CET 2010 @@ -0,0 +1,64 @@ +package org.jboss.weld.test.tomcat.lookup; + +import org.jboss.weld.servlet.api.ServletListener; + +import javax.inject.Inject; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletRequestEvent; +import javax.servlet.http.HttpSessionEvent; + +public class BatListener implements ServletListener +{ + public static final String BAT_ATTRIBUTE_NAME = "batAttribute"; + + @Inject Sewer sewer; + + public void contextInitialized(ServletContextEvent sce) + { + if (isSewerNameOk()) { + sce.getServletContext().setAttribute(BAT_ATTRIBUTE_NAME, Boolean.TRUE); + } + } + + public void contextDestroyed(ServletContextEvent sce) + { + isSewerNameOk(); + } + + public void requestInitialized(ServletRequestEvent sre) + { + if (isSewerNameOk()) { + sre.getServletRequest().setAttribute(BAT_ATTRIBUTE_NAME, Boolean.TRUE); + } + } + + public void requestDestroyed(ServletRequestEvent sre) + { + isSewerNameOk(); + } + + public void sessionCreated(HttpSessionEvent se) + { + if (isSewerNameOk()) { + se.getSession().setAttribute(BAT_ATTRIBUTE_NAME, Boolean.TRUE); + } + } + + public void sessionDestroyed(HttpSessionEvent se) + { + isSewerNameOk(); + } + + private boolean isSewerNameOk() throws NullPointerException + { + try + { + return Sewer.NAME.equals(sewer.getName()); + } + catch (NullPointerException e) + { + e.printStackTrace(); + return false; + } + } +}