Re: IllegalStateException in DataRowStore (thrown by LRUMap)

2006-06-19 Thread Lothar Krenzien
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)

2006-06-19 Thread Bryan Lewis
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)

2006-06-14 Thread Andrus Adamchik
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