larryi 00/11/09 05:40:49
Modified: src/share/org/apache/tomcat/core Tag: tomcat_32
ContextManager.java
Log:
Moved UnavailableException handling from ServletWrapper to
ContextManger's handleError method.
This allows UnavailableExceptions to be handled by a call to handleErro()
from Handler's service() method, along with other exceptions. This is cleaner
than trying to keep handling for UnavailableExceptions local to
ServletWrapper when exceptions are being propagated.
Revision Changes Path
No revision
No revision
1.100.2.15 +22 -1
jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java
Index: ContextManager.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java,v
retrieving revision 1.100.2.14
retrieving revision 1.100.2.15
diff -u -r1.100.2.14 -r1.100.2.15
--- ContextManager.java 2000/11/04 22:33:58 1.100.2.14
+++ ContextManager.java 2000/11/09 13:40:48 1.100.2.15
@@ -1060,6 +1060,9 @@
* or use the default handler.
*/
void handleError( Request req, Response res , Throwable t ) {
+ // if error already handled
+ if (res.isErrorHandled())
+ return;
Context ctx = req.getContext();
if(ctx==null) {
ctx=getContext("");
@@ -1069,7 +1072,22 @@
Note that it is _WRONG_ to send the trace back to
the client. AFAIK the trace is the _best_ debugger.
*/
- if( t instanceof IllegalStateException ) {
+ if (t instanceof UnavailableException) {
+ int unavailableTime = ((UnavailableException)t).getUnavailableSeconds();
+ if( unavailableTime > 0 ) {
+ res.setHeader("Retry-After", Integer.toString(unavailableTime));
+ }
+ String msg=t.getMessage();
+ ctx.log( "UnavailableException in: " + req +
+ ", time remaining " + unavailableTime + " seconds : " + msg,
t);
+ req.setAttribute("javax.servlet.error.message", msg );
+ res.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); // 503
+ handleStatus( req, res, HttpServletResponse.SC_SERVICE_UNAVAILABLE );
+ // indicate error handling has been called
+ res.setErrorHandled(true);
+ return;
+ }
+ else if( t instanceof IllegalStateException ) {
ctx.log("IllegalStateException in: " + req + " " +
t.getMessage() );
} else if( t instanceof org.apache.jasper.JasperException ) {
@@ -1133,6 +1151,9 @@
} catch( ServletException e) {
; // ASSERT: Only thrown by included servlets
}
+
+ // indicate error handling has been called
+ res.setErrorHandled(true);
}
public ServletWrapper getHandlerForPath( Context ctx, String path ) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]