geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dwo...@apache.org
Subject svn commit: r686318 [2/3] - in /geronimo/server/trunk/repository/org/apache/tomcat: ./ catalina/6.0.18-G678601/ jasper/6.0.18-G678601/
Date Fri, 15 Aug 2008 18:58:36 GMT

Modified: geronimo/server/trunk/repository/org/apache/tomcat/TOMCAT_6_0_18-G678601.patch
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/repository/org/apache/tomcat/TOMCAT_6_0_18-G678601.patch?rev=686318&r1=686317&r2=686318&view=diff
==============================================================================
--- geronimo/server/trunk/repository/org/apache/tomcat/TOMCAT_6_0_18-G678601.patch (original)
+++ geronimo/server/trunk/repository/org/apache/tomcat/TOMCAT_6_0_18-G678601.patch Fri Aug 15 11:58:35 2008
@@ -1,2834 +1,3066 @@
-Index: java/org/apache/InstanceManager.java
-===================================================================
---- java/org/apache/InstanceManager.java	(revision 0)
-+++ java/org/apache/InstanceManager.java	(revision 0)
-@@ -0,0 +1,45 @@
-+/*
-+ * 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;
-+
-+import java.lang.reflect.InvocationTargetException;
-+
-+import javax.naming.NamingException;
-+
-+/**
-+ * @version $Rev:$ $Date:$
-+ */
-+public interface InstanceManager {
-+
-+    public Object newInstance(String className)
-+    	throws IllegalAccessException, InvocationTargetException, NamingException, 
-+    		InstantiationException, ClassNotFoundException;
-+
-+    public Object newInstance(String fqcn, ClassLoader classLoader) 
-+    	throws IllegalAccessException, InvocationTargetException, NamingException, 
-+    		InstantiationException, ClassNotFoundException;
-+
-+    public void newInstance(Object o) 
-+		throws IllegalAccessException, InvocationTargetException, NamingException;
-+
-+    public void destroyInstance(Object o)
-+    	throws IllegalAccessException, InvocationTargetException;
-+}
-
-Property changes on: java/org/apache/InstanceManager.java
-___________________________________________________________________
-Name: svn:eol-style
-   + native
-
-Index: java/org/apache/jasper/JspCompilationContext.java
-===================================================================
---- java/org/apache/jasper/JspCompilationContext.java	(revision 3168)
-+++ java/org/apache/jasper/JspCompilationContext.java	(working copy)
-@@ -609,12 +609,7 @@
-         try {
-             getJspLoader();
-             
--            String name;
--            if (isTagFile()) {
--                name = tagInfo.getTagClassName();
--            } else {
--                name = getServletPackageName() + "." + getServletClassName();
--            }
-+            String name = getFQCN();
-             servletClass = jspLoader.loadClass(name);
-         } catch (ClassNotFoundException cex) {
-             throw new JasperException(Localizer.getMessage("jsp.error.unable.load"),
-@@ -627,6 +622,16 @@
-         return servletClass;
-     }
- 
-+    public String getFQCN() {
-+        String name;
-+        if (isTagFile()) {
-+            name = tagInfo.getTagClassName();
-+        } else {
-+            name = getServletPackageName() + "." + getServletClassName();
-+        }
-+        return name;
-+    }
-+
-     // ==================== protected methods ==================== 
- 
-     static Object outputDirLock = new Object();
-Index: java/org/apache/jasper/runtime/TagHandlerPool.java
-===================================================================
---- java/org/apache/jasper/runtime/TagHandlerPool.java	(revision 3168)
-+++ java/org/apache/jasper/runtime/TagHandlerPool.java	(working copy)
-@@ -21,7 +21,7 @@
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.tagext.Tag;
- 
--import org.apache.AnnotationProcessor;
-+import org.apache.InstanceManager;
- import org.apache.jasper.Constants;
- import org.apache.juli.logging.Log;
- import org.apache.juli.logging.LogFactory;
-@@ -42,7 +42,7 @@
-     
-     // index of next available tag handler
-     private int current;
--    protected AnnotationProcessor annotationProcessor = null;
-+    protected InstanceManager instanceManager = null;
- 
-     public static TagHandlerPool getTagHandlerPool( ServletConfig config) {
-         TagHandlerPool result=null;
-@@ -78,8 +78,7 @@
-         }
-         this.handlers = new Tag[maxSize];
-         this.current = -1;
--        this.annotationProcessor = 
--            (AnnotationProcessor) config.getServletContext().getAttribute(AnnotationProcessor.class.getName());
-+        instanceManager = InstanceManagerFactory.getInstanceManager(config);
-     }
- 
-     /**
-@@ -112,7 +111,7 @@
-      * @throws JspException if a tag handler cannot be instantiated
-      */
-     public Tag get(Class handlerClass) throws JspException {
--	Tag handler = null;
-+    	Tag handler;
-         synchronized( this ) {
-             if (current >= 0) {
-                 handler = handlers[current--];
-@@ -123,9 +122,13 @@
-         // Out of sync block - there is no need for other threads to
-         // wait for us to construct a tag for this thread.
-         try {
--            Tag instance = (Tag) handlerClass.newInstance();
--            AnnotationHelper.postConstruct(annotationProcessor, instance);
--            return instance;
-+        	if (Constants.USE_INSTANCE_MANAGER_FOR_TAGS) {
-+        		return (Tag) instanceManager.newInstance(handlerClass.getName(), handlerClass.getClassLoader());
-+        	} else {
-+                Tag instance = (Tag) handlerClass.newInstance();
-+                instanceManager.newInstance(instance);
-+                return instance;
-+        	}
-         } catch (Exception e) {
-             throw new JspException(e.getMessage(), e);
-         }
-@@ -147,13 +150,11 @@
-         }
-         // There is no need for other threads to wait for us to release
-         handler.release();
--        if (annotationProcessor != null) {
--            try {
--                AnnotationHelper.preDestroy(annotationProcessor, handler);
--            } catch (Exception e) {
--                log.warn("Error processing preDestroy on tag instance of " 
--                        + handler.getClass().getName(), e);
--            }
-+        try {
-+            instanceManager.destroyInstance(handler);
-+        } catch (Exception e) {
-+            log.warn("Error processing preDestroy on tag instance of "
-+                    + handler.getClass().getName(), e);
-         }
-     }
- 
-@@ -164,13 +165,11 @@
-     public synchronized void release() {
-         for (int i = current; i >= 0; i--) {
-             handlers[i].release();
--            if (annotationProcessor != null) {
--                try {
--                    AnnotationHelper.preDestroy(annotationProcessor, handlers[i]);
--                } catch (Exception e) {
--                    log.warn("Error processing preDestroy on tag instance of " 
--                            + handlers[i].getClass().getName(), e);
--                }
-+            try {
-+                instanceManager.destroyInstance(handlers[i]);
-+            } catch (Exception e) {
-+                log.warn("Error processing preDestroy on tag instance of "
-+                        + handlers[i].getClass().getName(), e);
-             }
-         }
-     }
-Index: java/org/apache/jasper/runtime/AnnotationHelper.java
-===================================================================
---- java/org/apache/jasper/runtime/AnnotationHelper.java	(revision 3168)
-+++ java/org/apache/jasper/runtime/AnnotationHelper.java	(working copy)
-@@ -1,61 +0,0 @@
--/*
-- * 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.jasper.runtime;
--
--import java.lang.reflect.InvocationTargetException;
--
--import javax.naming.NamingException;
--
--import org.apache.AnnotationProcessor;
--
--
--/**
-- * Verify the annotation and Process it.
-- *
-- * @author Fabien Carrion
-- * @author Remy Maucherat
-- * @version $Revision: 467222 $, $Date: 2006-10-23 23:17:11 -0400 (Mon, 23 Oct 2006) $
-- */
--public class AnnotationHelper {
--
--    
--    /**
--     * Call postConstruct method on the specified instance. Note: In Jasper, this
--     * calls naming resources injection as well.
--     */
--    public static void postConstruct(AnnotationProcessor processor, Object instance)
--        throws IllegalAccessException, InvocationTargetException, NamingException {
--        if (processor != null) {
--            processor.processAnnotations(instance);
--            processor.postConstruct(instance);
--        }
--    }
--    
--    
--    /**
--     * Call preDestroy method on the specified instance.
--     */
--    public static void preDestroy(AnnotationProcessor processor, Object instance)
--        throws IllegalAccessException, InvocationTargetException {
--        if (processor != null) {
--            processor.preDestroy(instance);
--        }
--    }
--    
--
--}
-Index: java/org/apache/jasper/runtime/InstanceManagerFactory.java
-===================================================================
---- java/org/apache/jasper/runtime/InstanceManagerFactory.java	(revision 0)
-+++ java/org/apache/jasper/runtime/InstanceManagerFactory.java	(revision 0)
-@@ -0,0 +1,44 @@
-+/*
-+ * 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.jasper.runtime;
-+
-+import javax.servlet.ServletConfig;
-+
-+import org.apache.InstanceManager;
-+
-+/**
-+ * @version $Rev:$ $Date:$
-+ */
-+public class InstanceManagerFactory {
-+
-+    private InstanceManagerFactory() {
-+    }
-+
-+    public static InstanceManager getInstanceManager(ServletConfig config) {
-+        InstanceManager instanceManager = 
-+        	(InstanceManager) config.getServletContext().getAttribute(InstanceManager.class.getName());
-+        if (instanceManager == null) {
-+            throw new IllegalStateException("No org.apache.InstanceManager set in ServletContext");
-+        }
-+        return instanceManager;
-+    }
-+
-+}
-
-Property changes on: java/org/apache/jasper/runtime/InstanceManagerFactory.java
-___________________________________________________________________
-Name: svn:eol-style
-   + native
-
-Index: java/org/apache/jasper/servlet/JspServletWrapper.java
-===================================================================
---- java/org/apache/jasper/servlet/JspServletWrapper.java	(revision 3168)
-+++ java/org/apache/jasper/servlet/JspServletWrapper.java	(working copy)
-@@ -31,7 +31,7 @@
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.jsp.tagext.TagInfo;
- 
--import org.apache.AnnotationProcessor;
-+import org.apache.InstanceManager;
- import org.apache.jasper.JasperException;
- import org.apache.jasper.JspCompilationContext;
- import org.apache.jasper.Options;
-@@ -39,6 +39,7 @@
- import org.apache.jasper.compiler.JavacErrorDetail;
- import org.apache.jasper.compiler.JspRuntimeContext;
- import org.apache.jasper.compiler.Localizer;
-+import org.apache.jasper.runtime.InstanceManagerFactory;
- import org.apache.jasper.runtime.JspSourceDependent;
- import org.apache.juli.logging.Log;
- import org.apache.juli.logging.LogFactory;
-@@ -68,7 +69,6 @@
- 
-     private Servlet theServlet;
-     private String jspUri;
--    private Class servletClass;
-     private Class tagHandlerClass;
-     private JspCompilationContext ctxt;
-     private long available = 0L;
-@@ -139,15 +139,10 @@
-                     destroy();
-                     
-                     Servlet servlet = null;
--                    
-+
-                     try {
--                        servletClass = ctxt.load();
--                        servlet = (Servlet) servletClass.newInstance();
--                        AnnotationProcessor annotationProcessor = (AnnotationProcessor) config.getServletContext().getAttribute(AnnotationProcessor.class.getName());
--                        if (annotationProcessor != null) {
--                           annotationProcessor.processAnnotations(servlet);
--                           annotationProcessor.postConstruct(servlet);
--                        }
-+                        InstanceManager instanceManager = InstanceManagerFactory.getInstanceManager(config);
-+                        servlet = (Servlet) instanceManager.newInstance(ctxt.getFQCN(), ctxt.getJspLoader());
-                     } catch (IllegalAccessException e) {
-                         throw new JasperException(e);
-                     } catch (InstantiationException e) {
-@@ -423,15 +418,13 @@
-     public void destroy() {
-         if (theServlet != null) {
-             theServlet.destroy();
--            AnnotationProcessor annotationProcessor = (AnnotationProcessor) config.getServletContext().getAttribute(AnnotationProcessor.class.getName());
--            if (annotationProcessor != null) {
--                try {
--                    annotationProcessor.preDestroy(theServlet);
--                } catch (Exception e) {
--                    // Log any exception, since it can't be passed along
--                    log.error(Localizer.getMessage("jsp.error.file.not.found",
--                           e.getMessage()), e);
--                }
-+            InstanceManager instanceManager = InstanceManagerFactory.getInstanceManager(config);
-+            try {
-+                instanceManager.destroyInstance(theServlet);
-+            } catch (Exception e) {
-+                // Log any exception, since it can't be passed along
-+                log.error(Localizer.getMessage("jsp.error.file.not.found",
-+                        e.getMessage()), e);
-             }
-         }
-     }
-Index: java/org/apache/jasper/Constants.java
-===================================================================
---- java/org/apache/jasper/Constants.java	(revision 3168)
-+++ java/org/apache/jasper/Constants.java	(working copy)
-@@ -199,4 +199,7 @@
-      */
-     public static final String SESSION_PARAMETER_NAME = "jsessionid";
- 
-+    public static final boolean USE_INSTANCE_MANAGER_FOR_TAGS =
-+        Boolean.valueOf(System.getProperty("org.apache.jasper.Constants.USE_INSTANCE_MANAGER_FOR_TAGS", "false")).booleanValue();
-+
- }
-Index: java/org/apache/jasper/compiler/Generator.java
+Index: java/org/apache/catalina/core/DefaultInstanceManager.java
 ===================================================================
---- java/org/apache/jasper/compiler/Generator.java	(revision 3168)
-+++ java/org/apache/jasper/compiler/Generator.java	(working copy)
-@@ -73,8 +73,8 @@
- 
-     private static final String VAR_EXPRESSIONFACTORY = 
-         System.getProperty("org.apache.jasper.compiler.Generator.VAR_EXPRESSIONFACTORY", "_el_expressionfactory");
--    private static final String VAR_ANNOTATIONPROCESSOR = 
--        System.getProperty("org.apache.jasper.compiler.Generator.VAR_ANNOTATIONPROCESSOR", "_jsp_annotationprocessor");
-+    private static final String VAR_INSTANCEMANAGER =
-+        System.getProperty("org.apache.jasper.compiler.Generator.VAR_INSTANCEMANAGER", "_jsp_instancemanager");
- 
-     private ServletWriter out;
- 
-@@ -413,14 +413,14 @@
-         }
-         out.println(".getServletContext()).getExpressionFactory();");
- 
--        out.printin(VAR_ANNOTATIONPROCESSOR);
--        out.print(" = (org.apache.AnnotationProcessor) ");
-+        out.printin(VAR_INSTANCEMANAGER);
-+        out.print(" = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(");
-         if (ctxt.isTagFile()) {
-             out.print("config");
-         } else {
-             out.print("getServletConfig()");
-         }
--        out.println(".getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());");
-+        out.println(");");
- 
-         out.popIndent();
-         out.printil("}");
-@@ -524,8 +524,8 @@
-         out.printin("private javax.el.ExpressionFactory ");
-         out.print(VAR_EXPRESSIONFACTORY);
-         out.println(";");
--        out.printin("private org.apache.AnnotationProcessor ");
--        out.print(VAR_ANNOTATIONPROCESSOR);
-+        out.printin("private org.apache.InstanceManager ");
-+        out.print(VAR_INSTANCEMANAGER);
-         out.println(";");
-         out.println();
-     }
-@@ -2135,11 +2135,11 @@
- 
-             String tagHandlerClassName = JspUtil
-                     .getCanonicalName(tagHandlerClass);
--            out.printin(tagHandlerClassName);
--            out.print(" ");
--            out.print(tagHandlerVar);
--            out.print(" = ");
-             if (isPoolingEnabled && !(n.implementsJspIdConsumer())) {
-+                out.printin(tagHandlerClassName);
-+                out.print(" ");
-+                out.print(tagHandlerVar);
-+                out.print(" = ");
-                 out.print("(");
-                 out.print(tagHandlerClassName);
-                 out.print(") ");
-@@ -2148,14 +2148,7 @@
-                 out.print(tagHandlerClassName);
-                 out.println(".class);");
-             } else {
--                out.print("new ");
--                out.print(tagHandlerClassName);
--                out.println("();");
--                out.printin("org.apache.jasper.runtime.AnnotationHelper.postConstruct(");
--                out.print(VAR_ANNOTATIONPROCESSOR);
--                out.print(", ");
--                out.print(tagHandlerVar);
--                out.println(");");
-+                writeNewInstance(tagHandlerVar, tagHandlerClassName);
-             }
- 
-             // includes setting the context
-@@ -2213,8 +2206,7 @@
-                         out.println("[0]++;");
-                     }
-                     out.printin(tagHandlerVar);
--                    out
--                            .println(".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);");
-+                    out.println(".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);");
-                     out.printin(tagHandlerVar);
-                     out.println(".doInitBody();");
- 
-@@ -2240,6 +2232,40 @@
-             n.setEndJavaLine(out.getJavaLine());
+--- java/org/apache/catalina/core/DefaultInstanceManager.java	(revision 3176)
++++ java/org/apache/catalina/core/DefaultInstanceManager.java	(working copy)
+@@ -245,64 +245,70 @@
+             return;
          }
  
-+        private void writeNewInstance(String tagHandlerVar, String tagHandlerClassName) {
-+        	if (Constants.USE_INSTANCE_MANAGER_FOR_TAGS) {
-+        		out.printin(tagHandlerClassName);
-+        		out.print(" ");
-+        		out.print(tagHandlerVar);
-+        		out.print(" = (");
-+        		out.print(tagHandlerClassName);
-+        		out.print(")");
-+        		out.print(VAR_INSTANCEMANAGER);
-+        		out.print(".newInstance(\"");
-+        		out.print(tagHandlerClassName);
-+        		out.println("\", this.getClass().getClassLoader());");
-+        	} else {
-+        		out.printin(tagHandlerClassName);
-+        		out.print(" ");
-+        		out.print(tagHandlerVar);
-+        		out.print(" = (");
-+        		out.print("new ");
-+        		out.print(tagHandlerClassName);
-+        		out.println("());");
-+        		out.printin(VAR_INSTANCEMANAGER);
-+        		out.print(".newInstance(");
-+        		out.print(tagHandlerVar);
-+        		out.println(");");
-+        	}
-+        }
-+
-+        private void writeDestroyInstance(String tagHandlerVar) {
-+            out.printin(VAR_INSTANCEMANAGER);
-+            out.print(".destroyInstance(");
-+            out.print(tagHandlerVar);
-+            out.println(");");
-+        }
-+
-         private void generateCustomEnd(Node.CustomTag n, String tagHandlerVar,
-                 String tagEvalVar, String tagPushBodyCountVar) {
- 
-@@ -2301,11 +2327,7 @@
-                 } else {
-                     out.printin(tagHandlerVar);
-                     out.println(".release();");
--                    out.printin("org.apache.jasper.runtime.AnnotationHelper.preDestroy(");
--                    out.print(VAR_ANNOTATIONPROCESSOR);
--                    out.print(", ");
--                    out.print(tagHandlerVar);
--                    out.println(");");
-+                    writeDestroyInstance(tagHandlerVar);
-                 }
-             }
-             if (isTagFile || isFragment) {
-@@ -2348,11 +2370,7 @@
-             } else {
-                 out.printin(tagHandlerVar);
-                 out.println(".release();");
--                out.printin("org.apache.jasper.runtime.AnnotationHelper.preDestroy(");
--                out.print(VAR_ANNOTATIONPROCESSOR);
--                out.print(", ");
--                out.print(tagHandlerVar);
--                out.println(");");
-+                writeDestroyInstance(tagHandlerVar);
-             }
- 
-             if (n.implementsTryCatchFinally()) {
-@@ -2384,21 +2402,8 @@
- 
-             String tagHandlerClassName = JspUtil
-                     .getCanonicalName(tagHandlerClass);
--            out.printin(tagHandlerClassName);
--            out.print(" ");
--            out.print(tagHandlerVar);
--            out.print(" = ");
--            out.print("new ");
--            out.print(tagHandlerClassName);
--            out.println("();");
-+            writeNewInstance(tagHandlerVar, tagHandlerClassName);
- 
--            // Resource injection
--            out.printin("org.apache.jasper.runtime.AnnotationHelper.postConstruct(");
--            out.print(VAR_ANNOTATIONPROCESSOR);
--            out.print(", ");
--            out.print(tagHandlerVar);
--            out.println(");");
--            
-             generateSetters(n, tagHandlerVar, handlerInfo, true);
- 
-             // JspIdConsumer (after context has been set)
-@@ -2451,11 +2456,7 @@
-             syncScriptingVars(n, VariableInfo.AT_END);
- 
-             // Resource injection
--            out.printin("org.apache.jasper.runtime.AnnotationHelper.preDestroy(");
--            out.print(VAR_ANNOTATIONPROCESSOR);
--            out.print(", ");
--            out.print(tagHandlerVar);
--            out.println(");");
-+            writeDestroyInstance(tagHandlerVar);
- 
-             n.setEndJavaLine(out.getJavaLine());
-         }
-Index: java/org/apache/AnnotationProcessor.java
-===================================================================
---- java/org/apache/AnnotationProcessor.java	(revision 3168)
-+++ java/org/apache/AnnotationProcessor.java	(working copy)
-@@ -1,37 +0,0 @@
--/*
-- * 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;
--
--import java.lang.reflect.InvocationTargetException;
--
--import javax.naming.NamingException;
--
--/**
-- * Comment
-- *
-- * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
-- * @version $Revision: 467222 $
-- */
--public interface AnnotationProcessor {
--    public void postConstruct(Object instance)
--        throws IllegalAccessException, InvocationTargetException;
--    public void preDestroy(Object instance)
--        throws IllegalAccessException, InvocationTargetException;
--    public void processAnnotations(Object instance)
--        throws IllegalAccessException, InvocationTargetException, NamingException;
--}
-Index: java/org/apache/catalina/core/DefaultInstanceManager.java
-===================================================================
---- java/org/apache/catalina/core/DefaultInstanceManager.java	(revision 0)
-+++ java/org/apache/catalina/core/DefaultInstanceManager.java	(revision 0)
-@@ -0,0 +1,437 @@
-+/*
-+ * 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.catalina.core;
-+
-+
-+import java.lang.reflect.Field;
-+import java.lang.reflect.InvocationTargetException;
-+import java.lang.reflect.Method;
-+import java.lang.reflect.Modifier;
-+import java.util.Map;
-+import java.util.Properties;
-+import java.security.AccessController;
-+import java.security.PrivilegedExceptionAction;
-+import java.security.PrivilegedActionException;
-+import java.io.InputStream;
-+import java.io.IOException;
-+
-+import javax.annotation.PostConstruct;
-+import javax.annotation.PreDestroy;
-+import javax.annotation.Resource;
-+import javax.ejb.EJB;
-+import javax.naming.Context;
-+import javax.naming.NamingException;
-+import javax.persistence.PersistenceContext;
-+import javax.persistence.PersistenceUnit;
-+import javax.xml.ws.WebServiceRef;
-+import javax.servlet.Filter;
-+import javax.servlet.Servlet;
-+
-+import org.apache.InstanceManager;
-+import org.apache.catalina.security.SecurityUtil;
-+import org.apache.catalina.ContainerServlet;
-+import org.apache.catalina.core.Constants;
-+import org.apache.catalina.util.StringManager;
-+
-+/**
-+ * @version $Rev:$ $Date:$
-+ */
-+public class DefaultInstanceManager implements InstanceManager {
-+
-+    private final Context context;
-+    private final Map<String, Map<String, String>> injectionMap;
-+    protected final ClassLoader classLoader;
-+    protected final ClassLoader containerClassLoader;
-+    protected boolean privileged;
-+    protected boolean ignoreAnnotations;
-+    private Properties restrictedFilters = new Properties();
-+    private Properties restrictedListeners = new Properties();
-+    private Properties restrictedServlets = new Properties();
-+
-+    public DefaultInstanceManager(Context context, Map<String, Map<String, String>> injectionMap, org.apache.catalina.Context catalinaContext, ClassLoader containerClassLoader) {
-+        classLoader = catalinaContext.getLoader().getClassLoader();
-+        privileged = catalinaContext.getPrivileged();
-+        this.containerClassLoader = containerClassLoader;
-+        ignoreAnnotations = catalinaContext.getIgnoreAnnotations();
-+        StringManager sm = StringManager.getManager(Constants.Package);
-+        try {
-+            InputStream is =
-+                this.getClass().getClassLoader().getResourceAsStream
-+                    ("org/apache/catalina/core/RestrictedServlets.properties");
-+            if (is != null) {
-+                restrictedServlets.load(is);
-+            } else {
-+                catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedServletsResource"));
-+            }
-+        } catch (IOException e) {
-+            catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedServletsResource"), e);
-+        }
-+
-+        try {
-+            InputStream is =
-+                    this.getClass().getClassLoader().getResourceAsStream
-+                            ("org/apache/catalina/core/RestrictedListeners.properties");
-+            if (is != null) {
-+                restrictedListeners.load(is);
-+            } else {
-+                catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedListenersResources"));
-+            }
-+        } catch (IOException e) {
-+            catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedListenersResources"), e);
-+        }
-+        try {
-+            InputStream is =
-+                    this.getClass().getClassLoader().getResourceAsStream
-+                            ("org/apache/catalina/core/RestrictedFilters.properties");
-+            if (is != null) {
-+                restrictedFilters.load(is);
-+            } else {
-+                catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedFiltersResources"));
-+            }
-+        } catch (IOException e) {
-+            catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedServletsResources"), e);
-+        }
-+        this.context = context;
-+        this.injectionMap = injectionMap;
-+    }
-+
-+    public Object newInstance(String className) throws IllegalAccessException, InvocationTargetException, NamingException, InstantiationException, ClassNotFoundException {
-+        Class clazz = loadClassMaybePrivileged(className, classLoader);
-+        return newInstance(clazz.newInstance(), clazz);
-+    }
-+
-+    public Object newInstance(final String className, final ClassLoader classLoader) throws IllegalAccessException, NamingException, InvocationTargetException, InstantiationException, ClassNotFoundException {
-+        Class clazz = classLoader.loadClass(className);
-+        return newInstance(clazz.newInstance(), clazz);
-+    }
-+
-+    public void newInstance(Object o) 
-+		throws IllegalAccessException, InvocationTargetException, NamingException {
-+    	newInstance(o, o.getClass());
-+    }
-+
-+    private Object newInstance(Object instance, Class clazz) throws IllegalAccessException, InvocationTargetException, NamingException {
-+        if (!ignoreAnnotations) {
-+            Map<String, String> injections = injectionMap.get(clazz.getName());
-+            processAnnotations(instance, injections);
-+            postConstruct(instance, clazz);
-+        }
-+        return instance;
-+    }
-+
-+    public void destroyInstance(Object instance) throws IllegalAccessException, InvocationTargetException {
-+        if (!ignoreAnnotations) {
-+            preDestroy(instance, instance.getClass());
-+        }
-+    }
-+
-+    /**
-+     * Call postConstruct method on the specified instance recursively from deepest superclass to actual class.
-+     *
-+     * @param instance object to call postconstruct methods on
-+     * @param clazz    (super) class to examine for postConstruct annotation.
-+     * @throws IllegalAccessException if postConstruct method is inaccessible.
-+     * @throws java.lang.reflect.InvocationTargetException
-+     *                                if call fails
-+     */
-+    protected void postConstruct(Object instance, Class clazz)
-+            throws IllegalAccessException, InvocationTargetException {
-+        Class superClass = clazz.getSuperclass();
-+        if (superClass != Object.class) {
-+            postConstruct(instance, superClass);
-+        }
+-        // Initialize fields annotations
+-        Field[] fields = instance.getClass().getDeclaredFields();
+-        for (Field field : fields) {
+-            if (injections != null && injections.containsKey(field.getName())) {
+-                lookupFieldResource(context, instance, field, injections.get(field.getName()));
+-            } else if (field.isAnnotationPresent(Resource.class)) {
+-                Resource annotation = field.getAnnotation(Resource.class);
+-                lookupFieldResource(context, instance, field, annotation.name());
+-            } else if (field.isAnnotationPresent(EJB.class)) {
+-                EJB annotation = field.getAnnotation(EJB.class);
+-                lookupFieldResource(context, instance, field, annotation.name());
+-            } else if (field.isAnnotationPresent(WebServiceRef.class)) {
+-                WebServiceRef annotation =
++        Class<?> clazz = instance.getClass();
 +
-+        Method[] methods = clazz.getDeclaredMethods();
-+        Method postConstruct = null;
-+        for (Method method : methods) {
-+            if (method.isAnnotationPresent(PostConstruct.class)) {
-+                if ((postConstruct != null)
-+                        || (method.getParameterTypes().length != 0)
-+                        || (Modifier.isStatic(method.getModifiers()))
-+                        || (method.getExceptionTypes().length > 0)
-+                        || (!method.getReturnType().getName().equals("void"))) {
-+                    throw new IllegalArgumentException("Invalid PostConstruct annotation");
-+                }
-+                postConstruct = method;
-+            }
-+        }
-+
-+        // At the end the postconstruct annotated
-+        // method is invoked
-+        if (postConstruct != null) {
-+            boolean accessibility = postConstruct.isAccessible();
-+            postConstruct.setAccessible(true);
-+            postConstruct.invoke(instance);
-+            postConstruct.setAccessible(accessibility);
-+        }
-+
-+    }
-+
-+
-+    /**
-+     * Call preDestroy method on the specified instance recursively from deepest superclass to actual class.
-+     *
-+     * @param instance object to call preDestroy methods on
-+     * @param clazz    (super) class to examine for preDestroy annotation.
-+     * @throws IllegalAccessException if preDestroy method is inaccessible.
-+     * @throws java.lang.reflect.InvocationTargetException
-+     *                                if call fails
-+     */
-+    protected void preDestroy(Object instance, Class clazz)
-+            throws IllegalAccessException, InvocationTargetException {
-+        Class superClass = clazz.getSuperclass();
-+        if (superClass != Object.class) {
-+            preDestroy(instance, superClass);
-+        }
-+
-+        Method[] methods = clazz.getDeclaredMethods();
-+        Method preDestroy = null;
-+        for (Method method : methods) {
-+            if (method.isAnnotationPresent(PreDestroy.class)) {
-+                if ((method.getParameterTypes().length != 0)
-+                        || (Modifier.isStatic(method.getModifiers()))
-+                        || (method.getExceptionTypes().length > 0)
-+                        || (!method.getReturnType().getName().equals("void"))) {
-+                    throw new IllegalArgumentException("Invalid PreDestroy annotation");
-+                }
-+                preDestroy = method;
-+                break;
-+            }
-+        }
-+
-+        // At the end the postconstruct annotated
-+        // method is invoked
-+        if (preDestroy != null) {
-+            boolean accessibility = preDestroy.isAccessible();
-+            preDestroy.setAccessible(true);
-+            preDestroy.invoke(instance);
-+            preDestroy.setAccessible(accessibility);
-+        }
-+
-+    }
-+
-+
-+    /**
-+     * Inject resources in specified instance.
-+     *
-+     * @param instance   instance to inject into
-+     * @param injections map of injections for this class from xml deployment descriptor
-+     * @throws IllegalAccessException       if injection target is inaccessible
-+     * @throws javax.naming.NamingException if value cannot be looked up in jndi
-+     * @throws java.lang.reflect.InvocationTargetException
-+     *                                      if injection fails
-+     */
-+    protected void processAnnotations(Object instance, Map<String, String> injections)
-+            throws IllegalAccessException, InvocationTargetException, NamingException {
-+
-+        if (context == null) {
-+            // No resource injection
-+            return;
-+        }
-+
-+        // Initialize fields annotations
-+        Field[] fields = instance.getClass().getDeclaredFields();
-+        for (Field field : fields) {
-+            if (injections != null && injections.containsKey(field.getName())) {
-+                lookupFieldResource(context, instance, field, injections.get(field.getName()));
-+            } else if (field.isAnnotationPresent(Resource.class)) {
-+                Resource annotation = field.getAnnotation(Resource.class);
-+                lookupFieldResource(context, instance, field, annotation.name());
-+            } else if (field.isAnnotationPresent(EJB.class)) {
-+                EJB annotation = field.getAnnotation(EJB.class);
-+                lookupFieldResource(context, instance, field, annotation.name());
-+            } else if (field.isAnnotationPresent(WebServiceRef.class)) {
-+                WebServiceRef annotation =
-+                        field.getAnnotation(WebServiceRef.class);
-+                lookupFieldResource(context, instance, field, annotation.name());
-+            } else if (field.isAnnotationPresent(PersistenceContext.class)) {
-+                PersistenceContext annotation =
-+                        field.getAnnotation(PersistenceContext.class);
-+                lookupFieldResource(context, instance, field, annotation.name());
-+            } else if (field.isAnnotationPresent(PersistenceUnit.class)) {
-+                PersistenceUnit annotation =
-+                        field.getAnnotation(PersistenceUnit.class);
-+                lookupFieldResource(context, instance, field, annotation.name());
-+            }
-+        }
-+
-+        // Initialize methods annotations
-+        Method[] methods = instance.getClass().getDeclaredMethods();
-+        for (Method method : methods) {
-+            String methodName = method.getName();
-+            if (injections != null && methodName.startsWith("set") && methodName.length() > 3) {
-+                String fieldName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
-+                if (injections.containsKey(fieldName)) {
-+                    lookupMethodResource(context, instance, method, injections.get(fieldName));
-+                    break;
++        while (clazz != null) {
++            // Initialize fields annotations
++            Field[] fields = instance.getClass().getDeclaredFields();
++            for (Field field : fields) {
++                if (injections != null && injections.containsKey(field.getName())) {
++                    lookupFieldResource(context, instance, field, injections.get(field.getName()));
 +                }
-+            }
-+            if (method.isAnnotationPresent(Resource.class)) {
-+                Resource annotation = method.getAnnotation(Resource.class);
-+                lookupMethodResource(context, instance, method, annotation.name());
-+            } else if (method.isAnnotationPresent(EJB.class)) {
-+                EJB annotation = method.getAnnotation(EJB.class);
-+                lookupMethodResource(context, instance, method, annotation.name());
-+            } else if (method.isAnnotationPresent(WebServiceRef.class)) {
-+                WebServiceRef annotation =
-+                        method.getAnnotation(WebServiceRef.class);
-+                lookupMethodResource(context, instance, method, annotation.name());
-+            } else if (method.isAnnotationPresent(PersistenceContext.class)) {
-+                PersistenceContext annotation =
-+                        method.getAnnotation(PersistenceContext.class);
-+                lookupMethodResource(context, instance, method, annotation.name());
-+            } else if (method.isAnnotationPresent(PersistenceUnit.class)) {
-+                PersistenceUnit annotation =
-+                        method.getAnnotation(PersistenceUnit.class);
-+                lookupMethodResource(context, instance, method, annotation.name());
-+            }
-+        }
-+
-+    }
-+
-+
-+    protected Class loadClassMaybePrivileged(final String className, final ClassLoader classLoader) throws ClassNotFoundException {
-+        Class clazz;
-+        if (SecurityUtil.isPackageProtectionEnabled()) {
-+            try {
-+                clazz = AccessController.doPrivileged(new PrivilegedExceptionAction<Class>() {
-+
-+                    public Class run() throws Exception {
-+                        return loadClass(className, classLoader);
-+                    }
-+                });
-+            } catch (PrivilegedActionException e) {
-+                Throwable t = e.getCause();
-+                if (t instanceof ClassNotFoundException) {
-+                    throw (ClassNotFoundException) t;
++                if (field.isAnnotationPresent(Resource.class)) {
++                    Resource annotation = field.getAnnotation(Resource.class);
++                    lookupFieldResource(context, instance, field, annotation.name());
++                } else if (field.isAnnotationPresent(EJB.class)) {
++                    EJB annotation = field.getAnnotation(EJB.class);
++                    lookupFieldResource(context, instance, field, annotation.name());
++                } else if (field.isAnnotationPresent(WebServiceRef.class)) {
++                    WebServiceRef annotation =
+                         field.getAnnotation(WebServiceRef.class);
+-                lookupFieldResource(context, instance, field, annotation.name());
+-            } else if (field.isAnnotationPresent(PersistenceContext.class)) {
+-                PersistenceContext annotation =
++                    lookupFieldResource(context, instance, field, annotation.name());
++                } else if (field.isAnnotationPresent(PersistenceContext.class)) {
++                    PersistenceContext annotation =
+                         field.getAnnotation(PersistenceContext.class);
+-                lookupFieldResource(context, instance, field, annotation.name());
+-            } else if (field.isAnnotationPresent(PersistenceUnit.class)) {
+-                PersistenceUnit annotation =
++                    lookupFieldResource(context, instance, field, annotation.name());
++                } else if (field.isAnnotationPresent(PersistenceUnit.class)) {
++                    PersistenceUnit annotation =
+                         field.getAnnotation(PersistenceUnit.class);
+-                lookupFieldResource(context, instance, field, annotation.name());
++                    lookupFieldResource(context, instance, field, annotation.name());
 +                }
-+                throw new RuntimeException(t);
-+            }
-+        } else {
-+            clazz = loadClass(className, classLoader);
-+        }
-+        checkAccess(clazz);
-+        return clazz;
-+    }
-+
-+    protected Class loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
-+        if (className.startsWith("org.apache.catalina")) {
-+            return containerClassLoader.loadClass(className);
-+        }
-+        try {
-+            Class clazz = containerClassLoader.loadClass(className);
-+            if (ContainerServlet.class.isAssignableFrom(clazz)) {
-+                return clazz;
-+            }
-+        } catch (Throwable t) {
-+            //ignore
-+        }
-+        return classLoader.loadClass(className);
-+    }
-+
-+    private void checkAccess(Class clazz) {
-+        if (privileged) return;
-+        if (clazz.isAssignableFrom(Filter.class)) {
-+            checkAccess(clazz, restrictedFilters);
-+        } else if (clazz.isAssignableFrom(Servlet.class)) {
-+            checkAccess(clazz, restrictedServlets);
-+        } else {
-+            checkAccess(clazz, restrictedListeners);
-+        }
-+    }
-+
-+    private void checkAccess(Class clazz, Properties restricted) {
-+        while (clazz != null) {
-+            if ("restricted".equals(restricted.getProperty(clazz.getName()))) {
-+                throw new SecurityException("Restricted class" + clazz);
-+            }
-+            clazz = clazz.getSuperclass();
-+        }
-+
-+    }
-+
-+    /**
-+     * Inject resources in specified field.
-+     *
-+     * @param context  jndi context to extract value from
-+     * @param instance object to inject into
-+     * @param field    field target for injection
-+     * @param name     jndi name value is bound under
-+     * @throws IllegalAccessException       if field is inaccessible
-+     * @throws javax.naming.NamingException if value is not accessible in naming context
-+     */
-+    protected static void lookupFieldResource(Context context,
-+            Object instance, Field field, String name)
-+            throws NamingException, IllegalAccessException {
-+
-+        Object lookedupResource;
-+        boolean accessibility;
-+
-+        if ((name != null) &&
-+                (name.length() > 0)) {
-+            lookedupResource = context.lookup(name);
-+        } else {
-+            lookedupResource = context.lookup(instance.getClass().getName() + "/" + field.getName());
-+        }
-+
-+        accessibility = field.isAccessible();
-+        field.setAccessible(true);
-+        field.set(instance, lookedupResource);
-+        field.setAccessible(accessibility);
-+    }
-+
-+    /**
-+     * Inject resources in specified method.
-+     *
-+     * @param context  jndi context to extract value from
-+     * @param instance object to inject into
-+     * @param method   field target for injection
-+     * @param name     jndi name value is bound under
-+     * @throws IllegalAccessException       if method is inaccessible
-+     * @throws javax.naming.NamingException if value is not accessible in naming context
-+     * @throws java.lang.reflect.InvocationTargetException
-+     *                                      if setter call fails
-+     */
-+    protected static void lookupMethodResource(Context context,
-+            Object instance, Method method, String name)
-+            throws NamingException, IllegalAccessException, InvocationTargetException {
-+
-+        if (!method.getName().startsWith("set")
-+                || method.getParameterTypes().length != 1
-+                || !method.getReturnType().getName().equals("void")) {
-+            throw new IllegalArgumentException("Invalid method resource injection annotation");
-+        }
-+
-+        Object lookedupResource;
-+        boolean accessibility;
-+
-+        if ((name != null) &&
-+                (name.length() > 0)) {
-+            lookedupResource = context.lookup(name);
-+        } else {
-+            lookedupResource =
-+                    context.lookup(instance.getClass().getName() + "/" + method.getName().substring(3));
-+        }
-+
-+        accessibility = method.isAccessible();
-+        method.setAccessible(true);
-+        method.invoke(instance, lookedupResource);
-+        method.setAccessible(accessibility);
-+    }
-+}
-
-Property changes on: java/org/apache/catalina/core/DefaultInstanceManager.java
-___________________________________________________________________
-Name: svn:eol-style
-   + native
-
-Index: java/org/apache/catalina/core/RestrictedListeners.properties
-===================================================================
---- java/org/apache/catalina/core/RestrictedListeners.properties	(revision 0)
-+++ java/org/apache/catalina/core/RestrictedListeners.properties	(revision 0)
-@@ -0,0 +1,15 @@
-+# 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.
-+
-
-Property changes on: java/org/apache/catalina/core/RestrictedListeners.properties
-___________________________________________________________________
-Name: svn:eol-style
-   + native
-
-Index: java/org/apache/catalina/core/ApplicationFilterConfig.java
-===================================================================
---- java/org/apache/catalina/core/ApplicationFilterConfig.java	(revision 3168)
-+++ java/org/apache/catalina/core/ApplicationFilterConfig.java	(working copy)
-@@ -19,14 +19,12 @@
- package org.apache.catalina.core;
- 
- 
--import java.io.IOException;
--import java.io.InputStream;
- import java.io.Serializable;
- import java.lang.reflect.InvocationTargetException;
- import java.util.ArrayList;
- import java.util.Enumeration;
-+import java.util.HashMap;
- import java.util.Map;
--import java.util.Properties;
- 
- import javax.naming.NamingException;
- import javax.servlet.Filter;
-@@ -34,7 +32,7 @@
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- 
--import org.apache.AnnotationProcessor;
-+import org.apache.InstanceManager;
- import org.apache.catalina.Context;
- import org.apache.catalina.Globals;
- import org.apache.catalina.deploy.FilterDef;
-@@ -58,7 +56,7 @@
- 
-     protected static StringManager sm =
-         StringManager.getManager(Constants.Package);
--    
-+
-     // ----------------------------------------------------------- Constructors
- 
- 
-@@ -78,8 +76,8 @@
-      * @exception InstantiationException if an exception occurs while
-      *  instantiating the filter object
-      * @exception ServletException if thrown by the filter's init() method
--     * @throws NamingException 
--     * @throws InvocationTargetException 
-+     * @throws NamingException
-+     * @throws InvocationTargetException
-      */
-     public ApplicationFilterConfig(Context context, FilterDef filterDef)
-         throws ClassCastException, ClassNotFoundException,
-@@ -88,22 +86,6 @@
- 
-         super();
- 
--        if (restrictedFilters == null) {
--            restrictedFilters = new Properties();
--            try {
--                InputStream is = 
--                    this.getClass().getClassLoader().getResourceAsStream
--                        ("org/apache/catalina/core/RestrictedFilters.properties");
--                if (is != null) {
--                    restrictedFilters.load(is);
--                } else {
--                    context.getLogger().error(sm.getString("applicationFilterConfig.restrictedFiltersResources"));
--                }
--            } catch (IOException e) {
--                context.getLogger().error(sm.getString("applicationFilterConfig.restrictedServletsResources"), e);
--            }
--        }
--        
-         this.context = context;
-         setFilterDef(filterDef);
- 
-@@ -130,13 +112,12 @@
-      */
-     private FilterDef filterDef = null;
- 
--
-     /**
--     * Restricted filters (which can only be loaded by a privileged webapp).
-+     * the InstanceManager used to create and destroy filter instances.
-      */
--    protected static Properties restrictedFilters = null;
-+    private transient InstanceManager instanceManager;
- 
--    
-+
-     // --------------------------------------------------- FilterConfig Methods
- 
- 
-@@ -223,11 +204,11 @@
-      * @exception InstantiationException if an exception occurs while
-      *  instantiating the filter object
-      * @exception ServletException if thrown by the filter's init() method
--     * @throws NamingException 
--     * @throws InvocationTargetException 
-+     * @throws NamingException
-+     * @throws InvocationTargetException
-      */
-     Filter getFilter() throws ClassCastException, ClassNotFoundException,
--        IllegalAccessException, InstantiationException, ServletException, 
-+        IllegalAccessException, InstantiationException, ServletException,
-         InvocationTargetException, NamingException {
- 
-         // Return the existing filter instance, if any
-@@ -236,32 +217,10 @@
- 
-         // Identify the class loader we will be using
-         String filterClass = filterDef.getFilterClass();
--        ClassLoader classLoader = null;
--        if (filterClass.startsWith("org.apache.catalina."))
--            classLoader = this.getClass().getClassLoader();
--        else
--            classLoader = context.getLoader().getClassLoader();
-+        this.filter = (Filter) getInstanceManager().newInstance(filterClass);
- 
--        ClassLoader oldCtxClassLoader =
--            Thread.currentThread().getContextClassLoader();
--
--        // Instantiate a new instance of this filter and return it
--        Class clazz = classLoader.loadClass(filterClass);
--        if (!isFilterAllowed(clazz)) {
--            throw new SecurityException
--                (sm.getString("applicationFilterConfig.privilegedFilter",
--                        filterClass));
--        }
--        this.filter = (Filter) clazz.newInstance();
--        if (!context.getIgnoreAnnotations()) {
--            if (context instanceof StandardContext) {
--               AnnotationProcessor processor = ((StandardContext)context).getAnnotationProcessor();
--               processor.processAnnotations(this.filter);
--               processor.postConstruct(this.filter);
--            }
--        }
-         if (context instanceof StandardContext &&
--            ((StandardContext) context).getSwallowOutput()) {
-+                context.getSwallowOutput()) {
-             try {
-                 SystemLogHandler.startCapture();
-                 filter.init(this);
-@@ -289,31 +248,7 @@
- 
-     }
- 
--
-     /**
--     * Return <code>true</code> if loading this filter is allowed.
--     */
--    protected boolean isFilterAllowed(Class filterClass) {
--
--        // Privileged webapps may load all servlets without restriction
--        if (context.getPrivileged()) {
--            return true;
--        }
--
--        Class clazz = filterClass;
--        while (clazz != null && !clazz.getName().equals("javax.servlet.Filter")) {
--            if ("restricted".equals(restrictedFilters.getProperty(clazz.getName()))) {
--                return (false);
--            }
--            clazz = clazz.getSuperclass();
--        }
--        
--        return (true);
--
--    }
--
--
--    /**
-      * Release the Filter instance associated with this FilterConfig,
-      * if there is one.
-      */
-@@ -323,17 +258,17 @@
-         {
-             if (Globals.IS_SECURITY_ENABLED) {
-                 try {
--                    SecurityUtil.doAsPrivilege("destroy", filter); 
--                } catch(java.lang.Exception ex){                    
-+                    SecurityUtil.doAsPrivilege("destroy", filter);
-+                } catch(java.lang.Exception ex){
-                     context.getLogger().error("ApplicationFilterConfig.doAsPrivilege", ex);
-                 }
-                 SecurityUtil.remove(filter);
--            } else { 
-+            } else {
-                 filter.destroy();
              }
-             if (!context.getIgnoreAnnotations()) {
-                 try {
--                    ((StandardContext)context).getAnnotationProcessor().preDestroy(this.filter);
-+                    ((StandardContext) context).getInstanceManager().destroyInstance(this.filter);
-                 } catch (Exception e) {
-                     context.getLogger().error("ApplicationFilterConfig.preDestroy", e);
-                 }
-@@ -358,8 +293,8 @@
-      * @exception InstantiationException if an exception occurs while
-      *  instantiating the filter object
-      * @exception ServletException if thrown by the filter's init() method
--     * @throws NamingException 
--     * @throws InvocationTargetException 
-+     * @throws NamingException
-+     * @throws InvocationTargetException
-      */
-     void setFilterDef(FilterDef filterDef)
-         throws ClassCastException, ClassNotFoundException,
-@@ -373,17 +308,17 @@
-             if (this.filter != null){
-                 if( Globals.IS_SECURITY_ENABLED) {
-                     try{
--                        SecurityUtil.doAsPrivilege("destroy", filter);  
--                    } catch(java.lang.Exception ex){    
-+                        SecurityUtil.doAsPrivilege("destroy", filter);
-+                    } catch(java.lang.Exception ex){
-                         context.getLogger().error("ApplicationFilterConfig.doAsPrivilege", ex);
-                     }
-                     SecurityUtil.remove(filter);
--                } else { 
-+                } else {
-                     filter.destroy();
-                 }
-                 if (!context.getIgnoreAnnotations()) {
-                     try {
--                        ((StandardContext)context).getAnnotationProcessor().preDestroy(this.filter);
-+                        ((StandardContext) context).getInstanceManager().destroyInstance(this.filter);
-                     } catch (Exception e) {
-                         context.getLogger().error("ApplicationFilterConfig.preDestroy", e);
-                     }
-@@ -403,5 +338,18 @@
- 
-     // -------------------------------------------------------- Private Methods
- 
-+    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;
-+    }
- 
- }
-Index: java/org/apache/catalina/core/StandardWrapper.java
-===================================================================
---- java/org/apache/catalina/core/StandardWrapper.java	(revision 3168)
-+++ java/org/apache/catalina/core/StandardWrapper.java	(working copy)
-@@ -18,27 +18,14 @@
- 
- package org.apache.catalina.core;
- 
--import java.lang.reflect.Method;
--import java.io.IOException;
--import java.io.InputStream;
- import java.io.PrintStream;
-+import java.lang.reflect.Method;
- import java.util.ArrayList;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.HashSet;
--import java.util.Properties;
- import java.util.Stack;
--import java.security.AccessController;
--import java.security.PrivilegedActionException;
--import java.security.PrivilegedExceptionAction;
--import javax.servlet.Servlet;
--import javax.servlet.ServletConfig;
--import javax.servlet.ServletContext;
--import javax.servlet.ServletException;
--import javax.servlet.ServletRequest;
--import javax.servlet.ServletResponse;
--import javax.servlet.SingleThreadModel;
--import javax.servlet.UnavailableException;
-+
- import javax.management.ListenerNotFoundException;
- import javax.management.MBeanNotificationInfo;
- import javax.management.Notification;
-@@ -47,6 +34,14 @@
- import javax.management.NotificationFilter;
- import javax.management.NotificationListener;
- import javax.management.ObjectName;
-+import javax.servlet.Servlet;
-+import javax.servlet.ServletConfig;
-+import javax.servlet.ServletContext;
-+import javax.servlet.ServletException;
-+import javax.servlet.ServletRequest;
-+import javax.servlet.ServletResponse;
-+import javax.servlet.SingleThreadModel;
-+import javax.servlet.UnavailableException;
- 
- import org.apache.PeriodicEventListener;
- import org.apache.catalina.Container;
-@@ -56,8 +51,8 @@
- import org.apache.catalina.InstanceEvent;
- import org.apache.catalina.InstanceListener;
- import org.apache.catalina.LifecycleException;
--import org.apache.catalina.Loader;
- import org.apache.catalina.Wrapper;
-+import org.apache.InstanceManager;
- import org.apache.catalina.security.SecurityUtil;
- import org.apache.catalina.util.Enumerator;
- import org.apache.catalina.util.InstanceSupport;
-@@ -96,22 +91,6 @@
-         pipeline.setBasic(swValve);
-         broadcaster = new NotificationBroadcasterSupport();
- 
--        if (restrictedServlets == null) {
--            restrictedServlets = new Properties();
--            try {
--                InputStream is = 
--                    this.getClass().getClassLoader().getResourceAsStream
--                        ("org/apache/catalina/core/RestrictedServlets.properties");
--                if (is != null) {
--                    restrictedServlets.load(is);
--                } else {
--                    log.error(sm.getString("standardWrapper.restrictedServletsResource"));
--                }
--            } catch (IOException e) {
--                log.error(sm.getString("standardWrapper.restrictedServletsResource"), e);
--            }
 -        }
--        
-     }
- 
- 
-@@ -287,12 +266,7 @@
-                                                          ServletRequest.class,
-                                                          ServletResponse.class};
-     
--    /**
--     * Restricted servlets (which can only be loaded by a privileged webapp).
--     */
--    protected static Properties restrictedServlets = null;
--    
--    
-+
-     // ------------------------------------------------------------- Properties
- 
- 
-@@ -1043,83 +1017,9 @@
-                     (sm.getString("standardWrapper.notClass", getName()));
-             }
  
--            // Acquire an instance of the class loader to be used
--            Loader loader = getLoader();
--            if (loader == null) {
--                unavailable(null);
--                throw new ServletException
--                    (sm.getString("standardWrapper.missingLoader", getName()));
--            }
--
--            ClassLoader classLoader = loader.getClassLoader();
--
--            // Special case class loader for a container provided servlet
--            //  
--            if (isContainerProvidedServlet(actualClass) && 
--                    ! ((Context)getParent()).getPrivileged() ) {
--                // If it is a priviledged context - using its own
--                // class loader will work, since it's a child of the container
--                // loader
--                classLoader = this.getClass().getClassLoader();
--            }
--
--            // Load the specified servlet class from the appropriate class loader
--            Class classClass = null;
-+            InstanceManager instanceManager = ((StandardContext)getParent()).getInstanceManager();
-             try {
--                if (SecurityUtil.isPackageProtectionEnabled()){
--                    final ClassLoader fclassLoader = classLoader;
--                    final String factualClass = actualClass;
--                    try{
--                        classClass = (Class)AccessController.doPrivileged(
--                                new PrivilegedExceptionAction(){
--                                    public Object run() throws Exception{
--                                        if (fclassLoader != null) {
--                                            return fclassLoader.loadClass(factualClass);
--                                        } else {
--                                            return Class.forName(factualClass);
--                                        }
--                                    }
--                        });
--                    } catch(PrivilegedActionException pax){
--                        Exception ex = pax.getException();
--                        if (ex instanceof ClassNotFoundException){
--                            throw (ClassNotFoundException)ex;
--                        } else {
--                            getServletContext().log( "Error loading "
--                                + fclassLoader + " " + factualClass, ex );
--                        }
--                    }
--                } else {
--                    if (classLoader != null) {
--                        classClass = classLoader.loadClass(actualClass);
--                    } else {
--                        classClass = Class.forName(actualClass);
--                    }
--                }
--            } catch (ClassNotFoundException e) {
--                unavailable(null);
--                getServletContext().log( "Error loading " + classLoader + " " + actualClass, e );
--                throw new ServletException
--                    (sm.getString("standardWrapper.missingClass", actualClass),
--                     e);
--            }
--
--            if (classClass == null) {
--                unavailable(null);
--                throw new ServletException
--                    (sm.getString("standardWrapper.missingClass", actualClass));
--            }
--
--            // Instantiate and initialize an instance of the servlet class itself
--            try {
--                servlet = (Servlet) classClass.newInstance();
--                // Annotation processing
--                if (!((Context) getParent()).getIgnoreAnnotations()) {
--                    if (getParent() instanceof StandardContext) {
--                       ((StandardContext)getParent()).getAnnotationProcessor().processAnnotations(servlet);
--                       ((StandardContext)getParent()).getAnnotationProcessor().postConstruct(servlet);
--                    }
--                }
-+                servlet = (Servlet) instanceManager.newInstance(actualClass);
-             } catch (ClassCastException e) {
-                 unavailable(null);
-                 // Restore the context ClassLoader
-@@ -1127,7 +1027,7 @@
-                     (sm.getString("standardWrapper.notServlet", actualClass), e);
-             } catch (Throwable e) {
-                 unavailable(null);
--              
-+
-                 // Added extra log statement for Bugzilla 36630:
-                 // http://issues.apache.org/bugzilla/show_bug.cgi?id=36630
-                 if(log.isDebugEnabled()) {
-@@ -1139,14 +1039,6 @@
-                     (sm.getString("standardWrapper.instantiate", actualClass), e);
-             }
- 
--            // Check if loading the servlet in this web application should be
--            // allowed
--            if (!isServletAllowed(servlet)) {
--                throw new SecurityException
--                    (sm.getString("standardWrapper.privilegedServlet",
--                                  actualClass));
--            }
--
-             // Special handling for ContainerServlet instances
-             if ((servlet instanceof ContainerServlet) &&
-                   (isContainerProvidedServlet(actualClass) ||
-@@ -1398,7 +1290,7 @@
- 
-             // Annotation processing
-             if (!((Context) getParent()).getIgnoreAnnotations()) {
--               ((StandardContext)getParent()).getAnnotationProcessor().preDestroy(instance);
-+               ((StandardContext)getParent()).getInstanceManager().destroyInstance(instance);
-             }
- 
-         } catch (Throwable t) {
-@@ -1441,7 +1333,7 @@
-                     }
-                     // Annotation processing
-                     if (!((Context) getParent()).getIgnoreAnnotations()) {
--                       ((StandardContext)getParent()).getAnnotationProcessor().preDestroy(s);
-+                       ((StandardContext)getParent()).getInstanceManager().destroyInstance(s);
-                     }
+-        // Initialize methods annotations
+-        Method[] methods = instance.getClass().getDeclaredMethods();
+-        for (Method method : methods) {
+-            String methodName = method.getName();
+-            if (injections != null && methodName.startsWith("set") && methodName.length() > 3) {
+-                String fieldName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
+-                if (injections.containsKey(fieldName)) {
+-                    lookupMethodResource(context, instance, method, injections.get(fieldName));
+-                    break;
++            // Initialize methods annotations
++            Method[] methods = instance.getClass().getDeclaredMethods();
++            for (Method method : methods) {
++                String methodName = method.getName();
++                if (injections != null && methodName.startsWith("set") && methodName.length() > 3) {
++                    String fieldName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
++                    if (injections.containsKey(fieldName)) {
++                        lookupMethodResource(context, instance, method, injections.get(fieldName));
++                        break;
++                    }
                  }
-             } catch (Throwable t) {
-@@ -1619,33 +1511,6 @@
-     }
- 
- 
--    /**
--     * Return <code>true</code> if loading this servlet is allowed.
--     */
--    protected boolean isServletAllowed(Object servlet) {
--
--        // Privileged webapps may load all servlets without restriction
--        if (((Context) getParent()).getPrivileged()) {
--            return true;
--        }
--        
--        if (servlet instanceof ContainerServlet) {
--            return (false);
--        }
--
--        Class clazz = servlet.getClass();
--        while (clazz != null && !clazz.getName().equals("javax.servlet.http.HttpServlet")) {
--            if ("restricted".equals(restrictedServlets.getProperty(clazz.getName()))) {
--                return (false);
 -            }
--            clazz = clazz.getSuperclass();
--        }
--        
--        return (true);
--
--    }
--
--
-     protected Method[] getAllDeclaredMethods(Class c) {
- 
-         if (c.equals(javax.servlet.http.HttpServlet.class)) {
-Index: java/org/apache/catalina/core/StandardContext.java
-===================================================================
---- java/org/apache/catalina/core/StandardContext.java	(revision 3168)
-+++ java/org/apache/catalina/core/StandardContext.java	(working copy)
-@@ -31,6 +31,8 @@
- import java.util.HashMap;
- import java.util.Hashtable;
- import java.util.Iterator;
-+import java.util.List;
-+import java.util.Map;
- import java.util.Stack;
- import java.util.TreeMap;
- 
-@@ -59,7 +61,7 @@
- import javax.servlet.http.HttpSessionAttributeListener;
- import javax.servlet.http.HttpSessionListener;
- 
--import org.apache.AnnotationProcessor;
-+import org.apache.InstanceManager;
- import org.apache.catalina.Container;
- import org.apache.catalina.ContainerListener;
- import org.apache.catalina.Context;
-@@ -77,6 +79,8 @@
- import org.apache.catalina.deploy.ErrorPage;
- import org.apache.catalina.deploy.FilterDef;
- import org.apache.catalina.deploy.FilterMap;
-+import org.apache.catalina.deploy.Injectable;
-+import org.apache.catalina.deploy.InjectionTarget;
- import org.apache.catalina.deploy.LoginConfig;
- import org.apache.catalina.deploy.MessageDestination;
- import org.apache.catalina.deploy.MessageDestinationRef;
-@@ -88,7 +92,6 @@
- import org.apache.catalina.startup.ContextConfig;
- import org.apache.catalina.startup.TldConfig;
- import org.apache.catalina.util.CharsetMapper;
--import org.apache.catalina.util.DefaultAnnotationProcessor;
- import org.apache.catalina.util.ExtensionValidator;
- import org.apache.catalina.util.RequestUtil;
- import org.apache.catalina.util.URLEncoder;
-@@ -174,9 +177,9 @@
- 
- 
-     /**
--     * Annotation processor.
-+     * Lifecycle provider.
-      */
--    private AnnotationProcessor annotationProcessor = null;
-+    private InstanceManager instanceManager = null;
- 
- 
-    /**
-@@ -679,13 +682,13 @@
-     // ----------------------------------------------------- Context Properties
- 
- 
--    public AnnotationProcessor getAnnotationProcessor() {
--       return annotationProcessor;
-+    public InstanceManager getInstanceManager() {
-+       return instanceManager;
-     }
- 
- 
--    public void setAnnotationProcessor(AnnotationProcessor annotationProcessor) {
--       this.annotationProcessor = annotationProcessor;
-+    public void setInstanceManager(InstanceManager instanceManager) {
-+       this.instanceManager = instanceManager;
-     }
- 
-     
-@@ -3774,7 +3777,6 @@
-             log.debug("Configuring application event listeners");
- 
-         // Instantiate the required listeners
--        ClassLoader loader = getLoader().getClassLoader();
-         String listeners[] = findApplicationListeners();
-         Object results[] = new Object[listeners.length];
-         boolean ok = true;
-@@ -3783,13 +3785,7 @@
-                 getLogger().debug(" Configuring event listener class '" +
-                     listeners[i] + "'");
-             try {
--                Class clazz = loader.loadClass(listeners[i]);
--                results[i] = clazz.newInstance();
--                // Annotation processing
--                if (!getIgnoreAnnotations()) {
--                    getAnnotationProcessor().processAnnotations(results[i]);
--                    getAnnotationProcessor().postConstruct(results[i]);
--                }
-+                results[i] = instanceManager.newInstance(listeners[i]);
-             } catch (Throwable t) {
-                 getLogger().error
-                     (sm.getString("standardContext.applicationListener",
-@@ -3889,29 +3885,26 @@
-                         ok = false;
-                     }
-                 }
--                // Annotation processing
--                if (!getIgnoreAnnotations()) {
--                    try {
--                        getAnnotationProcessor().preDestroy(listeners[j]);
--                    } catch (Throwable t) {
--                        getLogger().error
--                            (sm.getString("standardContext.listenerStop",
--                                listeners[j].getClass().getName()), t);
--                        ok = false;
--                    }
-+                try {
-+                    getInstanceManager().destroyInstance(listeners[j]);
-+                } catch (Throwable t) {
-+                    getLogger().error
-+                       (sm.getString("standardContext.listenerStop",
-+                            listeners[j].getClass().getName()), t);
-+                    ok = false;
-                 }
-             }
-         }
- 
-         // Annotation processing
-         listeners = getApplicationEventListeners();
--        if (!getIgnoreAnnotations() && listeners != null) {
-+        if (listeners != null) {
-             for (int i = 0; i < listeners.length; i++) {
-                 int j = (listeners.length - 1) - i;
-                 if (listeners[j] == null)
-                     continue;
-                 try {
--                    getAnnotationProcessor().preDestroy(listeners[j]);
-+                    getInstanceManager().destroyInstance(listeners[j]);
-                 } catch (Throwable t) {
-                     getLogger().error
-                         (sm.getString("standardContext.listenerStop",
-@@ -4308,21 +4301,18 @@
-         // Binding thread
-         oldCCL = bindThread();
- 
--        // Set annotation processing parameter for Jasper (unfortunately, since
--        // this can be configured in many places and not just in /WEB-INF/web.xml,
--        // there are not many solutions)
--        // Initialize annotation processor
--        if (ok && !getIgnoreAnnotations()) {
--            if (annotationProcessor == null) {
-+        if (ok ) {
-+            if (instanceManager == null) {
-+                javax.naming.Context context = null;
-                 if (isUseNaming() && namingContextListener != null) {
--                    annotationProcessor = 
--                        new DefaultAnnotationProcessor(namingContextListener.getEnvContext());
--                } else {
--                    annotationProcessor = new DefaultAnnotationProcessor(null);
-+                    context = namingContextListener.getEnvContext();
-                 }
-+                Map<String, Map<String, String>> injectionMap = 
-+                	buildInjectionMap(getIgnoreAnnotations() ? new NamingResources(): getNamingResources());
-+                instanceManager = new DefaultInstanceManager
-+                	(context, injectionMap, this, this.getClass().getClassLoader());
-+                getServletContext().setAttribute(InstanceManager.class.getName(), instanceManager);
-             }
--            getServletContext().setAttribute
--                (AnnotationProcessor.class.getName(), annotationProcessor);
-         }
- 
-         try {
-@@ -4418,6 +4408,48 @@
-         //cacheContext();
-     }
- 
-+    private Map<String, Map<String, String>> buildInjectionMap(NamingResources namingResources) {
-+        Map<String, Map<String, String>> injectionMap = new HashMap<String, Map<String, String>>();
-+        for (Injectable resource: namingResources.findLocalEjbs()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        for (Injectable resource: namingResources.findEjbs()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        for (Injectable resource: namingResources.findEnvironments()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        for (Injectable resource: namingResources.findMessageDestinationRefs()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        for (Injectable resource: namingResources.findResourceEnvRefs()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        for (Injectable resource: namingResources.findResources()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        for (Injectable resource: namingResources.findServices()) {
-+            addInjectionTarget(resource, injectionMap);
-+        }
-+        return injectionMap;
-+    }
-+
-+    private void addInjectionTarget(Injectable resource, Map<String, Map<String, String>> injectionMap) {
-+        List<InjectionTarget> injectionTargets = resource.getInjectionTargets();
-+        if (injectionTargets != null && injectionTargets.size() > 0) {
-+            String jndiName = resource.getName();
-+            for (InjectionTarget injectionTarget: injectionTargets) {
-+                String clazz = injectionTarget.getTargetClass();
-+                Map<String, String> injections = injectionMap.get(clazz);
-+                if (injections == null) {
-+                    injections = new HashMap<String, String>();
-+                    injectionMap.put(clazz, injections);
+-            if (method.isAnnotationPresent(Resource.class)) {
+-                Resource annotation = method.getAnnotation(Resource.class);
+-                lookupMethodResource(context, instance, method, annotation.name());
+-            } else if (method.isAnnotationPresent(EJB.class)) {
+-                EJB annotation = method.getAnnotation(EJB.class);
+-                lookupMethodResource(context, instance, method, annotation.name());
+-            } else if (method.isAnnotationPresent(WebServiceRef.class)) {
+-                WebServiceRef annotation =
++                if (method.isAnnotationPresent(Resource.class)) {
++                    Resource annotation = method.getAnnotation(Resource.class);
++                    lookupMethodResource(context, instance, method, annotation.name());
++                } else if (method.isAnnotationPresent(EJB.class)) {
++                    EJB annotation = method.getAnnotation(EJB.class);
++                    lookupMethodResource(context, instance, method, annotation.name());
++                } else if (method.isAnnotationPresent(WebServiceRef.class)) {
++                    WebServiceRef annotation =
+                         method.getAnnotation(WebServiceRef.class);
+-                lookupMethodResource(context, instance, method, annotation.name());
+-            } else if (method.isAnnotationPresent(PersistenceContext.class)) {
+-                PersistenceContext annotation =
++                    lookupMethodResource(context, instance, method, annotation.name());
++                } else if (method.isAnnotationPresent(PersistenceContext.class)) {
++                    PersistenceContext annotation =
+                         method.getAnnotation(PersistenceContext.class);
+-                lookupMethodResource(context, instance, method, annotation.name());
+-            } else if (method.isAnnotationPresent(PersistenceUnit.class)) {
+-                PersistenceUnit annotation =
++                    lookupMethodResource(context, instance, method, annotation.name());
++                } else if (method.isAnnotationPresent(PersistenceUnit.class)) {
++                    PersistenceUnit annotation =
+                         method.getAnnotation(PersistenceUnit.class);
+-                lookupMethodResource(context, instance, method, annotation.name());
++                    lookupMethodResource(context, instance, method, annotation.name());
 +                }
-+                injections.put(injectionTarget.getTargetName(), jndiName);
-+            }
-+        }
-+    }
-+
-     /**
-      * Processes TLDs.
-      *
-Index: java/org/apache/catalina/core/LocalStrings.properties
-===================================================================
---- java/org/apache/catalina/core/LocalStrings.properties	(revision 3168)
-+++ java/org/apache/catalina/core/LocalStrings.properties	(working copy)
-@@ -201,7 +201,6 @@
- standardWrapper.notContext=Parent container of a Wrapper must be a Context
- standardWrapper.notFound=Servlet {0} is not available
- standardWrapper.notServlet=Class {0} is not a Servlet
--standardWrapper.privilegedServlet=Servlet of class {0} is privileged and cannot be loaded by this web application
- standardWrapper.releaseFilters=Release filters exception for servlet {0}
- standardWrapper.serviceException=Servlet.service() for servlet {0} threw exception
- standardWrapper.statusHeader=HTTP Status {0} - {1}
-@@ -210,7 +209,9 @@
- standardWrapper.unloadException=Servlet {0} threw unload() exception
- standardWrapper.unloading=Cannot allocate servlet {0} because it is being unloaded
- standardWrapper.waiting=Waiting for {0} instance(s) to be deallocated
--standardWrapper.restrictedServletsResource=Restricted servlets property file not found
- 
--applicationFilterConfig.restrictedFiltersResource=Restricted filters property file not found
--applicationFilterConfig.privilegedFilter=Filter of class {0} is privileged and cannot be loaded by this web application
-+defaultInstanceManager.restrictedServletsResource=Restricted servlets property file not found
-+defaultInstanceManager.privilegedServlet=Servlet of class {0} is privileged and cannot be loaded by this web application
-+defaultInstanceManager.restrictedFiltersResource=Restricted filters property file not found
-+defaultInstanceManager.privilegedFilter=Filter of class {0} is privileged and cannot be loaded by this web application
-+defaultInstanceManager.restrictedListenersResources="Restricted listeners property file not found
-\ No newline at end of file
-Index: java/org/apache/catalina/core/mbeans-descriptors.xml
-===================================================================
---- java/org/apache/catalina/core/mbeans-descriptors.xml	(revision 3168)
-+++ java/org/apache/catalina/core/mbeans-descriptors.xml	(working copy)
-@@ -41,9 +41,9 @@
-                is="true"
-                type="boolean"/>
-       
--     <attribute name="annotationProcessor"
--                description="Object that processes things like injection annotations"
--                type="org.apache.AnnotationProcessor" />
-+    <attribute name="instanceManager"
-+                description="Object that creates and destroys servlets, filters, and listeners. Include dependency injection and postConstruct/preDestory handling"
-+                type="org.apache.catalina.instanceManagement.InstanceManager" />
- 
-     <attribute name="antiJARLocking"
-                description="Take care to not lock jar files"
-Index: java/org/apache/catalina/servlets/LocalStrings.properties
-===================================================================
---- java/org/apache/catalina/servlets/LocalStrings.properties	(revision 3168)
-+++ java/org/apache/catalina/servlets/LocalStrings.properties	(working copy)
-@@ -25,7 +25,6 @@
- invokerServlet.notNamed=Cannot call invoker servlet with a named dispatcher
- invokerServlet.noWrapper=Container has not called setWrapper() for this servlet
- webdavservlet.jaxpfailed=JAXP initialization failed
--webdavservlet.enternalEntityIgnored=The request included a reference to an external entity with PublicID {0} and SystemID {1} which was ignored
- directory.filename=Filename
- directory.lastModified=Last Modified
- directory.parent=Up To {0}
-Index: java/org/apache/catalina/servlets/WebdavServlet.java
-===================================================================
---- java/org/apache/catalina/servlets/WebdavServlet.java	(revision 3168)
-+++ java/org/apache/catalina/servlets/WebdavServlet.java	(working copy)
-@@ -20,7 +20,6 @@
- 
- 
- import java.io.IOException;
--import java.io.StringReader;
- import java.io.StringWriter;
- import java.io.Writer;
- import java.security.MessageDigest;
-@@ -37,7 +36,6 @@
- import javax.naming.NamingEnumeration;
- import javax.naming.NamingException;
- import javax.naming.directory.DirContext;
--import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.UnavailableException;
- import javax.servlet.http.HttpServletRequest;
-@@ -59,7 +57,6 @@
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
--import org.xml.sax.EntityResolver;
- import org.xml.sax.InputSource;
- import org.xml.sax.SAXException;
- 
-@@ -290,8 +287,6 @@
-             documentBuilderFactory.setNamespaceAware(true);
-             documentBuilderFactory.setExpandEntityReferences(false);
-             documentBuilder = documentBuilderFactory.newDocumentBuilder();
--            documentBuilder.setEntityResolver(
--                    new WebdavResolver(this.getServletContext()));
-         } catch(ParserConfigurationException e) {
-             throw new ServletException
-                 (sm.getString("webdavservlet.jaxpfailed"));
-@@ -2828,26 +2823,6 @@
-     }
- 
- 
--    // --------------------------------------------- WebdavResolver Inner Class
--    /**
--     * Work around for XML parsers that don't fully respect
--     * {@link DocumentBuilderFactory#setExpandEntityReferences(false)}. External
--     * references are filtered out for security reasons. See CVE-2007-5461.
--     */
--    private class WebdavResolver implements EntityResolver {
--        private ServletContext context;
--        
--        public WebdavResolver(ServletContext theContext) {
--            context = theContext;
--        }
--     
--        public InputSource resolveEntity (String publicId, String systemId) {
--            context.log(sm.getString("webdavservlet.enternalEntityIgnored",
--                    publicId, systemId));
--            return new InputSource(
--                    new StringReader("Ignored external entity"));
--        }
--    }
- };
- 
- 
-@@ -3170,4 +3145,3 @@
- 
- };
- 
--

[... 3846 lines stripped ...]


Mime
View raw message