Hi Martin,

If the next release is not too far away, I'd rather wait.

I'm already pushing a milestone to production and don't want to copy large
chunks of code to my project as well ;)

Best regards,

Thomas

On Thu, Apr 16, 2020 at 1:33 PM Martin Grigorov <mgrigo...@apache.org>
wrote:

> Hi Thomas,
>
> On Thu, Apr 16, 2020 at 1:41 PM Thomas Heigl <tho...@umschalt.com> wrote:
>
> > Thanks Sven!
> >
> > I think the solution is good enough for now.
> >
> > Would it be possible to do a 9.0.0-M5.1 release for this? If so, I would
> > give it another try on production.
> >
>
> It would be easier to copy the class temporarily in your project and fix
> the import in YourApplication.java.
> You can revert this change with the next release.
>
>
> >
> > Best regards,
> >
> > Thomas
> >
> > On Wed, Apr 15, 2020 at 11:57 PM Sven Meier <s...@meiers.net> wrote:
> >
> > > Hi Thomas,
> > >
> > > I've pushed a change for
> > > https://issues.apache.org/jira/browse/WICKET-6769 to master.
> > >
> > > I'm not sure about the API right now, but it allows you to easily use
> > > any other map implementation.
> > >
> > > Caffeine's Cache#asMap() should work fine with here, although I didn't
> > > test it myself.
> > >
> > > Have fun
> > > Sven
> > >
> > >
> > > On 12.04.20 20:41, Thomas Heigl wrote:
> > > > Hi Sven,
> > > >
> > > > I was thinking about this as well.
> > > >
> > > > SoftReferences worked well in my application. G1GC seems to start to
> > > evict
> > > > them when -XX:InitiatingHeapOccupancyPercent is reached. In my case,
> > when
> > > > the heap is around 60% full.
> > > > But as you said, there is no real control over which references are
> > > evicted
> > > > and it is much harder to monitor the current state of the memory map.
> > > >
> > > > We are already using Caffeine extensively and your suggested solution
> > > would
> > > > allow me much more control over the cache.
> > > > We could still use SoftReferences with Caffeine if we wanted to in
> > > addition
> > > > to setting a global limit on cache size and an eviction policy.
> > > >
> > > > To avoid calling an overridable method from the constructor you could
> > > add a
> > > > Supplier<Map<String, MemoryData>> argument. I usually choose a
> > > > supplier-based approach in such cases.
> > > >
> > > > Let's go for this solution!
> > > >
> > > > Best regards,
> > > >
> > > > Thomas
> > > >
> > > >
> > > >
> > > > On Sun, Apr 12, 2020 at 6:57 PM Sven Meier <s...@meiers.net> wrote:
> > > >
> > > >> Hi Thomas,
> > > >>
> > > >> I've did a little research on using SoftReferences for caches:
> > > >>
> > > >>
> > >
> >
> https://stackoverflow.com/questions/264582/is-there-a-softhashmap-in-java
> > > >>
> > > >>
> > >
> >
> http://jeremymanson.blogspot.com/2009/07/how-hotspot-decides-to-clear_07.html
> > > >>
> > > >> The experts seem to agree that depending on the GC to clean up your
> > > >> cache is a bad idea:
> > > >>
> > > >> - you can't control which elements in the cache are evicted first
> > > >> - eviction happens only when the system is low on memory
> > > >>
> > > >> Best option would be using Guava's CacheBuilder:
> > > >>
> > > >>     https://github.com/google/guava/wiki/CachesExplained
> > > >>
> > > >> IMHO these are very special solutions and we don't actually need to
> > > >> integrate one of them into Wicket.
> > > >> Instead we can leave that decision to your application, by adding an
> > > >> overridable method to InMemoryPageStore:
> > > >>
> > > >>       /**
> > > >>        * Create a map to hold memory data for all sessions.
> > > >>        *
> > > >>        * @return a {@link ConcurrentHashMap} by default
> > > >>        */
> > > >>       protected Map<String, MemoryData> newMemoryMap()
> > > >>       {
> > > >>           return new ConcurrentHashMap<>();
> > > >>       }
> > > >>
> > > >> (Yes, it would be called from the constructor which is a bad
> practice
> > by
> > > >> itself, but this is the simplest solution.)
> > > >>
> > > >> What do you think?
> > > >>
> > > >> Sven
> > > >>
> > > >>
> > > >> On 12.04.20 10:34, Thomas Heigl wrote:
> > > >>> Hi Sven,
> > > >>>
> > > >>> That's good to hear! Please let me know when you have an
> > implementation
> > > >> and
> > > >>> I'll give it another go.
> > > >>>
> > > >>> Best regards,
> > > >>>
> > > >>> Thomas
> > > >>>
> > > >>> On Sat, Apr 11, 2020 at 11:01 PM Sven Meier <s...@meiers.net>
> wrote:
> > > >>>
> > > >>>> Hi Thomas,
> > > >>>>
> > > >>>> actually not bad news at all (for Wicket 9 at least).
> > > >>>>
> > > >>>> The old page manager implementation had so many special concepts
> and
> > > >>>> solutions, it's easy to miss one.
> > > >>>>
> > > >>>> A soft reference feature can easily be added/restored. I'm already
> > > >>>> checking where it fits best.
> > > >>>>
> > > >>>> Thanks for your thorough testing.
> > > >>>>
> > > >>>> Best regards
> > > >>>> Sven
> > > >>>>
> > > >>>>
> > > >>>> On 11.04.20 10:58, Thomas Heigl wrote:
> > > >>>>> Hi all,
> > > >>>>>
> > > >>>>> Bad news. My application was caught in a GC loop after running
> for
> > 8
> > > >>>> hours.
> > > >>>>> The old generation was exhausted.
> > > >>>>>
> > > >>>>> I couldn't get a heap dump at that time but restarted the
> > > application,
> > > >>>> took
> > > >>>>> a heap dump after about an hour, and reverted back to Wicket 8.
> > > >>>>>
> > > >>>>> The problem is this: The heap was full of objects referencing
> > > >>>>> InMemoryPageStore, i.e. the in-memory 2nd-level cache for pages.
> My
> > > >> first
> > > >>>>> thought was that there is something wrong with the implementation
> > of
> > > >> that
> > > >>>>> store and pages do not get limited or removed correctly.  So I
> > > debugged
> > > >>>>> it locally but everything is working fine.
> > > >>>>>
> > > >>>>> Then I noticed that there are a lot of instances of Hibernate
> > > entities
> > > >> on
> > > >>>>> the heap. So there definitely is an issue with models somewhere
> in
> > my
> > > >>>>> application. To be sure that this is not a new issue, I took
> > another
> > > >> heap
> > > >>>>> dump from production - now running Wicket 8 again - and compared
> > it.
> > > >>>>> There are undetached entity models on the heap as well.
> > > >>>>>
> > > >>>>> So why does it not OOM with Wicket 8? Well, the
> PerSessionPageStore
> > > >>>>> (roughly the equivalent of InMemoryPageStore in Wicket 9) uses
> > > >>>>> SoftReferences for storing pages. InMemoryPageStore does not and
> GC
> > > >>>> cannot
> > > >>>>> reclaim memory from it.
> > > >>>>>
> > > >>>>> So while this surfaced some issues in my application that I just
> > > >> fixed, I
> > > >>>>> believe that InMemoryPageStore should use SoftReferences or
> another
> > > >>>>> implementation based on SoftReferences should be added to Wicket
> > 9. A
> > > >>>> cache
> > > >>>>> should not consume all the memory if it can easily re-fetch
> > > >>>>> the value from persistent storage.
> > > >>>>>
> > > >>>>> I guess the reason for not using SoftReferences in
> > InMemoryPageStore
> > > is
> > > >>>>> that it can theoretically be used as a "persistent" store for
> > pages.
> > > If
> > > >>>> that
> > > >>>>> behavior is really required, I suggest adding another
> > implementation
> > > >>>> using
> > > >>>>> SoftReferences.
> > > >>>>>
> > > >>>>> Best regards,
> > > >>>>>
> > > >>>>> Thomas
> > > >>>>>
> > > >>>>> On Fri, Apr 10, 2020 at 7:19 PM Martin Grigorov <
> > > mgrigo...@apache.org>
> > > >>>>> wrote:
> > > >>>>>
> > > >>>>>> On Fri, Apr 10, 2020 at 4:01 PM Thomas Heigl <
> tho...@umschalt.com
> > >
> > > >>>> wrote:
> > > >>>>>>> FYI: I deployed Wicket 9.0.0-M5 to production an hour ago. 100k
> > > >>>> requests
> > > >>>>>>> served and no issues so far.
> > > >>>>>>>
> > > >>>>>> Awesome!
> > > >>>>>> Thank you for testing it!
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>> Great work!
> > > >>>>>>>
> > > >>>>>>> Thomas
> > > >>>>>>>
> > > >>>>>>> On Wed, Apr 8, 2020 at 3:13 PM Sven Meier <s...@meiers.net>
> > wrote:
> > > >>>>>>>
> > > >>>>>>>> Many thanks Maxim!
> > > >>>>>>>>
> > > >>>>>>>> Sven
> > > >>>>>>>>
> > > >>>>>>>> On 08.04.20 14:29, Maxim Solodovnik wrote:
> > > >>>>>>>>> Released :)
> > > >>>>>>>>>
> > > >>>>>>>>> On Wed, 8 Apr 2020 at 15:41, Maxim Solodovnik <
> > > >> solomax...@gmail.com>
> > > >>>>>>>> wrote:
> > > >>>>>>>>>> OK
> > > >>>>>>>>>>
> > > >>>>>>>>>> Will start new release process in couple of hours
> > > >>>>>>>>>> Please stop me if you will find any blocker :)
> > > >>>>>>>>>>
> > > >>>>>>>>>> On Wed, 8 Apr 2020 at 14:36, Thomas Heigl <
> > tho...@umschalt.com>
> > > >>>>>>> wrote:
> > > >>>>>>>>>>> Hi Maxim,
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> It works for me now!
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> Thomas
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> On Wed, Apr 8, 2020 at 9:17 AM Maxim Solodovnik <
> > > >>>>>>> solomax...@gmail.com>
> > > >>>>>>>>>>> wrote:
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>> Thanks a million!
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> On Wed, 8 Apr 2020 at 14:10, Thomas Heigl <
> > > tho...@umschalt.com>
> > > >>>>>>>> wrote:
> > > >>>>>>>>>>>>> Hi Maxim,
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> I'm testing against the snapshot now. Will get back to
> you
> > > >>>>>> shortly.
> > > >>>>>>>>>>>>> Thomas
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> On Wed, Apr 8, 2020 at 2:53 AM Maxim Solodovnik <
> > > >>>>>>>> solomax...@gmail.com>
> > > >>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> Hello All,
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> M5 seems to be broken (deploy has failed more than 10
> > times
> > > >>>>>> during
> > > >>>>>>>> my
> > > >>>>>>>>>>>>>> build attempts)
> > > >>>>>>>>>>>>>> I have to start another release
> > > >>>>>>>>>>>>>> Could you please tell when can I start?
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> On Wed, 8 Apr 2020 at 07:01, Maxim Solodovnik <
> > > >>>>>>> solomax...@gmail.com
> > > >>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>> Hello Thomas,
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> Please test M6-SNAPSHOT (so I don't have to release
> M5.2
> > > >> :))))
> > > >>>>>>>>>>>>>>> On Wed, 8 Apr 2020 at 02:39, Thomas Heigl <
> > > >> tho...@umschalt.com
> > > >>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>> Hi Maxim,
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> That would be great. I want to do some more extensive
> > > >> testing
> > > >>>>>>> and
> > > >>>>>>>>>>>> then
> > > >>>>>>>>>>>>>>>> deploy M5 into production. ;)
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Thomas
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> On Tue, Apr 7, 2020 at 7:50 PM Maxim Solodovnik <
> > > >>>>>>>>>>>> solomax...@gmail.com>
> > > >>>>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> I can pack another release
> > > >>>>>>>>>>>>>>>>> later this week ...
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> On Wed, 8 Apr 2020 at 00:48, Thomas Heigl <
> > > >>>>>> tho...@umschalt.com
> > > >>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>> Thanks Sven!
> > > >>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>> Did your changes make it into the release? Or did
> they
> > > >> just
> > > >>>>>>>>>>>> miss
> > > >>>>>>>>>>>>>> it?
> > > >>>>>>>>>>>>>>>>>> Thomas
> > > >>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>> On Tue, Apr 7, 2020 at 7:43 PM Sven Meier <
> > > >> s...@meiers.net>
> > > >>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>>> Hi Thomas,
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>> yes, you're right:
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>> wicketstuff data stores missed some adjustments to
> > the
> > > >>>>>> latest
> > > >>>>>>>>>>>>>> updates
> > > >>>>>>>>>>>>>>>>> in
> > > >>>>>>>>>>>>>>>>>>> wicket-core.
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>> And SessionQuotaManagingDataStore$DelegatedPage
> must
> > be
> > > >>>>>>>>>>>>>> serializable of
> > > >>>>>>>>>>>>>>>>>>> course.
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>> I've pushed changes to wicketstuff master.
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>> Thanks
> > > >>>>>>>>>>>>>>>>>>> Sven
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>> On 07.04.20 14:14, Thomas Heigl wrote:
> > > >>>>>>>>>>>>>>>>>>>> And one more thing. There is now a warning logged
> > just
> > > >>>>>>>>>>>> before
> > > >>>>>>>>>>>>>>>>>>> serialization:
> > > >>>>>>>>>>>>>>>>>>>> WARN o.a.w.pageStore.AsynchronousPageStore    :
> > > >> Delegated
> > > >>>>>>>>>>>> page
> > > >>>>>>>>>>>>>> store
> > > >>>>>>>>>>>>>>>>>>>>>
> 'org.apache.wicket.pageStore.SerializingPageStore'
> > > can
> > > >>>>>>>>>>>> not be
> > > >>>>>>>>>>>>>>>>>>> asynchronous
> > > >>>>>>>>>>>>>>>>>>>> On Tue, Apr 7, 2020 at 2:09 PM Thomas Heigl <
> > > >>>>>>>>>>>>>> tho...@umschalt.com>
> > > >>>>>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>>>>> The cause is the following MetaData entry in the
> > > >> session:
> > > >>>>>>>>>>>>>>>>>>>>> class
> > > >>
> > >
> >
> org.wicketstuff.datastores.common.SessionQuotaManagingDataStore$1=org.wicketstuff.datastores.common.SessionQuotaManagingDataStore$SizeLimitedData@4090594a
> > > >>>>>>>>>>>>>>>>>>>>> On Tue, Apr 7, 2020 at 1:59 PM Thomas Heigl <
> > > >>>>>>>>>>>>>> tho...@umschalt.com>
> > > >>>>>>>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>>>>>> Hi Sven,
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>> I just found time to give this a try with Wicket
> > > >>>>>>>>>>>> 9.0.0-M5.
> > > >>>>>>>>>>>>>> There
> > > >>>>>>>>>>>>>>>>> seem
> > > >>>>>>>>>>>>>>>>>>> to
> > > >>>>>>>>>>>>>>>>>>>>>> be issues with serialization now.
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>> My new config:
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>> protected IPageStore newCachingStore(IPageStore
> > > >>>>>>>>>>>> pageStore) {
> > > >>>>>>>>>>>>>>>>>>>>>>> return new CachingPageStore(pageStore, new
> > > >>>>>>>>>>>>>>>>>>> InMemoryPageStore(getName(),
> > > >>>>>>>>>>>>>>>>>>>>>>> MAX_PAGES_CACHED_PER_SESSION));
> > > >>>>>>>>>>>>>>>>>>>>>>> }
> > > >>>>>>>>>>>>>>>>>>>>>>> protected IPageStore newPersistentStore() {
> > > >>>>>>>>>>>>>>>>>>>>>>> final RedissonRedisCache redisCache = new
> > > >>>>>>>>>>>>>>>>>>>>>>> RedissonRedisCache(redissonClient);
> > > >>>>>>>>>>>>>>>>>>>>>>> final RedisDataStore redisDataStore = new
> > > >>>>>>>>>>>>>>>>> RedisDataStore(getName(),
> > > >>>>>>>>>>>>>>>>>>>>>>> redisCache, new RedisSettings());
> > > >>>>>>>>>>>>>>>>>>>>>>> return new
> > > >>>>>> SessionQuotaManagingDataStore(redisDataStore,
> > > >>>>>>>>>>>>>>>>>>>>>>> DATA_STORE_MAX_BYTES_PER_SESSION);
> > > >>>>>>>>>>>>>>>>>>>>>>> }
> > > >>>>>>>>>>>>>>>>>>>>>> This exception is logged after requests:
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>
> org.springframework.data.redis.serializer.SerializationException:
> > > >>>>>>>>>>>>>>>>>>> Cannot
> > > >>>>>>>>>>>>>>>>>>>>>>> serialize; nested exception is
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> org.springframework.core.serializer.support.SerializationFailedException:
> > > >>>>>>>>>>>>>>>>>>>>>>> Failed to serialize object using
> > DefaultSerializer;
> > > >>>>>>>>>>>> nested
> > > >>>>>>>>>>>>>>>>> exception
> > > >>>>>>>>>>>>>>>>>>> is
> > > >>>>>>>>>>>>>>>>>>>>>>> java.io.NotSerializableException:
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.wicketstuff.datastores.common.SessionQuotaManagingDataStore$DelegatedPage
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:96)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.data.redis.core.AbstractOperations.rawHashValue(AbstractOperations.java:185)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:147)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> com.myproject.session.InstrumentedFindByIndexNameSessionRepository.save(InstrumentedFindByIndexNameSessionRepository.java:29)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > >>>>>>>>>>>>>>>>>>>>>>> Method)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> io.micrometer.core.aop.TimedAspect.processWithTimer(TimedAspect.java:105)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>
> > io.micrometer.core.aop.TimedAspect.timedMethod(TimedAspect.java:94)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>
> > > jdk.internal.reflect.GeneratedMethodAccessor146.invoke(Unknown
> > > >>>>>>>>>>>>>>>>>>> Source)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
> > > >>>>>>>>>>>>>>>>>>>>>>> at com.sun.proxy.$Proxy296.save(Unknown Source)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:666)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>> org.apache.tomcat.util.net
> > > >>>>>>>>>>>>>>>>>>>
> > > .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>> org.apache.tomcat.util.net
> > > >>>>>>>>>>>>>>>>>>>
> .SocketProcessorBase.run(SocketProcessorBase.java:49)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > java.base/java.lang.Thread.run(Thread.java:834)
> > > >>>>>>>>>>>>>>>>>>>>>>> Caused by:
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> org.springframework.core.serializer.support.SerializationFailedException:
> > > >>>>>>>>>>>>>>>>>>>>>>> Failed to serialize object using
> > DefaultSerializer;
> > > >>>>>>>>>>>> nested
> > > >>>>>>>>>>>>>>>>> exception
> > > >>>>>>>>>>>>>>>>>>> is
> > > >>>>>>>>>>>>>>>>>>>>>>> java.io.NotSerializableException:
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.wicketstuff.datastores.common.SessionQuotaManagingDataStore$DelegatedPage
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:68)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:35)
> > > >>>>>>>>>>>>>>>>>>>>>>> at
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:94)
> > > >>>>>>>>>>>>>>>>>>>>>>> ... 52 common frames omitted
> > > >>>>>>>>>>>>>>>>>>>>>>> Caused by: java.io.NotSerializableException:
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> org.wicketstuff.datastores.common.SessionQuotaManagingDataStore$DelegatedPage
> > > >>>>>>>>>>>>>>>>>>>>>> Why does Wicket 9 try to serialize the
> > > >>>>>>>>>>>>>>>>> SessionQuotaManagingDataStore in
> > > >>>>>>>>>>>>>>>>>>>>>> the session? Is this intended and does
> > DelegatePage
> > > >>>>>>>>>>>> simply
> > > >>>>>>>>>>>>>> need to
> > > >>>>>>>>>>>>>>>>>>>>>> implement Serializable or shouldn't this be
> > > serialized
> > > >>>>>> at
> > > >>>>>>>>>>>>>> all? In
> > > >>>>>>>>>>>>>>>>>>> Wicket 8,
> > > >>>>>>>>>>>>>>>>>>>>>> the corresponding PageData wasn't serializable
> > > either
> > > >> so
> > > >>>>>>>>>>>> my
> > > >>>>>>>>>>>>>> guess
> > > >>>>>>>>>>>>>>>>>>> would be
> > > >>>>>>>>>>>>>>>>>>>>>> that this behavior is not intended.
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>> I'm using the following config for Wicket 8 and
> > > there
> > > >>>>>>>>>>>> are no
> > > >>>>>>>>>>>>>> such
> > > >>>>>>>>>>>>>>>>>>> issues:
> > > >>>>>>>>>>>>>>>>>>>>>> protected IPageStore newPageStore(IDataStore
> > > >> dataStore)
> > > >>>>>> {
> > > >>>>>>>>>>>>>>>>>>>>>>> final ISerializer pageSerializer =
> > > >>>>>>>>>>>>>>>>>>>>>>> getFrameworkSettings().getSerializer();
> > > >>>>>>>>>>>>>>>>>>>>>>> return new PerSessionPageStore(pageSerializer,
> > > >>>>>>>>>>>> dataStore,
> > > >>>>>>>>>>>>>>>>>>>>>>> MAX_PAGES_CACHED_PER_SESSION);
> > > >>>>>>>>>>>>>>>>>>>>>>> }
> > > >>>>>>>>>>>>>>>>>>>>>>> protected IDataStore newDataStore() {
> > > >>>>>>>>>>>>>>>>>>>>>>> final RedissonRedisCache redisCache = new
> > > >>>>>>>>>>>>>>>>>>>>>>> RedissonRedisCache(redissonClient.get());
> > > >>>>>>>>>>>>>>>>>>>>>>> final RedisDataStore redisDataStore = new
> > > >>>>>>>>>>>>>>>>> RedisDataStore(redisCache,
> > > >>>>>>>>>>>>>>>>>>> new
> > > >>>>>>>>>>>>>>>>>>>>>>> RedisSettings());
> > > >>>>>>>>>>>>>>>>>>>>>>> return new
> > > >>>>>> SessionQuotaManagingDataStore(redisDataStore,
> > > >>>>>>>>>>>>>>>>>>>>>>> DATA_STORE_MAX_BYTES_PER_SESSION);
> > > >>>>>>>>>>>>>>>>>>>>>>> }
> > > >>>>>>>>>>>>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>> Thomas
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>> On Sat, Mar 28, 2020 at 10:23 AM Thomas Heigl <
> > > >>>>>>>>>>>>>> tho...@umschalt.com
> > > >>>>>>>>>>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>> Thanks Sven!
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>> That looks much better. I'll give it a try as
> > soon
> > > >> as I
> > > >>>>>>>>>>>> can.
> > > >>>>>>>>>>>>>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>> Thomas
> > > >>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>> On Fri, Mar 27, 2020 at 2:23 PM Sven Meier <
> > > >>>>>>>>>>>> s...@meiers.net
> > > >>>>>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>>>>>>>> Hi Thomas,
> > > >>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>> your question comes at the right time.
> > > >>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>> I was able to improve the implementation with
> a
> > > new
> > > >>>>>>>>>>>>>>>>> CachingPageStore:
> > > >>
> > >
> >
> https://github.com/apache/wicket/blob/8df3528dc44a08b7d375c20e764a3664cd6a5f30/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java#L145
> > > >>>>>>>>>>>>>>>>>>>>>>>> You can now use InMemoryPageStore as a cache
> > too.
> > > >>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>> Have fun
> > > >>>>>>>>>>>>>>>>>>>>>>>> Sven
> > > >>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>> On 27.03.20 09:34, Sven Meier wrote:
> > > >>>>>>>>>>>>>>>>>>>>>>>>> Hi Thomas,
> > > >>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>> I thought I covered that usecase, but I will
> > have
> > > >> to
> > > >>>>>>>>>>>> take
> > > >>>>>>>>>>>>>> a
> > > >>>>>>>>>>>>>>>>> look.
> > > >>>>>>>>>>>>>>>>>>>>>>>>> Thanks for testing Wicket 9
> > > >>>>>>>>>>>>>>>>>>>>>>>>> Sven
> > > >>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>> On 25.03.20 20:10, Thomas Heigl wrote:
> > > >>>>>>>>>>>>>>>>>>>>>>>>>> Maybe the same approach could be used as for
> > > >>>>>>>>>>>>>> InSessionPageStore
> > > >>>>>>>>>>>>>>>>>>> that
> > > >>>>>>>>>>>>>>>>>>>>>>>>>> can be
> > > >>>>>>>>>>>>>>>>>>>>>>>>>> used as cache and a store:
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> > >
> >
> https://github.com/apache/wicket/commit/894799e01227781be76886b2d1cdb2a424c812e0
> > > >>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Mar 25, 2020 at 6:35 PM Thomas
> Heigl <
> > > >>>>>>>>>>>>>>>>> tho...@umschalt.com>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Hi all,
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> I just merged our master in our Wicket 9
> > branch
> > > >> and
> > > >>>>>>>>>>>> I
> > > >>>>>>>>>>>>>> ran
> > > >>>>>>>>>>>>>>>>> into an
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> issue:
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Our current configuration with Wicket 8
> looks
> > > >> like
> > > >>>>>>>>>>>> this:
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> PageStore = PerSessionPageStore
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> DataStore = RedisDataStore
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> So the page store keeps the last couple of
> > > pages
> > > >> of
> > > >>>>>>>>>>>> a
> > > >>>>>>>>>>>>>> session
> > > >>>>>>>>>>>>>>>>> in
> > > >>>>>>>>>>>>>>>>>>>>>>>> memory
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> and Redis is used as a persistent store.
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> I tried to recreate this behavior with
> Wicket
> > > 9:
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> SessionStore = InMemoryPageStore
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> PersistentStore = RedisDataStore
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> This looks correct, but it *does not work*
> > > >> because
> > > >>>>>>>>>>>>>>>>> InMemoryPage
> > > >>>>>>>>>>>>>>>>>>>>>>>> store
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> implements AbstractPersistentPageStore and
> > does
> > > >>>>>>>>>>>> *not*
> > > >>>>>>>>>>>>>>>>> delegate to
> > > >>>>>>>>>>>>>>>>>>>>>>>> the
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> next store in the chain.
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> So we basically lost the option to use a
> > memory
> > > >>>>>> page
> > > >>>>>>>>>>>>>> store in
> > > >>>>>>>>>>>>>>>>>>> front
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> of a
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> persistent store.
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> We need this functionality because we are
> > using
> > > >>>>>>>>>>>> Spring
> > > >>>>>>>>>>>>>>>>> Session and
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> cannot
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> use the session as a page store.
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Would it be possible to add an InMemory
> store
> > > >> that
> > > >>>>>>>>>>>>>> delegates
> > > >>>>>>>>>>>>>>>>> to
> > > >>>>>>>>>>>>>>>>>>> the
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> next
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> store in the chain? Or do I have to
> implement
> > > it
> > > >>>>>>>>>>>> myself?
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Thomas
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > >>
> ---------------------------------------------------------------------
> > > >>>>>>>>>>>>>>>>>>>>>>>>> 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
> > > >>>>>>>>>>>>>>>>> --
> > > >>>>>>>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>>>>>>> Maxim
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>
> > > ---------------------------------------------------------------------
> > > >>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> > > >> users-unsubscr...@wicket.apache.org
> > > >>>>>>>>>>>>>>>>> For additional commands, e-mail:
> > > >>>>>> users-h...@wicket.apache.org
> > > >>>>>>>>>>>>>>> --
> > > >>>>>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>>>>> Maxim
> > > >>>>>>>>>>>>>> --
> > > >>>>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>>>> Maxim
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>
> ---------------------------------------------------------------------
> > > >>>>>>>>>>>>>> To unsubscribe, e-mail:
> > users-unsubscr...@wicket.apache.org
> > > >>>>>>>>>>>>>> For additional commands, e-mail:
> > > users-h...@wicket.apache.org
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>> --
> > > >>>>>>>>>>>> Best regards,
> > > >>>>>>>>>>>> Maxim
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>
> > > ---------------------------------------------------------------------
> > > >>>>>>>>>>>> To unsubscribe, e-mail:
> users-unsubscr...@wicket.apache.org
> > > >>>>>>>>>>>> For additional commands, e-mail:
> > users-h...@wicket.apache.org
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>> --
> > > >>>>>>>>>> Best regards,
> > > >>>>>>>>>> Maxim
> > > >>
> ---------------------------------------------------------------------
> > > >>>>>>>> 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