Servlet servlet = null;
StandardWrapper wrapper = (StandardWrapper) getContainer();
Context context = (Context) wrapper.getParent();
HttpRequest hrequest = (HttpRequest) request;
/*
* Create a request facade such that if the request was received
* at the root context, and the root context is mapped to a
* default-web-module, the default-web-module mapping is masked from
* the application code to which the request facade is being passed.
* For example, the request.facade's getContextPath() method will
* return "/", rather than the context root of the default-web-module,
* in this case.
*/
RequestFacade hreq = (RequestFacade) request.getRequest(true);
HttpServletResponse hres =
(HttpServletResponse) response.getResponse();
// Check for the application being marked unavailable
if (!context.getAvailable()) {
/* S1AS 4878272
hres.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
sm.getString("standardContext.isUnavailable"));
*/
// BEGIN S1AS 4878272
hres.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
response.setDetailMessage(rb.getString(APP_UNAVAILABLE));
// END S1AS 4878272
unavailable = true;
}
// Check for the servlet being marked unavailable
if (!unavailable && wrapper.isUnavailable()) {
String msg = MessageFormat.format(rb.getString(SERVLET_UNAVAILABLE), wrapper.getName());
log(msg);
if (hres == null) {
; // NOTE - Not much we can do generically
} else {
long available = wrapper.getAvailable();
if ((available > 0L) && (available < Long.MAX_VALUE)) {
hres.setDateHeader("Retry-After", available);
/* S1AS 4878272
hres.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
sm.getString("standardWrapper.isUnavailable",
wrapper.getName()));
*/
// BEGIN S1AS 4878272
hres.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
response.setDetailMessage(msg);
// END S1AS 4878272
} else if (available == Long.MAX_VALUE) {
/* S1AS 4878272
hres.sendError(HttpServletResponse.SC_NOT_FOUND,
sm.getString("standardWrapper.notFound",
wrapper.getName()));
*/
// BEGIN S1AS 4878272
hres.sendError(HttpServletResponse.SC_NOT_FOUND);
msg = MessageFormat.format(rb.getString(SERVLET_NOT_FOUND), wrapper.getName());
response.setDetailMessage(msg);
// END S1AS 4878272
}
}
unavailable = true;
}
// Allocate a servlet instance to process this request
try {
if (!unavailable) {
servlet = wrapper.allocate();
}
} catch (UnavailableException e) {
if (e.isPermanent()) {
/* S1AS 4878272
hres.sendError(HttpServletResponse.SC_NOT_FOUND,
sm.getString("standardWrapper.notFound",
wrapper.getName()));
*/
// BEGIN S1AS 4878272
hres.sendError(HttpServletResponse.SC_NOT_FOUND);
String msg = MessageFormat.format(rb.getString(SERVLET_NOT_FOUND), wrapper.getName());
response.setDetailMessage(msg);
// END S1AS 4878272
} else {
hres.setDateHeader("Retry-After", e.getUnavailableSeconds());
/* S1AS 4878272
hres.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
sm.getString("standardWrapper.isUnavailable",
wrapper.getName()));
*/
// BEGIN S1AS 4878272
hres.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
String msg = MessageFormat.format(rb.getString(SERVLET_UNAVAILABLE), wrapper.getName());
response.setDetailMessage(msg);
// END S1AS 4878272
}
} catch (ServletException e) {
String msg = MessageFormat.format(rb.getString(SERVLET_ALLOCATE_EXCEPTION), wrapper.getName());
log(msg, StandardWrapper.getRootCause(e));
throwable = e;
exception(request, response, e);
servlet = null;
} catch (Throwable e) {
String msg = MessageFormat.format(rb.getString(SERVLET_ALLOCATE_EXCEPTION), wrapper.getName());
log(msg, e);
throwable = e;
exception(request, response, e);
servlet = null;
}
// Acknowlege the request
try {
response.sendAcknowledgement();
} catch (IOException e) {
String msg = MessageFormat.format(rb.getString(SEND_ACKNOWLEDGEMENT_EXCEPTION), wrapper.getName());
log(msg, e);
throwable = e;
exception(request, response, e);
} catch (Throwable e) {
String msg = MessageFormat.format(rb.getString(SEND_ACKNOWLEDGEMENT_EXCEPTION), wrapper.getName());
log(msg, e);
throwable = e;
exception(request, response, e);
servlet = null;
}
DataChunk requestPathMB = hrequest.getRequestPathMB();
hreq.setAttribute(Globals.DISPATCHER_REQUEST_PATH_ATTR,
requestPathMB);
// Create the filter chain for this request
ApplicationFilterFactory factory =