Re: NullPointerException when using shared cache

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Sep 12 2006 - 09:35:55 EDT

  • Next message: Andrus Adamchik: "Re: Default/Initial values && post validation delegates etc"

    CAY-565 was closed as "Can not reproduce", so there was no fix. I
    reopened this issue, bumping the priority to "Critical". I will add
    synchronization, even though I can't test it.

    Andrus

    On Sep 12, 2006, at 5:51 AM, Ayhan Kondoz wrote:
    > Hello,
    >
    >
    >
    > I am getting NullPointerExceptions when I am trying to use the
    > shared caching feature of cayenne.
    >
    >
    >
    > I have 3 servers. Each server has it's own tomcat / axis webservice
    > and I have an avarage access of about 4 - 5 connections per second.
    > Each connection results in about 3 - 4 select queries and about 20%
    > of the connections result in an additional 2 - 3 insert / update
    > queries. So the servers are working at pretty heavy load.
    >
    >
    >
    > Yesterday I implemented the usage of cayenne's (remote) shared
    > caching feature using JavaGroups and at first everything seemed to
    > work just fine. But after about 1 hour, one of the servers started
    > to produce NullPointerExceptions on every connection. i found this
    > bug ( http://issues.apache.org/cayenne/browse/CAY-565 ) which seems
    > to address my problem but the status is resolved?!
    >
    >
    >
    > i tried cayenne 1.2 and 1.2B1 and in both cases got this exceptions
    > but only if shared caching is activated. When I deactivate caching
    > everything seems to work fine again.
    >
    > It seems that there is a problem with the syncronization. This
    > error occursed when under heavy load and a lot of threads are
    > active at the same time. But if it is really a syncronization
    > problem the same error could occure on every system (even if much
    > more unlikely) even if not under heavy load.
    >
    >
    >
    > Cheers
    >
    > Ayhan Kondoz
    >
    >
    >
    >
    >
    > The exception when using common-collections 3.2
    >
    >
    >
    > [11.09.06 21:30:32] (ERROR): Entry.next=null, data[removeIndex]
    > =<ObjectId:Customer,
    > id=534080>=org.objectstyle.cayenne.DataRo..da158[values=
    > {suspended=false, login=christian.hantke1, rec_create=Tue May 02
    > 00:00:00 CEST 2006, rec_change=Tue May 02 20:18:34 CEST 2006,
    > last_updated=Mon Sep 11 21:28:26 CEST 2006, cid=709779451,
    > id=534080, mandant_id=3}, version=-9223372036854422785,
    > replaces=-9223372036854775808] previous=<ObjectId:Customer,
    > d=534080>=org.objectstyle.cayenne.DataRo..da158[values=
    > {suspended=false, login=christian.hantke1, rec_create=Tue May 02
    > 00:00:00 CEST 2006, rec_change=Tue May 02 20:18:34 CEST 2006,
    > last_updated=Mon Sep 11 21:28:26 CEST 2006, cid=709779451,
    > id=534080, mandant_id=3}, version=-9223372036854422785,
    > replaces=-9223372036854775808] key=<Ob
    >
    > jectId:Customer, id=364956>
    > value=org.objectstyle.cayenne.DataRo..26844[values=
    > {suspended=false, login=nadda89, rec_create=Thu Mar 30 00:00:00
    > CEST 2006, rec_change=Thu Mar 30 22:19:00 CEST 2006,
    > last_updated=Fri Aug 04 16:09:35 CEST 2006, cid=705229711,
    > id=364956, mandant_id=3}, version=-9223372036854407476,
    > replaces=-9223372036854775808] size=10000 maxSize=10000 Please
    > check that your keys are immutable, and that you have used
    > synchronization properly. If so, then please report this to commons-
    > de..akarta.apache.org as a bug.
    >
    > java.lang.IllegalStateException: Entry.next=null, data[removeIndex]
    > =<ObjectId:Customer,
    > id=534080>=org.objectstyle.cayenne.DataRo..da158[values=
    > {suspended=false, login=christian.hantke1, rec_create=Tue May 02
    > 00:00:00 CEST 2006, rec_change=Tue May 02 20:18:34 CEST 2006,
    > last_updated=Mon Sep 11 21:28:26 CEST 2006, cid=709779451,
    > id=534080, mandant_id=3}, version=-9223372036854422785,
    > replaces=-9223372036854775808] previous=<ObjectId:Customer,
    > id=534080>=org.objectstyle.cayenne.DataRo..da158[values=
    > {suspended=false, login=christian.hantke1, rec_create=Tue May 02
    > 00:00:00 CEST 20 06, rec_change=Tue May 02 20:18:34 CEST 2006,
    > last_updated=Mon Sep 11 21:28:26 CEST 2006, cid=709779451,
    > id=534080, mandant_id=3}, version=-9223372036854422785,
    > replaces=-9223372036854775808] key=<ObjectId:Customer, id=364956>
    > value=org.objectstyle.cayenne.DataRo..26844[values=
    > {suspended=false, login=nadda89, rec_create=Thu Mar 30 00:00:00
    > CEST 2006, rec_change=Thu Mar 30 22:19:00 CEST 2006,
    > last_updated=Fri Aug 04 16:09:35 CEST 2006, cid=705229711,
    > id=364956, mandant_id=3}, version=-9223372036854407476,
    > replaces=-9223372036854775808] size=10000 maxSize=10000 Please
    > check that your keys are immutable, and that you have used
    > synchronization properly. If so, then please report this to commons-
    > de..akarta.apache.org as a bug.
    >
    > at org.apache.commons.collections.map.LRUMap.reuseMapping
    > (LRUMap.java:300)
    >
    > at org.apache.commons.collections.map.LRUMap.addMapping
    > (LRUMap.java:266)
    >
    > at org.apache.commons.collections.map.AbstractHashedMap.put
    > (AbstractHashedMap.java:283)
    >
    > at
    > org.objectstyle.cayenne.access.DataRowStore.processUpdatedSnapshots
    > (DataRowStore.java:537)
    >
    > at
    > org.objectstyle.cayenne.access.DataRowStore.processSnapshotChanges
    > (DataRowStore.java:496)
    >
    > at
    > org.objectstyle.cayenne.access.ObjectStore.snapshotsUpdatedForObjects(
    > ObjectStore.java:559)
    >
    > at
    > org.objectstyle.cayenne.access.ObjectResolver.objectsFromDataRows
    > (ObjectResolver.java:162)
    >
    > at
    > org.objectstyle.cayenne.access.ObjectResolver.synchronizedObjectsFromD
    > ataRows(ObjectResolver.java:137)
    >
    > at
    > org.objectstyle.cayenne.access.DataDomainQueryAction.interceptObjectCo
    > nversion(DataDomainQueryAction.java:363)
    >
    > at
    > org.objectstyle.cayenne.access.DataDomainQueryAction.execute
    > (DataDomainQueryAction.java:151)
    >
    > at org.objectstyle.cayenne.access.DataDomain.onQuery
    > (DataDomain.java:715)
    >
    > at
    > org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
    > (ObjectContextQueryAction.java:249)
    >
    > at
    > org.objectstyle.cayenne.access.DataContextQueryAction.execute
    > (DataContextQueryAction.java:90)
    >
    > at org.objectstyle.cayenne.access.DataContext.onQuery
    > (DataContext.java:1320)
    >
    > at org.objectstyle.cayenne.access.DataContext.performQuery
    > (DataContext.java:1309)
    >
    >
    >
    > The exception when using common-collections 3.1
    >
    >
    >
    > [11.09.06 15:29:13] (ERROR):
    >
    > java.lang.NullPointerException
    >
    > at org.apache.commons.collections.map.LRUMap.reuseMapping
    > (LRUMap.java:272)
    >
    > at org.apache.commons.collections.map.LRUMap.addMapping
    > (LRUMap.java:243)
    >
    > at org.apache.commons.collections.map.AbstractHashedMap.put
    > (AbstractHashedMap.java:282)
    >
    > at
    > org.objectstyle.cayenne.access.DataRowStore.processUpdatedSnapshots
    > (DataRowStore.java:612)
    >
    > at
    > org.objectstyle.cayenne.access.DataRowStore.processSnapshotChanges
    > (DataRowStore.java:571)
    >
    > at
    > org.objectstyle.cayenne.access.DataRowStore.snapshotsUpdatedForObjects
    > (DataRowStore.java:313)
    >
    > at
    > org.objectstyle.cayenne.access.ObjectResolver.objectsFromDataRows
    > (ObjectResolver.java:159)
    >
    > at
    > org.objectstyle.cayenne.access.ObjectResolver.synchronizedObjectsFromD
    > ataRows(ObjectResolver.java:134)
    >
    > at
    > org.objectstyle.cayenne.access.DataDomainQueryAction.interceptObjectCo
    > nversion(DataDomainQueryAction.java:373)
    >
    > at
    > org.objectstyle.cayenne.access.DataDomainQueryAction.execute
    > (DataDomainQueryAction.java:151)
    >
    > at org.objectstyle.cayenne.access.DataDomain.onQuery
    > (DataDomain.java:766)
    >
    > at
    > org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
    > (ObjectContextQueryAction.java:253)
    >
    > at
    > org.objectstyle.cayenne.access.DataContextQueryAction.execute
    > (DataContextQueryAction.java:90)
    >
    > at org.objectstyle.cayenne.access.DataContext.onQuery
    > (DataContext.java:1422)
    >
    > at org.objectstyle.cayenne.access.DataContext.performQuery
    > (DataContext.java:1411)
    >
    >
    >
    >
    >
    >
    >
    > Ayhan Kondoz
    >
    >
    >
    > Software-Entwicklung
    >
    >
    >
    > ----------------------------------------------------------------------
    > ------------
    >
    > Telefon: +49 (0) 40 513 06 616
    >
    > Telefax: +49 (0) 40 513 06 998 616
    >
    > E-Mail: ayhan.kondo..reenet-ag.de <mailto:ayhan.kondoz@freenet-
    > ag.de>
    >
    > Website: http://www.freenet.de <http://www.freenet.de/> ; http://
    > www.freenet-ag.de <http://www.freenet-ag.de/>
    >
    > ----------------------------------------------------------------------
    > ------------
    >
    > freenet.de AG
    >
    > Deelbögenkamp 4c
    >
    > 22297 Hamburg
    >
    > ----------------------------------------------------------------------
    > ------------
    >
    > Vorsitzender des Aufsichtsrates: Prof. Dr. Helmut Thoma
    >
    > Vorstand: Eckhard Spoerr (Vors.),
    > Axel Krieger, Stephan Esch, Eric Berger
    >
    > Amtsgericht Hamburg HRB 74048
    >
    >
    >
    >
    >
    > Diese Information ist ausschließlich für die adressierte Person
    > oder Organisation bestimmt und könnte vertrauliches und/oder
    > privilegiertes Material enthalten. Personen oder Organisationen,
    > für die diese Information nicht bestimmt ist, ist es nicht
    > gestattet, diese zu lesen, erneut zu übertragen, zu verbreiten,
    > anderweitig zu verwenden oder sich durch sie veranlasst zu sehen,
    > Maßnahmen irgendeiner Art zu ergreifen. Sollten Sie diese Nachricht
    > irrtümlich erhalten haben, bitten wir Sie, sich mit dem Absender in
    > Verbindung zu setzen und das Material von Ihrem Computer zu löschen.
    >
    >
    >
    > The information transmitted is intended only for the person or
    > entity to which it is addressed and may contain confidential and/or
    > privileged material. Any review, retransmission, dissemination or
    > other use of, or taking of any action in reliance upon, this
    > information by persons or entities other than the intended
    > recipient is prohibited. If you received this in error, please
    > contact the sender and delete the material from any computer.
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Tue Sep 12 2006 - 09:36:09 EDT