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: [email protected]
For additional commands, e-mail: [email protected]