[
https://issues.apache.org/jira/browse/WICKET-6966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17515124#comment-17515124
]
Youri de Boer commented on WICKET-6966:
---------------------------------------
We don't configure Jetty's session manager, so that should be default.
I made a copy of the InSessionPageStore class that prints a stacktrace in the
'writeObject' method. This is the result I got:
{{ at
mypackage.InSessionPageStore$SessionData.writeObject(InSessionPageStore.java:261)}}
{{ 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
java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1145)}}
{{ at
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1497)}}
{{ at
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)}}
{{ at
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)}}
{{ at
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1553)}}
{{ at
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)}}
{{ at
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)}}
{{ at
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)}}
{{ at
java.base/java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1379)}}
{{ at
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1175)}}
{{ at
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1553)}}
{{ at
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)}}
{{ at
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)}}
{{ at
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)}}
{{ at
java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)}}
{{ at
org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:383)}}
{{ at
java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:345)}}
{{ at
org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:97)}}
{{ at
org.apache.wicket.core.util.lang.WicketObjects$SerializingObjectSizeOfStrategy.sizeOf(WicketObjects.java:123)}}
{{ at
org.apache.wicket.core.util.lang.WicketObjects.sizeof(WicketObjects.java:256)}}
{{ at org.apache.wicket.Session.getSizeInBytes(Session.java:500)}}
{{ at
org.apache.wicket.protocol.http.AbstractRequestLogger.requestTime(AbstractRequestLogger.java:232)}}
{{ at org.apache.wicket.Application$2.onDetach(Application.java:1587)}}
{{ at
org.apache.wicket.request.cycle.RequestCycleListenerCollection$3.notify(RequestCycleListenerCollection.java:105)}}
{{ at
org.apache.wicket.request.cycle.RequestCycleListenerCollection$3.notify(RequestCycleListenerCollection.java:101)}}
{{ at
org.apache.wicket.util.listener.ListenerCollection$1.notify(ListenerCollection.java:120)}}
{{ at
org.apache.wicket.util.listener.ListenerCollection.reversedNotify(ListenerCollection.java:144)}}
{{ at
org.apache.wicket.util.listener.ListenerCollection.reversedNotifyIgnoringExceptions(ListenerCollection.java:113)}}
{{ at
org.apache.wicket.request.cycle.RequestCycleListenerCollection.onDetach(RequestCycleListenerCollection.java:100)}}
{{ at
org.apache.wicket.request.cycle.RequestCycle.onDetach(RequestCycle.java:670)}}
{{ at
org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:625)}}
{{ at
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:285)}}
{{ at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:208)}}
{{ at
org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)}}
{{ at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)}}
{{ at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)}}
This stacktrace appears every single request. It appears that serialization
does not only occur when the container decides to serialize the session, but
also when using the request logger.
I did als find this reference from the session to the InSessionPageStore: it's
one of the elements in the metaData array.
> IndexOutOfBounds in InSessionPageStore
> --------------------------------------
>
> Key: WICKET-6966
> URL: https://issues.apache.org/jira/browse/WICKET-6966
> Project: Wicket
> Issue Type: Bug
> Affects Versions: 9.8.0
> Reporter: Youri de Boer
> Priority: Major
>
> Recently (since wicket 9?) we are seeing the following exception in our log.
> {{ERROR | [default task-43] | 2022-03-28 10:19:03,978 |
> org.apache.wicket.util.listener.ListenerCollection$1.java:124 | Error
> invoking listener: org.apache.wicket.Application$2@6e1ac438 "mdw=152293"}}
> {{java.lang.IndexOutOfBoundsException: Index: 0, Size: -1}}
> {{ at
> java.base/java.util.LinkedList.checkPositionIndex(LinkedList.java:564)}}
> {{ at java.base/java.util.LinkedList.listIterator(LinkedList.java:871)}}
> {{ at
> java.base/java.util.AbstractList.listIterator(AbstractList.java:311)}}
> {{ at
> java.base/java.util.AbstractSequentialList.iterator(AbstractSequentialList.java:238)}}
> {{ at
> org.apache.wicket.pageStore.InSessionPageStore$SessionData.remove(InSessionPageStore.java:226)}}
> {{ at
> org.apache.wicket.pageStore.InSessionPageStore$SessionData.add(InSessionPageStore.java:212)}}
> {{ at
> org.apache.wicket.pageStore.InSessionPageStore$CountLimitedData.add(InSessionPageStore.java:320)}}
> {{ at
> org.apache.wicket.pageStore.InSessionPageStore.addPage(InSessionPageStore.java:127)}}
> {{ at
> org.apache.wicket.pageStore.CachingPageStore.addPage(CachingPageStore.java:71)}}
> {{ at
> org.apache.wicket.pageStore.RequestPageStore.detach(RequestPageStore.java:114)}}
> {{ at org.apache.wicket.page.PageManager.detach(PageManager.java:91)}}
> {{ at org.apache.wicket.Application$2.onDetach(Application.java:1582)}}
> {{ at
> org.apache.wicket.request.cycle.RequestCycleListenerCollection$3.notify(RequestCycleListenerCollection.java:105)}}
> {{ at
> org.apache.wicket.request.cycle.RequestCycleListenerCollection$3.notify(RequestCycleListenerCollection.java:101)}}
> {{ at
> org.apache.wicket.util.listener.ListenerCollection$1.notify(ListenerCollection.java:120)}}
> {{ at
> org.apache.wicket.util.listener.ListenerCollection.reversedNotify(ListenerCollection.java:144)}}
> {{ at
> org.apache.wicket.util.listener.ListenerCollection.reversedNotifyIgnoringExceptions(ListenerCollection.java:113)}}
> {{ at
> org.apache.wicket.request.cycle.RequestCycleListenerCollection.onDetach(RequestCycleListenerCollection.java:100)}}
> {{ at
> org.apache.wicket.request.cycle.RequestCycle.onDetach(RequestCycle.java:670)}}
> {{ at
> org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:625)}}
> {{ at
> org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:285)}}
> {{ at
> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:208)}}
> {{ at
> org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)}}
> {{ at
> [email protected]//javax.servlet.http.HttpServlet.service(HttpServlet.java:503)}}
>
> When this occurs it typically appears about 100 times in a very short time
> span. The users experiences a hanging page.
> Obviously, the size of a list can not be -1; I believe this to be a result of
> a race condition between one of the public methods (which are synchronized)
> and the writeObject method, which is not synchronized.
>
> One additional note: we are running 2 wars (with wicket) on the same
> container.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)