From: Mike Schilling on


"ClassCastException" <zjkg3d9gj56(a)gmail.invalid> wrote in message
news:huuvm3$c4e$1(a)news.eternal-september.org...
> On Thu, 10 Jun 2010 22:55:59 -0700, Mike Schilling wrote:
>
>> "ClassCastException" <zjkg3d9gj56(a)gmail.invalid> wrote in message
>> news:husivb$hsb$3(a)news.eternal-september.org...
>>> On Thu, 10 Jun 2010 20:38:23 -0700, Mike Schilling wrote:
>>>
>>>> "ClassCastException" <zjkg3d9gj56(a)gmail.invalid> wrote in message
>>>> news:hus9o8$g1n$6(a)news.eternal-september.org...
>>>>> On Thu, 10 Jun 2010 19:54:51 -0700, Mike Schilling wrote:
>>>>>
>>>>>> "ClassCastException" <zjkg3d9gj56(a)gmail.invalid> wrote in message
>>>>>> news:hus76c$g1n$2(a)news.eternal-september.org...
>>>>>>> I think the usual situation will be that a) you don't catch Error
>>>>>>> and b) servlet containers etc. run servlets etc. in separate
>>>>>>> threads and deal with it gracefully if any of these threads abends.
>>>>>>> If you have multiple threads, provide some interrupt mechanism that
>>>>>>> can be triggered.
>>>>>>
>>>>>> A servlet container will handle each request in a separate thread,
>>>>>> and direct that thread to the servlet that should handle it. One
>>>>>> request's thread erroring horribly doesn't prevent further requests
>>>>>> from being processed by that same servlet. Preventing any further
>>>>>> processing would require some management operation that disables the
>>>>>> servlet, or more likely its containing web application.
>>>>>
>>>>> Euuww. That means you need to tell the servlet container to
>>>>> unregister you, or else set a public static mutable error flag that
>>>>> makes all subsequent instances prompt-fail, or something. Global
>>>>> variables. Ick!
>>>>>
>>>>> Does the servlet<->container API/protocol/whatever not include an
>>>>> explicit way for a servlet to signal a fatal error to the container?
>>>>> Let alone to perform just-once initialization, prior to handling
>>>>> requests, which can fail?
>>>>
>>>> Yeah, that you can do. There's an init() method, and if it throws an
>>>> exception the servlet is never enabled (at least, in containers I know
>>>> of. Not sure if that's part of the spec.)
>>>
>>> Ah, then Todd should probably be doing these checks in the init()
>>> method and throwing an exception if they fail.
>>>
>>>> But even without that, there's no need for anything but a private
>>>> field used by the (single) instance of the servlet class. Multiple
>>>> threads -- single instance.
>>>
>>> Global variables by any other name ... *sigh*
>>
>> A private instance field is a global variable?
>
> Not normally, but in this case it's sort-of one in disguise.

It represents the state of the object (the servlet), which is what instance
fields are supposed to do. This works quite well for intermittent
problems, say losing the connection to an underlying DBMS. The servlet can
retry the connection every N seconds, while rejecting all requests that come
while it's down. For unrecoverable initialization failures, throwing an
exception from init() makes more sense.

From: ilan on
Lew <noone(a)lewscanon.com> writes:

> ClassCastException wrote:
>> I think the usual situation will be that a) you don't catch Error and b)
>> servlet containers etc. run servlets etc. in separate threads and deal
>> with it gracefully if any of these threads abends. If you have multiple
>> threads, provide some interrupt mechanism that can be triggered.
>
> <http://java.sun.com/javase/6/docs/api/java/lang/Error.html>
> "An Error is a subclass of Throwable that indicates serious problems
> that a reasonable application should not try to catch."

Hmmm. I wonder what the definition of _reasonable_ is. You would think
the javadoc should not have used that adjective. Unless there are also
_unreasonable_ programs; that should be written?

Weird.

--
ilAn
From: Tom Anderson on
On Sat, 12 Jun 2010, ilan wrote:

> Lew <noone(a)lewscanon.com> writes:
>
>> ClassCastException wrote:
>>> I think the usual situation will be that a) you don't catch Error and b)
>>> servlet containers etc. run servlets etc. in separate threads and deal
>>> with it gracefully if any of these threads abends. If you have multiple
>>> threads, provide some interrupt mechanism that can be triggered.
>>
>> <http://java.sun.com/javase/6/docs/api/java/lang/Error.html>
>> "An Error is a subclass of Throwable that indicates serious problems
>> that a reasonable application should not try to catch."
>
> Hmmm. I wonder what the definition of _reasonable_ is.

I read it as saying "reasonable programs do not catch Errors". It *is* a
definition.

> You would think the javadoc should not have used that adjective. Unless
> there are also _unreasonable_ programs; that should be written?
>
> Weird.

There are certainly some unreasonable programs which should be written.
There are a great many unreasonable programs which have been written.

tom

--
It is a formal cultural policy to show unreasonable bias towards any
woman who is both attractive and weird.
From: Mike Schilling on
"Tom Anderson" <twic(a)urchin.earth.li> wrote in message
news:alpine.DEB.1.10.1006122147520.7429(a)urchin.earth.li...
> On Sat, 12 Jun 2010, ilan wrote:
>
>> Lew <noone(a)lewscanon.com> writes:
>>
>>> ClassCastException wrote:
>>>> I think the usual situation will be that a) you don't catch Error and
>>>> b)
>>>> servlet containers etc. run servlets etc. in separate threads and deal
>>>> with it gracefully if any of these threads abends. If you have multiple
>>>> threads, provide some interrupt mechanism that can be triggered.
>>>
>>> <http://java.sun.com/javase/6/docs/api/java/lang/Error.html>
>>> "An Error is a subclass of Throwable that indicates serious problems
>>> that a reasonable application should not try to catch."
>>
>> Hmmm. I wonder what the definition of _reasonable_ is.
>
> I read it as saying "reasonable programs do not catch Errors". It *is* a
> definition.

It's an odd word to use. A Java program written to test JVM behavior might
well catch and log Errors. Why is that program unreasonable?


From: Lew on
Lew writes:
>>>> <http://java.sun.com/javase/6/docs/api/java/lang/Error.html>
>>>> "An Error is a subclass of Throwable that indicates serious problems
>>>> that a reasonable application should not try to catch."

ilan wrote:
>>> Hmmm. I wonder what the definition of _reasonable_ is.

Tom Anderson wrote:
>> I read it as saying "reasonable programs do not catch Errors". It *is*
>> a definition.

Mike Schilling wrote:
> It's an odd word to use. A Java program written to test JVM behavior
> might well catch and log Errors. Why is that program unreasonable?

In principle because an 'Error' is of such a magnitude as to greatly risk that
the attempt to log it, or to do anything at all, is futility of the first order.

--
Lew