Hi,
I just wanted to confirm your understanding is correct.  It's
unfortunate to discover this now, from your perspective, since you
already have many classes affected by this, but then again better late
than never ;)

I tend to agree about throwing AOP into a production system at this
point in time.

In production code I tend to use static loggers so this is not an issue
for me, and there are other workarounds of varying applicability, such
as checking for a null logger before using it (a tiny checkLogger method
in your superclass called by every method, or something like that: it's
slow and ugly, but it works and depending on other constraints you may
want this).

Yoav Shapira
Millennium Research Informatics


>-----Original Message-----
>From: Richard Mixon (qwest) [mailto:[EMAIL PROTECTED]
>Sent: Wednesday, July 14, 2004 1:43 PM
>To: Tomcat Users List
>Subject: RE: NPE in ActionForm where it is not be possible
>
>Yoav,
>
>Wow, had not considered that. I'm going to sort of say this back to be
>sure I understand though :)
>
>So if we stop Tomcat then my session, with any stored attributes that
>contain an ActionForm, will be "serialized" to persistent storage
>(disk). Upon restart the sesson and its attributes are
>deserialized(reconstituted so to speak). The CATCH is that for any
>included ActionForms, "standard" object initialization does not occur -
>either through static initializers or through the constructor. So I can
>end up with a NPE when I reference the log instance variable.
>
>OK, that definitely explains the problem. It is only after a restart
>that this is occurring - consistently. So, how to fix this.
>
>Ugh! I've got 127 classes that use this construct! The good news is
that
>the objects that are likely to be persisted to the session tend to be
>either ActionForms or a limited number of domain objects - about 50 in
>total. They mostly derive from common superclasses so I might get some
>help by putting an inner class that wraps the Log type in the
>superclass. But, I need access to the actual class name of the instance
>so I can initialize the Log object with "objectname.class".
>
>Is there a more elegant way to do this? I know using AOP would offer
>some much more elegant solutions, but do not think I'm ready to throw
>this at a production system.
>
>Any comments/ideas are welcome. And thanks again to Yoav for helping me
>to see the light here.
>
> - Richard
>
>Shapira, Yoav <mailto:[EMAIL PROTECTED]> wrote:
>> Hi,
>> Because Log is not Serializable, you can't put it in the session.  So
>> making it transient is fine.  I also saw your reasoning for making it
>> dynamic rather than static.
>>
>> Tomcat will save and restore your sessions across server restarts by
>> default.  That includes session attributes that are Serializable.  If
>> the Form was in the session, it will be deserialized: this is not the
>> same process as reconstruction.  So if you choose to stick with this
>> transient modifier, you will need to check for the log being null
>> before
>> every time you use it.
>>
>> Yoav Shapira
>> Millennium Research Informatics
>>
>>
>>> -----Original Message-----
>>> From: Richard Mixon (qwest) [mailto:[EMAIL PROTECTED]
>>> Sent: Tuesday, July 13, 2004 6:26 PM
>>> To: Tomcat Users List
>>> Subject: RE: NPE in ActionForm where it is not be possible
>>>
>>> QM <mailto:[EMAIL PROTECTED]> wrote:
>>>> On Sat, Jul 10, 2004 at 12:31:21PM -0700, Richard Mixon (qwest)
>> wrote:
>>>>> The "log" variable is initialized when the Action form is
>>>>>   instantiated, like so: public class ChartWizardForm extends
>>>>>       ActionForm implements java.io.Serializable { private
>>>>> transient Log log = LogFactory.getLog(ChartWizardForm.class);
>>>>>       ...
>>>>>
>>>>> Obviously I'm missing something pretty basic. Is Tomcat re-using a
>>>>> form instance across restarts? I've got pretty much default
>>>>> settings in Tomcat:
>>>>
>>>> I notice, you define/initialize the instance variable "log" at its
>>>> declaration point.
>>>>
>>>> Humor me: what happens if you initialize "log" in the ctor?
>>>>
>>>> -QM
>>>
>>> I've had to look at higher priorities for a couple of days :)
>>>
>>> Thanks for the idea. I changed as follows:
>>>    ...
>>>    // private transient Log log =
>>> LogFactory.getLog(ChartWizardForm.class);
>>>    private transient Log log; // Logging instance for this class
>>> ...
>>>
>>>    public ChartWizardForm() {
>>>        showInactive = false;
>>>        altClassMeasOrder = false;
>>>        ...
>>>        outputFmt="";
>>>        scaleFactor="";
>>>        log = LogFactory.getLog(ChartWizardForm.class); // <-- ADDED
>>>    INITIALIZATION HERE }
>>>    ...
>>>
>>> But, still get the NPE :(
>>>
>>> I'm defininig the instance variable as transient because Tomcat
>>> complains about saving sessions that contain a private instance
>>> variable (non-transient) of type Log. I was trying to get my
>>> sessions to persist across restarts. Does that suggest anything?
>>>
>>> Thank you again - Richard
>>>
>>>
>>>
---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>>
>> This e-mail, including any attachments, is a confidential business
>> communication, and may contain information that is confidential,
>> proprietary and/or privileged.  This e-mail is intended only for the
>> individual(s) to whom it is addressed, and may not be saved, copied,
>> printed, disclosed or used by anyone else.  If you are not the(an)
>> intended recipient, please immediately delete this e-mail from your
>> computer system and notify the sender.  Thank you.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]




This e-mail, including any attachments, is a confidential business communication, and 
may contain information that is confidential, proprietary and/or privileged.  This 
e-mail is intended only for the individual(s) to whom it is addressed, and may not be 
saved, copied, printed, disclosed or used by anyone else.  If you are not the(an) 
intended recipient, please immediately delete this e-mail from your computer system 
and notify the sender.  Thank you.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to