I'll one up it to make it trivial ...
// put this in a filter mapped to everything
doFilter(...) {
if (servletContext.getAttribute("initFailed")) {
response.sendError(503);
return;
}
chain.doFilter(request,response);
}
// and put this in any servlet or listerer
} catch(Throwable e) {
servletContext.getAttribute("initFailed", "Y");
}
If you have access to URLRewrite filter - then you don't even need to
write the filter above - but that configuration is left as an exercise
to the user
-Tim
Mark Thomas wrote:
Dan Armbrust wrote:
I'll tell you what, if you can tell me how to prevent my users (who
have full control over the application / installation / hardware where
this is running) from being able to shoot themselves in the foot and
do something that causes my app to fail - I'll buy you a case of beer
and not worry about this.
Until then, my servlet needs to do system checks - and if something is
wrong, it needs to not deploy. Thats the bit I haven't yet figured
out... How do I get tomcat to disable the entire context, when I
detect that something is broken during startup? And ideally, redirect
the users to an error screen that tells them that it's broken..
Sounds like a job for a filter / context listener combination. Not the only
solution something like:
- context listener fire when app starts
- do checks
- set static with the result
- all requests run through filter
- filter checks static
- if OK - allow request
- if !OK don't allow request & return error page.
Mark
Thanks,
Dan
On Thu, Nov 12, 2009 at 11:42 AM, Joseph Morgan
<joseph.mor...@ignitesales.com> wrote:
Dan,
Pardon my advice, but... this sounds like a programming/config/illegal
state error that shouldn't make it to production.
Of course, you could simply add instrumentation to the system to detect
that this servlet didn't do its thing, and route every request to a
holding page.
Joe
-----Original Message-----
From: Dan Armbrust [mailto:daniel.armbrust.l...@gmail.com]
Sent: Thursday, November 12, 2009 10:48 AM
To: Tomcat Users List
Subject: How to cancel a servlet startup?
If I have a servlet which fails during init() for whatever reason -
the example below takes a null pointer....
public class MyServlet extends HttpServlet
{
private static final long serialVersionUID =
7997991143724219371L;
@Override
public void destroy()
{
//do stuff....
super.destroy();
}
@Override
public void init() throws ServletException
{
try
{
String a = null;
a.toString();
}
catch (Exception e)
{
System.err.println("Startup error - cancelling
startup." + e);
try
{
destroy();
}
catch (Exception e1)
{
//noop
}
throw new ServletException("Startup failing due
to unexpected error: " + e);
}
}
}
How can I make tomcat cancel the deployment of the entire war file
that this servlet was distributed with?
I thought that throwing a ServletException back up to Tomcat would
make the webapp unavailable - but Tomcat continues to serve pages from
this webapp even though the startup failed. That doesn't seem like
correct behavior... am I missing a setting somewhere?
Thanks,
Dan
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org