Yoav - thanks for the confirmation. Its not that bad - 1) We do not restart very often; 2) I've been wanting to clean up the logging in this system for a while. This will provide that "opportunity" :) Peace - Richard
Shapira, Yoav <mailto:[EMAIL PROTECTED]> wrote: > 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]