Response response = (Response) res.getNote(ADAPTER_NOTES);\r
\r
if (request.getWrapper() != null) {\r
+ \r
+ // Bind the context CL to the current thread\r
+ if (request.getContext().getLoader() != null ) {\r
+ Thread.currentThread().setContextClassLoader\r
+ (request.getContext().getLoader().getClassLoader());\r
+ }\r
+ \r
CometProcessor servlet = null;\r
try {\r
servlet = (CometProcessor) request.getWrapper().allocate();\r
} catch (Throwable t) {\r
log.error(sm.getString("coyoteAdapter.service"), t);\r
request.removeAttribute("org.apache.tomcat.comet");\r
+ // Restore the context classloader\r
+ Thread.currentThread().setContextClassLoader\r
+ (CoyoteAdapter.class.getClassLoader());\r
return false;\r
}\r
try {\r
request.recycle();\r
response.recycle();\r
}\r
+ // Restore the context classloader\r
+ Thread.currentThread().setContextClassLoader\r
+ (CoyoteAdapter.class.getClassLoader());\r
}\r
}\r
return true;\r
if (request.getAttribute("org.apache.tomcat.comet.support") == Boolean.TRUE) {
begin(request, response);
} else {
- // FIXME: Implement without comet support
+ // No Comet support: regular servlet handling
begin(request, response);
-
- // Loop reading data
-
- end(request, response);
+ boolean error = true;
+ try {
+ // Loop reading data
+ while (read(request, response));
+ error = false;
+ } finally {
+ if (error) {
+ error(request, response);
+ } else {
+ end(request, response);
+ }
+ }
}
}