I ran this through my debugger, and my assumptions where correct.  The
FLAG_NEW_VERSION flag is set while versionManager is null.  I'm, looking
around and can't figure out the exact conditions that would cause this.

Any thoughts?

Aaron

Aaron Hiniker wrote:
> Yeah, I know.  But I'm not messing with any versioning settings (this
> is just out-of-the-box ajax components and the like), so really there
> shouldn't be any of these issues, correct?  Here's
> mayTrackChangesFor() method, I've added a comment regarding my
> thoughts as to what is causing this:
>
>     private final boolean mayTrackChangesFor(final Component
> component, MarkupContainer parent)
>     {
>         // Auto components do not participate in versioning since they are
>         // added during the rendering phase (which is normally illegal).
>         if (component.isAuto() || (parent == null &&
> !component.isVersioned())
>                 || (parent != null && !parent.isVersioned()))
>         {
>             return false;
>         }
>         else
>         {
>             // the component is versioned... are we tracking changes
> at all?
>             if (getFlag(FLAG_TRACK_CHANGES))   <-- this returns true
>             {
>                 // we are tracking changes... do we need to start new
> version?
>                 if (!getFlag(FLAG_NEW_VERSION))  <-- this may return
> false?
>                 {
>                     // if we have no version manager
>                     if (versionManager == null)
>                     {
>                         // then install a new version manager
>                         versionManager = newVersionManager();
>                     }
>
>                     // start a new version
>                    
> versionManager.beginVersion(getRequest().mergeVersion());
>                     setFlag(FLAG_NEW_VERSION, true);
>                 }
>
>                 // this returns true, even though versionManager is
> not set because of false check above
>                 // return true as we are ready for versioning
>                 return true;
>             }
>
>             // we are not tracking changes or the component not versioned
>             return false;
>         }
>     }
>
> Should I specifically be setting versioning/non-versioning for
> components to avoid this error?
>
> Aaron
>
> Johan Compagner wrote:
>> But if it is null then you could have a problem that things should be
>> versioned but arent..
>>
>> So adding null checks is not the fix.
>>
>> johan
>>
>>
>> On 3/2/07, * Aaron HIniker* <[EMAIL PROTECTED]
>> <mailto:[EMAIL PROTECTED]>> wrote:
>>
>>     That's why I was pointing at mayTrackChangesFor()..  I looked at
>>     the method and I can't see a loophole, but there must be one to
>>     generate an NPE, correct?
>>
>>     When I implemented the not-null check, I noticed exceptions still
>>     being thrown from 2 other methods (if you search Page.java for
>>     versionManager, you can see where there is the assumption that
>>     mayTrackChangesFor() is checked for 'true', yet versionManager is
>>     never initialized in other methods as well.  So after adding the
>>     null check to each of these methods, the application is working
>>     fine.  Thing is, I've only seen this exception when dealing with
>>     ajax (default not versioned, right?). 
>>
>>     I will try and run a debugger through mayTrackChangesFor() with
>>     my current app, and see the logic flow and why versionManager is
>>     ending up null.
>>
>>     Aaron
>>
>>     Johan Compagner wrote:
>>>     That is because the mayTrackChangesFor() method should only
>>>     return true
>>>     when it makes a version manager. Why is that not the case?
>>>     If that method returns true the version manager can't be null
>>>     because the version info must be tracked.
>>>
>>>     johan
>>>
>>>
>>>     On 3/1/07, *Aaron Hiniker* <[EMAIL PROTECTED]
>>>     <mailto:[EMAIL PROTECTED]>> wrote:
>>>
>>>         I pulled the latest from trunk.  And I am getting this NPE:
>>>
>>>         16:30:14,543 ERROR [STDERR] java.lang.NullPointerException
>>>         16:30:14,544 ERROR [STDERR]     at
>>>         wicket.Page.componentStateChanging(Page.java:327)
>>>         16:30:14,545 ERROR [STDERR]     at
>>>         wicket.Component.addStateChange(Component.java:2553)
>>>         16:30:14,545 ERROR [STDERR]     at
>>>         wicket.Component.setModel(Component.java:2191)
>>>         16:30:14,545 ERROR [STDERR]     at
>>>         wicket.MarkupContainer.setModel(MarkupContainer.java :596)
>>>         16:30:14,546 ERROR [STDERR]     at
>>>         
>>> com.edicorp.erp.web.components.search.ProductSearchPanel.query(ProductSearchPanel.java:144)
>>>         16:30:14,546 ERROR [STDERR]     at
>>>         com.edicorp.erp.web.components.search.ProductSearchPanel.onUpdate
>>>         (ProductSearchPanel.java:109)
>>>         16:30:14,546 ERROR [STDERR]     at
>>>         
>>> com.edicorp.erp.web.components.search.FilterPanel.fireOnChange(FilterPanel.java:74)
>>>         16:30:14,547 ERROR [STDERR]     at
>>>         
>>> com.edicorp.erp.web.components.search.query.QueryPanel$QueryForm.onSubmit
>>>         (QueryPanel.java:197)
>>>         16:30:14,547 ERROR [STDERR]     at
>>>         wicket.markup.html.form.Form.delegateSubmit(Form.java:680)
>>>         16:30:14,547 ERROR [STDERR]     at
>>>         wicket.markup.html.form.Form.onFormSubmitted(Form.java:396)
>>>         16:30:14,547 ERROR [STDERR]     at
>>>         sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>
>>>
>>>         I remember I was getting this NPE before, and I patched the
>>>         source to
>>>         include this null check in Page.java :
>>>
>>>                 final void componentStateChanging(final Component
>>>         component,
>>>         Change change)
>>>                 {
>>>                         checkHierarchyChange(component);
>>>
>>>                         dirty();
>>>                         if (mayTrackChangesFor(component, null))
>>>                         {
>>>                                 if ( versionManager != null )
>>>
>>>         versionManager.componentStateChanging(change);
>>>                         }
>>>                 }
>>>
>>>         It seems that everywhere else in Page.java there is a null
>>>         check for
>>>         versionManager, except in this method.  Not sure, but
>>>         perhaps the
>>>         problem lies in the #mayTrackChangesFor() method, but in any
>>>         case if I
>>>         add this null check my code runs fine.
>>>
>>>         Aaron
>>>
>>>
>>>         
>>> -------------------------------------------------------------------------
>>>
>>>         Take Surveys. Earn Cash. Influence the Future of IT
>>>         Join SourceForge.net's Techsay panel and you'll get the
>>>         chance to share your
>>>         opinions on IT & business topics through brief surveys-and
>>>         earn cash
>>>         
>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>>>         
>>> <http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV>
>>>         _______________________________________________
>>>         Wicket-user mailing list
>>>         Wicket-user@lists.sourceforge.net
>>>         <mailto:Wicket-user@lists.sourceforge.net>
>>>         https://lists.sourceforge.net/lists/listinfo/wicket-user
>>>         <https://lists.sourceforge.net/lists/listinfo/wicket-user>
>>>
>>>
>>>     ------------------------------------------------------------------------
>>>
>>>     
>>> -------------------------------------------------------------------------
>>>     Take Surveys. Earn Cash. Influence the Future of IT
>>>     Join SourceForge.net's Techsay panel and you'll get the chance to share 
>>> your
>>>
>>>     opinions on IT & business topics through brief surveys-and earn cash
>>>
>>>     
>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV 
>>> <http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV>
>>>     ------------------------------------------------------------------------
>>>
>>>     _______________________________________________
>>>     Wicket-user mailing list
>>>     Wicket-user@lists.sourceforge.net
>>>      <mailto:Wicket-user@lists.sourceforge.net>
>>>     https://lists.sourceforge.net/lists/listinfo/wicket-user
>>>       
>>
>>
>>     -------------------------------------------------------------------------
>>     Take Surveys. Earn Cash. Influence the Future of IT
>>     Join SourceForge.net's Techsay panel and you'll get the chance to
>>     share your
>>     opinions on IT & business topics through brief surveys-and earn cash
>>     http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>>     
>> <http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV>
>>     _______________________________________________
>>     Wicket-user mailing list
>>     Wicket-user@lists.sourceforge.net
>>     <mailto:Wicket-user@lists.sourceforge.net>
>>     https://lists.sourceforge.net/lists/listinfo/wicket-user
>>     <https://lists.sourceforge.net/lists/listinfo/wicket-user>
>>
>>
>> ------------------------------------------------------------------------
>>
>> -------------------------------------------------------------------------
>> Take Surveys. Earn Cash. Influence the Future of IT
>> Join SourceForge.net's Techsay panel and you'll get the chance to share your
>> opinions on IT & business topics through brief surveys-and earn cash
>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Wicket-user mailing list
>> Wicket-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/wicket-user
>>   
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> ------------------------------------------------------------------------
>
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>   

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to