Author: remm Date: Wed Mar 20 20:10:41 2013 New Revision: 1459028 URL: http://svn.apache.org/r1459028 Log: - I am pretty sure the point of the upgrade(Class) method is to be able to inject, so the instance manager has to be used. - Add InstanceManager on Context, and also add newInstance(Class) - not really needed, but it probably doesn't hurt.
Modified: tomcat/trunk/java/org/apache/catalina/Context.java tomcat/trunk/java/org/apache/catalina/connector/Request.java tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java tomcat/trunk/java/org/apache/tomcat/InstanceManager.java Modified: tomcat/trunk/java/org/apache/catalina/Context.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Context.java?rev=1459028&r1=1459027&r2=1459028&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Context.java (original) +++ tomcat/trunk/java/org/apache/catalina/Context.java Wed Mar 20 20:10:41 2013 @@ -35,6 +35,7 @@ import org.apache.catalina.deploy.Filter import org.apache.catalina.deploy.LoginConfig; import org.apache.catalina.deploy.NamingResources; import org.apache.catalina.deploy.SecurityConstraint; +import org.apache.tomcat.InstanceManager; import org.apache.tomcat.JarScanner; /** @@ -661,6 +662,16 @@ public interface Context extends Contain */ public boolean getLogEffectiveWebXml(); + /** + * Get the instance manager associated with this context. + */ + public InstanceManager getInstanceManager(); + + /** + * Set the instance manager associated with this context. + */ + public void setInstanceManager(InstanceManager instanceManager); + // --------------------------------------------------------- Public Methods Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1459028&r1=1459027&r2=1459028&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Wed Mar 20 20:10:41 2013 @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; +import java.lang.reflect.InvocationTargetException; import java.nio.charset.Charset; import java.security.Principal; import java.text.SimpleDateFormat; @@ -40,6 +41,7 @@ import java.util.TimeZone; import java.util.TreeMap; import java.util.concurrent.atomic.AtomicBoolean; +import javax.naming.NamingException; import javax.security.auth.Subject; import javax.servlet.AsyncContext; import javax.servlet.DispatcherType; @@ -1884,14 +1886,15 @@ public class Request * * @since Servlet 3.1 */ + @SuppressWarnings("unchecked") @Override public <T extends HttpUpgradeHandler> T upgrade( Class<T> httpUpgradeHandlerClass) throws java.io.IOException { T handler; try { - handler = httpUpgradeHandlerClass.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { + handler = (T) context.getInstanceManager().newInstance(httpUpgradeHandlerClass); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NamingException e) { throw new IOException(e); } Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1459028&r1=1459027&r2=1459028&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Wed Mar 20 20:10:41 2013 @@ -1315,7 +1315,7 @@ public class ApplicationContext throws ServletException { try { T listener = - (T) context.getInstanceManager().newInstance(c.getName()); + (T) context.getInstanceManager().newInstance(c); if (listener instanceof ServletContextListener || listener instanceof ServletContextAttributeListener || listener instanceof ServletRequestListener || @@ -1337,9 +1337,8 @@ public class ApplicationContext throw new ServletException(e); } catch (InstantiationException e) { throw new ServletException(e); - } catch (ClassNotFoundException e) { - throw new ServletException(e); - } } + } + } @Override Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1459028&r1=1459027&r2=1459028&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Wed Mar 20 20:10:41 2013 @@ -132,6 +132,11 @@ public class DefaultInstanceManager impl } @Override + public Object newInstance(Class<?> clazz) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException { + return newInstance(clazz.newInstance(), clazz); + } + + @Override public Object newInstance(String className) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException, ClassNotFoundException { Class<?> clazz = loadClassMaybePrivileged(className, classLoader); return newInstance(clazz.newInstance(), clazz); Modified: tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java?rev=1459028&r1=1459027&r2=1459028&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java Wed Mar 20 20:10:41 2013 @@ -58,6 +58,7 @@ import org.apache.catalina.deploy.Securi import org.apache.catalina.util.ContextName; import org.apache.catalina.util.LifecycleMBeanBase; import org.apache.juli.logging.Log; +import org.apache.tomcat.InstanceManager; import org.apache.tomcat.JarScanner; import org.apache.tomcat.util.res.StringManager; @@ -706,4 +707,10 @@ public class FailedContext extends Lifec @Override public Map<String, String> findPreDestroyMethods() { return null; } + + @Override + public InstanceManager getInstanceManager() { return null; } + + @Override + public void setInstanceManager(InstanceManager instanceManager) { /* NO-OP */ } } \ No newline at end of file Modified: tomcat/trunk/java/org/apache/tomcat/InstanceManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/InstanceManager.java?rev=1459028&r1=1459027&r2=1459028&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/InstanceManager.java (original) +++ tomcat/trunk/java/org/apache/tomcat/InstanceManager.java Wed Mar 20 20:10:41 2013 @@ -25,6 +25,10 @@ import javax.naming.NamingException; */ public interface InstanceManager { + public Object newInstance(Class<?> clazz) + throws IllegalAccessException, InvocationTargetException, NamingException, + InstantiationException; + public Object newInstance(String className) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException, ClassNotFoundException; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org