Author: markt Date: Sun Oct 3 20:53:49 2010 New Revision: 1004047 URL: http://svn.apache.org/viewvc?rev=1004047&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49937 Use InstanceManager to create AsyncListeners so annotations are processed. Based on a patch by David Jencks.
Modified: tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=1004047&r1=1004046&r2=1004047&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java Sun Oct 3 20:53:49 2010 @@ -17,12 +17,16 @@ package org.apache.catalina.core; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import javax.naming.NamingException; import javax.servlet.AsyncContext; import javax.servlet.AsyncEvent; import javax.servlet.AsyncListener; @@ -42,6 +46,7 @@ import org.apache.coyote.ActionCode; import org.apache.coyote.RequestInfo; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.InstanceManager; /** * * @author fhanik @@ -59,8 +64,8 @@ public class AsyncContextImpl implements private Context context = null; private long timeout = -1; private AsyncEvent event = null; - private Request request; + private volatile InstanceManager instanceManager; public AsyncContextImpl(Request request) { if (log.isDebugEnabled()) { @@ -203,18 +208,29 @@ public class AsyncContextImpl implements listeners.add(wrapper); } + @SuppressWarnings("unchecked") @Override public <T extends AsyncListener> T createListener(Class<T> clazz) throws ServletException { T listener = null; try { - listener = clazz.newInstance(); + listener = (T) getInstanceManager().newInstance(clazz.getName(), + clazz.getClassLoader()); } catch (InstantiationException e) { ServletException se = new ServletException(e); throw se; } catch (IllegalAccessException e) { ServletException se = new ServletException(e); throw se; + } catch (InvocationTargetException e) { + ServletException se = new ServletException(e); + throw se; + } catch (NamingException e) { + ServletException se = new ServletException(e); + throw se; + } catch (ClassNotFoundException e) { + ServletException se = new ServletException(e); + throw se; } return listener; } @@ -374,6 +390,20 @@ public class AsyncContextImpl implements } } + private InstanceManager getInstanceManager() { + if (instanceManager == null) { + if (context instanceof StandardContext) { + instanceManager = ((StandardContext)context).getInstanceManager(); + } else { + instanceManager = new DefaultInstanceManager(null, + new HashMap<String, Map<String, String>>(), + context, + getClass().getClassLoader()); + } + } + return instanceManager; + } + private static class DebugException extends Exception { private static final long serialVersionUID = 1L; } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1004047&r1=1004046&r2=1004047&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Sun Oct 3 20:53:49 2010 @@ -41,7 +41,12 @@ <changelog> <fix> <bug>49922</bug>: Don't add filter twice to filter chain if the - filter matches more than one URL pattern and/or Servlet name. + filter matches more than one URL pattern and/or Servlet name. (markt) + </fix> + <fix> + <bug>49937</bug>: Use an InstanceManager when creating an AsyncListener + through the AsyncContext to ensure annotations are processed. Based on a + patch by David Jencks. (markt) </fix> </changelog> </subsection> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org