Re: IllegalStateException in DataRowStore (thrown by LRUMap)
What I've just realized is that the DataContext is obtained like this : import org.objectstyle.cayenne.conf.ServletUtil. ... ServletUtil.getSessionContext(request.getSession()); In the user guide the following two methods are descriped: BasicServletConfiguration.getDefaultContext(session); DataContext.getThreadDataContext(); Could that cause any problems ? Lothar -Ursprüngliche Nachricht- Von: cayenne-user@incubator.apache.org Gesendet: 19.06.06 11:03:45 An: cayenne-user@incubator.apache.org Betreff: Re: IllegalStateException in DataRowStore (thrown by LRUMap) I did some research of CAY-565 over the weekend. Unfortunately I can't reproduce the issue. I wrote a test case that randomly performs one of the operations - select; insert of an object with relationship; object update; object delete with relationship. Running up to 30 parallel request threads with JMeter, I don't see any exceptions except for occasional fault failures (that are expected under these test conditions as I don't lock the objects). I even found and fixed an unrelated deadlock that I am sure nobody has ever seen in the wild (CAY-573)... still can't reproduce the LRUMap problem. I'll try to change the test conditions, but if Bryan or Lothar (two people who have experienced the issue) have any more insights on the ways to reproduce it, please share. Andrus On Jun 16, 2006, at 1:27 PM, Andrus Adamchik wrote: On Jun 16, 2006, at 1:12 PM, Lothar Krenzien wrote: I did it yesterday and now I'm getting the already known NPE again. And I'm sure that I didn't changed the cayenne version. But what I saw is that in the case of NPE always the same method of me is called. Very very strange... so this would confirm a suspicion that there is a bug in the LRUMap not related to synchronization. Another question : I have a class which is extended from 'WebApplicationListener'. In the method 'sessionDestroyed' the following code is executed : ObjectStore objectStore = dctx.getObjectStore(); objectStore.objectsInvalidated(objectStore.getObjects()); It that really neccessary ? It may or may not be useful. On the one hand, the ObjectStore is about to go out of scope at this point, so it (and all its objects) will be garbage collected without any extra help. One other thing that invalidate does is throwing away cached snapshots from the cache shared by other sessions. On the positive side it frees up some memory, on the negative - it removes items from cache that could've otherwise speed up object resolution in other sessions. I'd say keep it if your sessions share just a few objects between each other or share no objects at all; throw it away if the object sets significantly overlap between individual sessions. Andrus _ Der WEB.DE SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen! http://smartsurfer.web.de/?mc=100071distributionid=0071
Re: IllegalStateException in DataRowStore (thrown by LRUMap)
Sorry I can't be of more help. The exception happened to us only once. I rechecked the log but I don't see anything unusual... the number of users was high but not abnormal (56 users is high-ish for us). It happened on a normal SelectQuery with a single matchExp, an ordering and a fetchLimit, fetching from a simple flat entity -- eight attributes with no relationships. I suspect it's some intermittent timing/race thing. Maybe let your JMeter test run for a week? Andrus Adamchik wrote: I did some research of CAY-565 over the weekend. Unfortunately I can't reproduce the issue. I wrote a test case that randomly performs one of the operations - select; insert of an object with relationship; object update; object delete with relationship. Running up to 30 parallel request threads with JMeter, I don't see any exceptions except for occasional fault failures (that are expected under these test conditions as I don't lock the objects). I even found and fixed an unrelated deadlock that I am sure nobody has ever seen in the wild (CAY-573)... still can't reproduce the LRUMap problem. I'll try to change the test conditions, but if Bryan or Lothar (two people who have experienced the issue) have any more insights on the ways to reproduce it, please share. Andrus On Jun 16, 2006, at 1:27 PM, Andrus Adamchik wrote: On Jun 16, 2006, at 1:12 PM, Lothar Krenzien wrote: I did it yesterday and now I'm getting the already known NPE again. And I'm sure that I didn't changed the cayenne version. But what I saw is that in the case of NPE always the same method of me is called. Very very strange... so this would confirm a suspicion that there is a bug in the LRUMap not related to synchronization. Another question : I have a class which is extended from 'WebApplicationListener'. In the method 'sessionDestroyed' the following code is executed : ObjectStore objectStore = dctx.getObjectStore(); objectStore.objectsInvalidated(objectStore.getObjects()); It that really neccessary ? It may or may not be useful. On the one hand, the ObjectStore is about to go out of scope at this point, so it (and all its objects) will be garbage collected without any extra help. One other thing that invalidate does is throwing away cached snapshots from the cache shared by other sessions. On the positive side it frees up some memory, on the negative - it removes items from cache that could've otherwise speed up object resolution in other sessions. I'd say keep it if your sessions share just a few objects between each other or share no objects at all; throw it away if the object sets significantly overlap between individual sessions. Andrus
Re: IllegalStateException in DataRowStore (thrown by LRUMap)
While I don't have the answers, it would be helpful if you could provide more details: 1. What version of commons-collections do you have (I checked 3.1 and the line numbers do not match with the stack below) 2. Does it happen as a result of a certain sequence of events, or does it happen randomly under heavy load? Andrus On Jun 14, 2006, at 8:21 PM, Lothar Krenzien wrote: Hi, I'm not sure where to post it, but because I get this error by cayenne I try it first here. A few days ago I reported a NPE within the class apache.commons.map.LRUMap wich is used by the class DataRowStore. After synchronizing all access to the corresponding field the NPE went away but now I have another exception: 2006-06-14 00:26:22,359 [ERROR] BaseDataLoggerGate.com.sunreader.sr2.gate.BaseDataLoggerGate.doPost: java.lang.IllegalStateException: Entry.next=null, data[removeIndex] =ObjectId:TblStatusstatus=ins[EMAIL PROTECTED] e[values={description=inserted, status=ins}, version=-9223372036854491432, replaces=-9223372036854775808] previous=ObjectId:TblEffBlockDataeffBlockDataId=24455598=org.objects [EMAIL PROTECTED], efficiencyValue=1.0761, effBlockDataId=24455598, energyValue=8.16, efficiencyBlockId=767, status=ins, irradiationValue=673.98, earnings=4.4064, importEffBlockDataId=1042169, dataDate=Mon Jun 12 11:30:00 CEST 2006, co2Saving=6.12}, version=-9223372036854494908, replaces=-9223372036854495032] key=ObjectId:TblLoggerloggerId=923 [EMAIL PROTECTED], newSerialNumber=null, commChannelType=analog, loggerProductId=1, loggerId=923, serialNumber=DL-NE101-01331, commChannelManufacturer=Conergy}, version=-9223372036854491407, replaces=-9223372036854775808] size=1 maxSize=1 Please check that your keys are immutable, and that you have used synchronization properly. If so, then please report this to commons- [EMAIL PROTECTED] 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:621) at org.objectstyle.cayenne.access.DataRowStore.processSnapshotChanges (DataRowStore.java:575) at org.objectstyle.cayenne.access.DataRowStore.snapshotsUpdatedForObjects (DataRowStore.java:314) 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:375) at org.objectstyle.cayenne.access.DataDomainQueryAction.execute (DataDomainQueryAction.java:151) at org.objectstyle.cayenne.access.DataDomain.onQuery (DataDomain.java:765) 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) at com.conergy.sunreader.sr2.back.dao.ProductDAO.isLoggerAlreadyAvailable (Unknown Source) I't would be glad to get an answer as far as possible. Thanks, Lothar __ XXL-Speicher, PC-Virenschutz, Spartarife mehr: Nur im WEB.DE Club! Jetzt gratis testen! http://freemail.web.de/home/landingpad/?mc=021130