Hi Sven,

So far so good. It seems to have fixed all issues.

Will there be a release for this anytime soon do you think?

Thanks

On Wed, Jun 22, 2022 at 8:45 PM Sven Meier <s...@meiers.net> wrote:

> Hi Wayne,
>
> I pushed a fix to Wicket 9.x and 10.x.
>
> Would be great if you could give this a test, your test application
> works fine now.
>
> Many thanks
> Sven
>
>
> On 20.06.22 18:19, Wayne W wrote:
> > Hello Sven,
> >
> > Many thanks for looking into this. It's greatly appreciated that you
> > understand what is happening here.
> >
> > Out of interest I just had a look at the RedissionSession setAttribute
> and
> > it's just calling
> org.apache.catalina.session.StandardSession.setAttribute(
> > name, value, notify)  and all the unBound calls are done in there. So
> > perhaps this is an issue with different versions of Tomcat?
> >
> > FYI RedissionSession:
> >
> >     *public* *void* setAttribute(String name, Object value, *boolean*
> notify)
> > {
> >
> >          *super*.setAttribute(name, value, notify);
> >
> >
> >
> >          *if* (value == *null*) {
> >
> >              *return*;
> >
> >          }
> >
> >          *if* (updateMode == UpdateMode.*DEFAULT* && map != *null*) {
> >
> >              fastPut(name, value);
> >
> >          }
> >
> >          *if* (readMode == ReadMode.*REDIS*) {
> >
> >              loadedAttributes.put(name, value);
> >
> >              updatedAttributes.put(name, value);
> >
> >          }
> >
> >          *if* (updateMode == UpdateMode.*AFTER_REQUEST*) {
> >
> >              removedAttributes.remove(name);
> >
> >          }
> >
> >      }
> >
> > Either way looking forward to the fix.
> >
> > On Sun, Jun 19, 2022 at 10:09 PM Sven Meier <s...@meiers.net> wrote:
> >
> >> Hi again,
> >>
> >> I found the cause of this bug:
> >>
> >> RedissonSession exposes a behavior we've seen before, which seems not to
> >> be a problem with the default Tomcat session implementation:
> >> When an attribute is set on the session, the previously set attribute is
> >> removed first - this leads to #valueUnbound() being called, signalling
> >> PersistentPageStore to drop all store pages.
> >>
> >> I'll perpare a fix tomorrow.
> >>
> >> Thanks for your report.
> >> Sven
> >>
> >>
> >> On 18.06.22 15:24, Sven Meier wrote:
> >>> Hi,
> >>>
> >>> I've stripped all pageManager related settings from your application.
> >>>
> >>> Now the bug only appears with Tomcat's RedissonSessionManager, without
> >>> it the detailPages open as expected.
> >>>
> >>> I'm no expert in Redis, so I don't know what is going wrong there. Can
> >>> you confirm my observation so far?
> >>>
> >>> Regards
> >>> Sven
> >>>
> >>>
> >>> On 13.06.22 12:30, Wayne W wrote:
> >>>> Hi Sven,
> >>>>
> >>>> Ok here is a quickstart demonstrating the issue.
> >>>>
> >>
> https://customerservices.glasscubes.com/share/s/1usch8t0hpjc4s5l3219he7s8f
> >>>>
> >>>> To reproduce, open localhost:8080 and you will now also see a list of
> 4
> >>>> links. If you right click each link and open in a new window, you
> >>>> will see
> >>>> that only the first tab will render correctly. The other tabs just
> >>>> refresh
> >>>> the page.
> >>>>
> >>>> If you change the wicket version to say 9.4.0 and do the same you
> >>>> will see
> >>>> that each page opens correctly in a new tab, and clicking on the link
> in
> >>>> the page outputs "this" to the console correctly.
> >>>>
> >>>> Let me know your thoughts
> >>>> I will of course try and understand whats happening.
> >>>>
> >>>>
> >>>> On Thu, Jun 9, 2022 at 8:45 AM Sven Meier <s...@meiers.net> wrote:
> >>>>
> >>>>> Hi Wayne,
> >>>>>
> >>>>> no idea on my side.
> >>>>>
> >>>>> Please compare without InSessionPageStore and with different max
> pages.
> >>>>>
> >>>>> If the problem persists, please provide a quickstart.
> >>>>>
> >>>>> Thanks
> >>>>> Sven
> >>>>>
> >>>>>
> >>>>> On 08.06.22 18:51, Wayne W wrote:
> >>>>>> Hi Sven,
> >>>>>>
> >>>>>> I'm having a new issue with this wicket version - I've yet had time
> to
> >>>>> dig
> >>>>>> deep and try and make a quickstart to replicate it. However I
> >>>>>> thought I
> >>>>>> would describe it first to see if it rings any bells in your head!
> >>>>>>
> >>>>>> In our app we have a file explorer like page that lists a bunch of
> >>>>>> files.
> >>>>>> Clicking one of these opens a popup over the page to see the
> >>>>>> details. We
> >>>>>> used to be able to open each of these files in a new browser tab.
> >>>>> However,
> >>>>>> now when the new tabs are opened, the details load ok, but when the
> >>>>>> user
> >>>>>> clicks on the wicket link to close the popup we are getting
> >>>>>> componentsnotfound in the page.
> >>>>>>
> >>>>>> Something about opening new browser tabs is messing up the session
> and
> >>>>>> loosing the components. I presume this is something to do with
> >>>>>> InSessionPageStore. Opening a single new tab is fine, it when there
> >>>>>> are
> >>>>>> more than 2 in total. I tried increasing the maxPages to 20 for
> >>>>>> InSessionPageStore
> >>>>>> but it made no difference.
> >>>>>>
> >>>>>> Any idea?
> >>>>>>
> >>>>>> On Wed, Jun 8, 2022 at 10:43 AM Sven Meier <s...@meiers.net> wrote:
> >>>>>>
> >>>>>>> Thanks Wayne!
> >>>>>>>
> >>>>>>> The fix will be part of the next 9.x release.
> >>>>>>>
> >>>>>>> Best regards
> >>>>>>> Sven
> >>>>>>>
> >>>>>>>
> >>>>>>> On 07.06.22 12:22, Wayne W wrote:
> >>>>>>>> Hi Sven,
> >>>>>>>>
> >>>>>>>> I can confirm your fix is working .
> >>>>>>>>
> >>>>>>>> I suppose it will be a while before this reaches an official
> >>>>>>>> release?
> >>>>>>>> Thanks for your help - really appreciated.
> >>>>>>>>
> >>>>>>>> Wayne
> >>>>>>>>
> >>>>>>>> On Sun, May 29, 2022 at 10:47 PM Sven Meier <s...@meiers.net>
> >> wrote:
> >>>>>>>>> Hi Wayne,
> >>>>>>>>>
> >>>>>>>>> the Eclipse .project still has 9.1.1 on the classpath:
> >>>>>>>>>
> >>>>>>>>>          <classpathentry kind="var"
> >>>>>>>>>
> >> path="M2_REPO/org/apache/wicket/wicket-core/9.9.1/wicket-core-9.9.1.jar"
> >>>>>
> >>
> sourcepath="M2_REPO/org/apache/wicket/wicket-core/9.9.1/wicket-core-9.9.1-sources.jar"/>
> >>
> >>>>>>>>> Without that, flushing of the Session works fine here with my
> >>>>>>>>> fix on
> >>>>> 9.x
> >>>>>>>>> BTW the workaround with HubInSessionCache subclassing
> >>>>> InSessionPageStore
> >>>>>>>>> (to use a separate MetaDataKey) is no longer needed.
> >>>>>>>>>
> >>>>>>>>> Regards
> >>>>>>>>> Sven
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On 26.05.22 19:19, Wayne W wrote:
> >>>>>>>>>> Hello Sven,
> >>>>>>>>>>
> >>>>>>>>>> So this particular issue I've been investigating might be a
> >>>>>>>>>> lack of
> >>>>> my
> >>>>>>>>>> understanding of wicket as much as a session issue, but it
> >>>>>>>>>> seems odd
> >>>>>>>>>> and I'm fairly sure it's not correct. It appears I need to call
> >>>>>>>>>> getSession().dirty();
> >>>>>>>>>> as well within the ajax request for wicket to flush the updated
> >>>>>>>>>> model
> >>>>>>>>> into
> >>>>>>>>>> the session (in the onDetach -> internalDetach -> setAttribute )
> >>>>>>>>> otherwise
> >>>>>>>>>> the model update is simply ignored. If I don't call dirty()
> >>>>>>>>>> then the
> >>>>>>>>> model
> >>>>>>>>>> is never persisted to the httlpsession via setAttribute() and
> the
> >>>>>>> change
> >>>>>>>>> is
> >>>>>>>>>> lost.
> >>>>>>>>>>
> >>>>>>>>>> Is that right?
> >>>>>>>>>>
> >>>>>>>>>> Interestingly if I remove this from the Application:
> >>>>>>>>>>
> >>>>>>>>>> *final* ISerializer serializer = *new*
> >>>>>>>>> JavaSerializer(getApplicationKey());
> >>>>>>>>>> getFrameworkSettings().setSerializer(serializer);
> >>>>>>>>>>
> >>>>>>>>>> getStoreSettings().setAsynchronous(*false*);
> >>>>>>>>>>
> >>>>>>>>>> setPageManagerProvider(*new* DefaultPageManagerProvider(*this*)
> {
> >>>>>>>>>>
> >>>>>>>>>>                  *protected* IPageStore
> newCachingStore(IPageStore
> >>>>>>> pageStore)
> >>>>>>>>>>              {
> >>>>>>>>>>
> >>>>>>>>>>              *return* *new* CachingPageStore(pageStore, *new*
> >>>>>>>>> HubInSessionCache(
> >>>>>>>>>> serializer));
> >>>>>>>>>>
> >>>>>>>>>>              }
> >>>>>>>>>>
> >>>>>>>>>>              });
> >>>>>>>>>>
> >>>>>>>>>> Then I do not need to call dirty(). Is this because the
> >>>>>>>>>> httpsession
> >>>>> is
> >>>>>>>>> not
> >>>>>>>>>> used I presume?
> >>>>>>>>>>
> >>>>>>>>>> If I do not use persisted tomcat session in redis it's ok
> >>>>>>>>>> though when
> >>>>>>> not
> >>>>>>>>>> calling dirty() - this because as I explained before,
> >>>>>>>>>> setAttribute is
> >>>>>>> not
> >>>>>>>>>> being called on the tomcat httpsession on the next request to
> the
> >>>>>>>>> AjaxLink.
> >>>>>>>>>> The redis tomcat is looking for calls to the setAttribute to
> store
> >>>>> the
> >>>>>>>>>> updated session into redis , and without that explicit dirty()
> >>>>>>>>>> call
> >>>>> it
> >>>>>>>>>> doesn't happen.
> >>>>>>>>>>
> >>>>>>>>>> Here is a quickstart if you want:
> >>>>>>>>>>
> >>
> https://customerservices.glasscubes.com/share/s/mvecp90dlvqlp3p2b744q0gps4
> >>>>>>>>>> You will need a bog standard redis instance running on your
> >>>>>>>>>> machine
> >>>>>>>>> though
> >>>>>>>>>> to test. Check the path is correct in Start.java line 84.
> >>>>>>>>>> Line 74 in HomePage.java has the dirty commented out at the
> >>>>>>>>>> moment.
> >>>>>>>>>>
> >>>>>>>>>> Enter some text into the textfield and you will see the model is
> >>>>>>> updated
> >>>>>>>>>> (printed out). However when you click on the AjaxLink 'next' the
> >>>>> model
> >>>>>>> is
> >>>>>>>>>> null.
> >>>>>>>>>>
> >>>>>>>>>> Let me know your thoughts
> >>>>>>>>>> Many thanks.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Wed, May 25, 2022 at 4:19 PM Wayne W
> >>>>>>>>>> <waynemailingli...@gmail.com
> >>>>>>>>> wrote:
> >>>>>>>>>>> Hi Sven,
> >>>>>>>>>>>
> >>>>>>>>>>> Many thanks.
> >>>>>>>>>>>
> >>>>>>>>>>> I've built 9,x and the changes seem to be there, but I still
> have
> >>>>> the
> >>>>>>>>>>> issue. I will try and create a quickstart reproducing this
> >>>>>>>>>>> issue and
> >>>>>>> get
> >>>>>>>>>>> back to you.
> >>>>>>>>>>>
> >>>>>>>>>>> Wayne
> >>>>>>>>>>>
> >>>>>>>>>>> On Wed, May 25, 2022 at 8:34 AM Sven Meier <s...@meiers.net>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Hi Wayne,
> >>>>>>>>>>>>
> >>>>>>>>>>>> I've pushed a fix to
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>
> https://github.com/apache/wicket/tree/WICKET-6981-session-attributes-not-set
> >>>>>>>>>>>> Are you able to test this on your setup?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Regards
> >>>>>>>>>>>> Sven
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On 24.05.22 10:43, Wayne W wrote:
> >>>>>>>>>>>>> Hello Sven,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Any update on this?
> >>>>>>>>>>>>> Many thanks
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Mon, May 16, 2022 at 11:40 AM Sven Meier <s...@meiers.net
> >
> >>>>>>> wrote:
> >>>>>>>>>>>>>> Hi Wayne,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> not, because InSessionPageStore#canBeAsynchronous returns
> >>>>>>>>>>>>>> false,
> >>>>>>>>>>>> thereby
> >>>>>>>>>>>>>> preventing asynchronous adds.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Regards
> >>>>>>>>>>>>>> Sven
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On 16.05.22 09:37, Wayne W wrote:
> >>>>>>>>>>>>>>> Ah that's great Sven.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Just a question - is it necessary for me to call
> >>>>>>>>>>>>>>> getStoreSettings().setAsynchronous(false); when wanting to
> >>>>> support
> >>>>>>>>>>>> http
> >>>>>>>>>>>>>>> session setup?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I saw a post about this quite some time ago but I'm not
> sure.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks for clarifying
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Sun, May 15, 2022 at 8:54 PM Sven Meier <
> s...@meiers.net>
> >>>>>>> wrote:
> >>>>>>>>>>>>>>>> Hi Wayne,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I've create an issue for this bug:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/WICKET-6981
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I think I have a fix ready, but have to give it some more
> >>>>> tests.
> >>>>>>>>>>>>>>>> Thanks for reporting the issue.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Sven
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On 10.05.22 23:25, Sven Meier wrote:
> >>>>>>>>>>>>>>>>> Hi Wayne,
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Is this a bug?
> >>>>>>>>>>>>>>>>> could be, do we have a Jira issue already?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I think there might be a call to Session#setMetaData()
> >>>>> missing.
> >>>>>>>>>>>> Before
> >>>>>>>>>>>>>>>>> Wicket 9.x it seemed to have been called additionally
> >>>>>>>>>>>>>>>>> when a
> >>>>>>> page
> >>>>>>>>> is
> >>>>>>>>>>>>>>>>> stored in the session.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I'll take a deeper look into this tomorrow.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Best regards
> >>>>>>>>>>>>>>>>> Sven
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On 10.05.22 18:47, Wayne W wrote:
> >>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I am *still* trying to troubleshoot why migrating to
> >>>>>>>>>>>>>>>>>> 9.4 we
> >>>>>>> have
> >>>>>>>>>>>>>>>>>> found that
> >>>>>>>>>>>>>>>>>> our app no longer supports session failover correctly.
> >>>>>>>>>>>>>>>>>> We use
> >>>>>>>>>>>>>>>>>> Redission to
> >>>>>>>>>>>>>>>>>> store the tomcat session in Redis.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> After a lot of debugging it appears that for
> >>>>>>>>>>>>>>>>>> AjaxFormComponentUpdatingBehavior.onEvent() calls,
> >>>>>>>>>>>>>>>>>> HttpSessionStore.flushSession() is never called after.
> And
> >>>>>>>>> changes
> >>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>> model are not persisted in the HTTP Session and into
> Redis
> >>>>>>> backed
> >>>>>>>>>>>>>> store.
> >>>>>>>>>>>>>>>>>> The reason is setAttribute is never called on the
> >>>>>>>>>>>>>>>>>> session and
> >>>>>>>>>>>>>>>>>> therefore the
> >>>>>>>>>>>>>>>>>> updated session with good model values is never
> persisted.
> >>>>> And
> >>>>>>>>> when
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>> next call arrives, the page is pulled back out of
> >>>>>>>>>>>>>>>>>> Redis/Http
> >>>>>>>>>>>> session
> >>>>>>>>>>>>>>>>>> without the changes.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I had to do the following to get the wicket session to
> be
> >>>>>>> stored
> >>>>>>>>> in
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>> session within our Application:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ISerializer serializer = new
> >>>>>>> JavaSerializer(getApplicationKey());
> >>>>>>>>>>>>>>>>>> getFrameworkSettings().setSerializer(serializer);
> >>>>>>>>>>>>>>>>>> getStoreSettings().setAsynchronous(false);
> >>>>>>>>>>>>>>>>>> setPageManagerProvider(new
> >>>>>>>>>>>>>>>>>> DefaultPageManagerProvider(this) {
> >>>>>>>>>>>>>>>>>>                     protected IPageStore
> >>>>>>> newCachingStore(IPageStore
> >>>>>>>>>>>>>> pageStore)
> >>>>>>>>>>>>>>>>>> {
> >>>>>>>>>>>>>>>>>>                 return new CachingPageStore(pageStore,
> new
> >>>>>>>>>>>>>>>>>> InSessionPageStore( 2,
> >>>>>>>>>>>>>>>>>> serializer));
> >>>>>>>>>>>>>>>>>>                 }
> >>>>>>>>>>>>>>>>>>                 });
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> The objects are updated in the session page object
> >>>>>>>>>>>>>>>>>> instance
> >>>>>>>>>>>> correctly
> >>>>>>>>>>>>>>>>>> with
> >>>>>>>>>>>>>>>>>> AjaxFormComponentUpdatingBehavior , however this issue
> is
> >>>>> they
> >>>>>>>>> are
> >>>>>>>>>>>>>> never
> >>>>>>>>>>>>>>>>>> saved/persisted as setAttribute is not called. So the
> next
> >>>>>>>>> request
> >>>>>>>>>>>>>> comes
> >>>>>>>>>>>>>>>>>> and a new page object instance is unserialized from the
> >>>>>>>>>>>>>>>>>> store
> >>>>>>>>>>>> without
> >>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>> changes.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Is this a bug?
> >>>>>>>>>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> >> users-unsubscr...@wicket.apache.org
> >>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>>>>>>>>>>>> users-h...@wicket.apache.org
> >>>>>>>>>>>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> users-unsubscr...@wicket.apache.org
> >>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>>>>>>>>>>> users-h...@wicket.apache.org
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >>>>>>>>>>>>>> For additional commands, e-mail:
> users-h...@wicket.apache.org
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >>>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
> >>>>>>>
> >>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >>>>> For additional commands, e-mail: users-h...@wicket.apache.org
> >>>>>
> >>>>>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >> For additional commands, e-mail: users-h...@wicket.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to