You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2003/07/22 20:51:22 UTC
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves RequestListenerValve.java
remm 2003/07/22 11:51:22
Modified: catalina/src/share/org/apache/catalina/core
StandardContext.java StandardContextValve.java
StandardWrapper.java StandardWrapperValve.java
Removed: catalina/src/share/org/apache/catalina/valves
RequestListenerValve.java
Log:
- Use the context logger for all webapp related error messages.
- Remove RequestListenerValve and merge into StandardContextValve.
This is a needed feature for servlet compliance, so this should be in the core.
- Note: maybe separate arrays should be introduced for the distinct listener
types, since some have a significant performance impact (such as
RequestAttributeListener). A lot of listener types were introduced in Servlet 2.4
and the original TC 4.0 design should probably be extended.
Revision Changes Path
1.73 +15 -77 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java
Index: StandardContext.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -r1.72 -r1.73
--- StandardContext.java 21 Jul 2003 19:05:50 -0000 1.72
+++ StandardContext.java 22 Jul 2003 18:51:21 -0000 1.73
@@ -2845,13 +2845,6 @@
}
}
- // Create request listener valve
- if (ok) {
- if (!requestListenerConfig()) {
- log.error(sm.getString("standardContext.requestListenerStartFailed"));
- }
- }
-
// Restore the "Welcome Files" and "Resources" context attributes
postResources();
postWelcomeFiles();
@@ -3551,7 +3544,8 @@
(this, (FilterDef) filterDefs.get(name));
filterConfigs.put(name, filterConfig);
} catch (Throwable t) {
- log.error(sm.getString("standardContext.filterStart", name), t);
+ getServletContext().log
+ (sm.getString("standardContext.filterStart", name), t);
ok = false;
}
}
@@ -3626,8 +3620,9 @@
Class clazz = loader.loadClass(listeners[i]);
results[i] = clazz.newInstance();
} catch (Throwable t) {
- log.error(sm.getString("standardContext.applicationListener",
- listeners[i]), t);
+ getServletContext().log
+ (sm.getString("standardContext.applicationListener",
+ listeners[i]), t);
ok = false;
}
}
@@ -3660,8 +3655,9 @@
fireContainerEvent("afterContextInitialized", listener);
} catch (Throwable t) {
fireContainerEvent("afterContextInitialized", listener);
- log.error(sm.getString("standardContext.listenerStart",
- instances[i].getClass().getName()), t);
+ getServletContext().log
+ (sm.getString("standardContext.listenerStart",
+ instances[i].getClass().getName()), t);
ok = false;
}
}
@@ -3700,8 +3696,9 @@
fireContainerEvent("beforeContextDestroyed", listener);
} catch (Throwable t) {
fireContainerEvent("beforeContextDestroyed", listener);
- log.error(sm.getString("standardContext.listenerStop",
- listeners[j].getClass().getName()), t);
+ getServletContext().log
+ (sm.getString("standardContext.listenerStop",
+ listeners[j].getClass().getName()), t);
ok = false;
}
}
@@ -3828,8 +3825,9 @@
try {
wrapper.load();
} catch (ServletException e) {
- log.error(sm.getString("standardWrapper.loadException",
- getName()), e);
+ getServletContext().log
+ (sm.getString("standardWrapper.loadException",
+ getName()), e);
// NOTE: load errors (including a servlet that throws
// UnavailableException from tht init() method) are NOT
// fatal to application startup
@@ -4099,14 +4097,6 @@
}
}
- // Create request listener lifecycle valve
- if (ok) {
- if (!requestListenerConfig()) {
- log.error(sm.getString
- ("standardContext.requestListenerStartFailed"));
- }
- }
-
// Load and initialize all "load on startup" servlets
if (ok) {
loadOnStartup(findChildren());
@@ -4779,58 +4769,6 @@
}
-
- /**
- * Create and deploy a Valve to handle request linitialization and
- * destroy listener lifecycle events. If there are no request listeners
- * registered to receive notifications do not instantiate valve.
- */
- private boolean requestListenerConfig() {
- // Only install this valive if there is a registered RequestListener.
- Object instances[] = getApplicationListeners();
- boolean registered = false;
- boolean ok = true;
-
- if (instances != null) {
- for (int i = 0; i < instances.length; i++) {
- if (instances[i] instanceof ServletRequestListener) {
- registered = true;
- break;
- }
- }
- }
-
- if (!registered) {
- return ok;
- }
-
- // Instantiate a new CertificatesValve if possible
- Valve requestListener = null;
- try {
- Class clazz =
- Class.forName("org.apache.catalina.valves.RequestListenerValve");
- requestListener = (Valve) clazz.newInstance();
- } catch (Throwable t) {
- return false;
- }
-
- // Add this Valve to our Pipeline
- try {
- if (this instanceof ContainerBase) {
- Pipeline pipeline = this.getPipeline();
- if (pipeline != null) {
- this.addValve(requestListener);
- log.info(sm.getString
- ("standardContext.requestListenerConfig.added"));
- }
- }
- } catch (Throwable t) {
- log.error(sm.getString("standardContext.requestListenerConfig.error"), t);
- ok = false;
- }
- return ok;
-
- }
// -------------------- JMX methods --------------------
1.9 +124 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java
Index: StandardContextValve.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- StandardContextValve.java 18 Jul 2003 18:49:28 -0000 1.8
+++ StandardContextValve.java 22 Jul 2003 18:51:21 -0000 1.9
@@ -69,6 +69,9 @@
import java.io.PrintWriter;
import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.naming.NamingException;
@@ -80,7 +83,9 @@
import org.apache.naming.resources.DirContextURLStreamHandler;
import org.apache.catalina.Container;
import org.apache.catalina.Context;
+import org.apache.catalina.Globals;
import org.apache.catalina.HttpRequest;
+import org.apache.catalina.Logger;
import org.apache.catalina.Request;
import org.apache.catalina.Response;
import org.apache.catalina.ValveContext;
@@ -194,7 +199,7 @@
if (((StandardContext) container).getSwallowOutput()) {
try {
SystemLogHandler.startCapture();
- wrapper.getPipeline().invoke(request, response);
+ invokeInternal(wrapper, request, response);
} finally {
String log = SystemLogHandler.stopCapture();
if (log != null && log.length() > 0) {
@@ -202,7 +207,7 @@
}
}
} else {
- wrapper.getPipeline().invoke(request, response);
+ invokeInternal(wrapper, request, response);
}
}
@@ -212,6 +217,67 @@
/**
+ * Call invoke.
+ */
+ private void invokeInternal(Wrapper wrapper, Request request,
+ Response response)
+ throws IOException, ServletException {
+
+ Object instances[] =
+ ((StandardContext) container).getApplicationListeners();
+
+ ServletRequestEvent event = null;
+
+ if (instances.length > 0) {
+ event = new ServletRequestEvent
+ (((StandardContext) container).getServletContext(),
+ request.getRequest());
+ // create pre-service event
+ for (int i = 0; i < instances.length; i++) {
+ if (instances[i] == null)
+ continue;
+ if (!(instances[i] instanceof ServletRequestListener))
+ continue;
+ ServletRequestListener listener =
+ (ServletRequestListener) instances[i];
+ try {
+ listener.requestInitialized(event);
+ } catch (Throwable t) {
+ log(sm.getString("requestListenerValve.requestInit",
+ instances[i].getClass().getName()), t);
+ ServletRequest sreq = request.getRequest();
+ sreq.setAttribute(Globals.EXCEPTION_ATTR,t);
+ return;
+ }
+ }
+ }
+
+ wrapper.getPipeline().invoke(request, response);
+
+ if (instances.length > 0) {
+ // create post-service event
+ for (int i = 0; i < instances.length; i++) {
+ if (instances[i] == null)
+ continue;
+ if (!(instances[i] instanceof ServletRequestListener))
+ continue;
+ ServletRequestListener listener =
+ (ServletRequestListener) instances[i];
+ try {
+ listener.requestDestroyed(event);
+ } catch (Throwable t) {
+ log(sm.getString("requestListenerValve.requestDestroy",
+ instances[i].getClass().getName()), t);
+ ServletRequest sreq = request.getRequest();
+ sreq.setAttribute(Globals.EXCEPTION_ATTR,t);
+ }
+ }
+ }
+
+ }
+
+
+ /**
* Report a "bad request" error for the specified resource. FIXME: We
* should really be using the error reporting settings for this web
* application, but currently that code runs at the wrapper level rather
@@ -272,5 +338,57 @@
}
}
+
+
+ /**
+ * Log a message on the Logger associated with our Container (if any)
+ *
+ * @param message Message to be logged
+ */
+ private void log(String message) {
+
+ Logger logger = null;
+ if (container != null)
+ logger = container.getLogger();
+ if (logger != null)
+ logger.log("StandardContextValve[" + container.getName() + "]: "
+ + message);
+ else {
+ String containerName = null;
+ if (container != null)
+ containerName = container.getName();
+ System.out.println("StandardContextValve[" + containerName
+ + "]: " + message);
+ }
+
+ }
+
+
+ /**
+ * Log a message on the Logger associated with our Container (if any)
+ *
+ * @param message Message to be logged
+ * @param throwable Associated exception
+ */
+ private void log(String message, Throwable throwable) {
+
+ Logger logger = null;
+ if (container != null)
+ logger = container.getLogger();
+ if (logger != null)
+ logger.log("StandardContextValve[" + container.getName() + "]: "
+ + message, throwable);
+ else {
+ String containerName = null;
+ if (container != null)
+ containerName = container.getName();
+ System.out.println("StandardContextValve[" + containerName
+ + "]: " + message);
+ System.out.println("" + throwable);
+ throwable.printStackTrace(System.out);
+ }
+
+ }
+
}
1.29 +9 -9 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
Index: StandardWrapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- StandardWrapper.java 4 Jun 2003 21:17:12 -0000 1.28
+++ StandardWrapper.java 22 Jul 2003 18:51:21 -0000 1.29
@@ -959,7 +959,7 @@
if (ex instanceof ClassNotFoundException){
throw (ClassNotFoundException)ex;
} else {
- log.error( "Error loading "
+ getServletContext().log( "Error loading "
+ fclassLoader + " " + factualClass, ex );
}
}
@@ -974,7 +974,7 @@
unavailable(null);
- log.error( "Error loading " + classLoader + " " + actualClass, e );
+ getServletContext().log( "Error loading " + classLoader + " " + actualClass, e );
throw new ServletException
(sm.getString("standardWrapper.missingClass", actualClass),
e);
@@ -1067,7 +1067,7 @@
// said so, so do not call unavailable(null).
throw f;
} catch (Throwable f) {
- log.error("StandardWrapper.Throwable", f );
+ getServletContext().log("StandardWrapper.Throwable", f );
instanceSupport.fireInstanceEvent(InstanceEvent.AFTER_INIT_EVENT,
servlet, f);
// If the servlet wanted to be unavailable it would have
@@ -1185,7 +1185,7 @@
* to mark this servlet as permanently unavailable
*/
public void unavailable(UnavailableException unavailable) {
- log.info(sm.getString("standardWrapper.unavailable", getName()));
+ getServletContext().log(sm.getString("standardWrapper.unavailable", getName()));
if (unavailable == null)
setAvailable(Long.MAX_VALUE);
else if (unavailable.isPermanent())
@@ -1544,7 +1544,7 @@
try {
unload();
} catch (ServletException e) {
- log.error(sm.getString
+ getServletContext().log(sm.getString
("standardWrapper.unloadException", getName()), e);
}
1.18 +70 -20 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java
Index: StandardWrapperValve.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- StandardWrapperValve.java 21 Jul 2003 19:05:51 -0000 1.17
+++ StandardWrapperValve.java 22 Jul 2003 18:51:21 -0000 1.18
@@ -94,16 +94,12 @@
*/
final class StandardWrapperValve
- extends ValveBase
- {
+ extends ValveBase {
+
private static Log log = LogFactory.getLog(StandardWrapperValve.class);
// ----------------------------------------------------- Instance Variables
- /**
- * The filter definition for our container-provided filter.
- */
- //private FilterDef filterDef = null;
// Some JMX statistics. This vavle is associated with a StandardWrapper.
// We exponse the StandardWrapper as JMX ( j2eeType=Servlet ). The fields
@@ -113,12 +109,14 @@
private int requestCount;
private int errorCount;
+
/**
* The string manager for this package.
*/
private static final StringManager sm =
StringManager.getManager(Constants.Package);
+
// --------------------------------------------------------- Public Methods
@@ -159,7 +157,7 @@
// Check for the servlet being marked unavailable
if (!unavailable && wrapper.isUnavailable()) {
- log.info(sm.getString("standardWrapper.isUnavailable",
+ log(sm.getString("standardWrapper.isUnavailable",
wrapper.getName()));
if (hres == null) {
; // NOTE - Not much we can do generically
@@ -197,13 +195,13 @@
wrapper.getName()));
}
} catch (ServletException e) {
- log.error(sm.getString("standardWrapper.allocateException",
+ log(sm.getString("standardWrapper.allocateException",
wrapper.getName()), e);
throwable = e;
exception(request, response, e);
servlet = null;
} catch (Throwable e) {
- log.error(sm.getString("standardWrapper.allocateException",
+ log(sm.getString("standardWrapper.allocateException",
wrapper.getName()), e);
throwable = e;
exception(request, response, e);
@@ -215,12 +213,12 @@
response.sendAcknowledgement();
} catch (IOException e) {
hreq.removeAttribute(Globals.JSP_FILE_ATTR);
- log.error(sm.getString("standardWrapper.acknowledgeException",
+ log(sm.getString("standardWrapper.acknowledgeException",
wrapper.getName()), e);
throwable = e;
exception(request, response, e);
} catch (Throwable e) {
- log.error(sm.getString("standardWrapper.acknowledgeException",
+ log(sm.getString("standardWrapper.acknowledgeException",
wrapper.getName()), e);
throwable = e;
exception(request, response, e);
@@ -260,13 +258,13 @@
hreq.removeAttribute(Globals.JSP_FILE_ATTR);
} catch (IOException e) {
hreq.removeAttribute(Globals.JSP_FILE_ATTR);
- log.error(sm.getString("standardWrapper.serviceException",
+ log(sm.getString("standardWrapper.serviceException",
wrapper.getName()), e);
throwable = e;
exception(request, response, e);
} catch (UnavailableException e) {
hreq.removeAttribute(Globals.JSP_FILE_ATTR);
- log.error(sm.getString("standardWrapper.serviceException",
+ log(sm.getString("standardWrapper.serviceException",
wrapper.getName()), e);
// throwable = e;
// exception(request, response, e);
@@ -295,13 +293,13 @@
break;
}
}
- log.error(sm.getString("standardWrapper.serviceException",
- wrapper.getName()), rootCause);
+ log(sm.getString("standardWrapper.serviceException",
+ wrapper.getName()), rootCause);
throwable = e;
exception(request, response, e);
} catch (Throwable e) {
hreq.removeAttribute(Globals.JSP_FILE_ATTR);
- log.error(sm.getString("standardWrapper.serviceException",
+ log(sm.getString("standardWrapper.serviceException",
wrapper.getName()), e);
throwable = e;
exception(request, response, e);
@@ -312,7 +310,7 @@
if (filterChain != null)
filterChain.release();
} catch (Throwable e) {
- log.error(sm.getString("standardWrapper.releaseFilters",
+ log(sm.getString("standardWrapper.releaseFilters",
wrapper.getName()), e);
if (throwable == null) {
throwable = e;
@@ -326,7 +324,7 @@
wrapper.deallocate(servlet);
}
} catch (Throwable e) {
- log.error(sm.getString("standardWrapper.deallocateException",
+ log(sm.getString("standardWrapper.deallocateException",
wrapper.getName()), e);
if (throwable == null) {
throwable = e;
@@ -342,7 +340,7 @@
wrapper.unload();
}
} catch (Throwable e) {
- log.error(sm.getString("standardWrapper.unloadException",
+ log(sm.getString("standardWrapper.unloadException",
wrapper.getName()), e);
if (throwable == null) {
throwable = e;
@@ -359,6 +357,58 @@
// -------------------------------------------------------- Private Methods
+
+
+ /**
+ * Log a message on the Logger associated with our Container (if any)
+ *
+ * @param message Message to be logged
+ */
+ private void log(String message) {
+
+ Logger logger = null;
+ if (container != null)
+ logger = container.getLogger();
+ if (logger != null)
+ logger.log("StandardWrapperValve[" + container.getName() + "]: "
+ + message);
+ else {
+ String containerName = null;
+ if (container != null)
+ containerName = container.getName();
+ System.out.println("StandardWrapperValve[" + containerName
+ + "]: " + message);
+ }
+
+ }
+
+
+ /**
+ * Log a message on the Logger associated with our Container (if any)
+ *
+ * @param message Message to be logged
+ * @param throwable Associated exception
+ */
+ private void log(String message, Throwable throwable) {
+
+ Logger logger = null;
+ if (container != null)
+ logger = container.getLogger();
+ if (logger != null)
+ logger.log("StandardWrapperValve[" + container.getName() + "]: "
+ + message, throwable);
+ else {
+ String containerName = null;
+ if (container != null)
+ containerName = container.getName();
+ System.out.println("StandardWrapperValve[" + containerName
+ + "]: " + message);
+ System.out.println("" + throwable);
+ throwable.printStackTrace(System.out);
+ }
+
+ }
+
/**
* Handle the specified ServletException encountered while processing
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org