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]