[ 
https://issues.apache.org/jira/browse/CAY-1868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13856556#comment-13856556
 ] 

Andrus Adamchik edited comment on CAY-1868 at 12/25/13 11:07 AM:
-----------------------------------------------------------------

[~olegart] Hi Oleg, we discussed 2 patches  - one for 3.1 that does not involve 
changes to recalculation of the values and simply provides "synchronize on 
change" approach to the relationship, and one for 3.2 that gets rid of the need 
to recalculate the values, making this modeler responsibility. The patch seems 
to be somewhere in between. Maybe we can organize the fix along the release 
lines above?


was (Author: andrus):
[~olegart] We discussed 2 patches  - one for 3.1 that does not involve changes 
to recalculation of the values and simply provides "synchronize on change" 
approach to the relationship, and one for 3.2 that gets rid of the need to 
recalculate the values, making this modeler responsibility. The patch seems to 
be the mix of the 2 and still keeps synchronization around. 

> Select contention with multiple contexts 
> -----------------------------------------
>
>                 Key: CAY-1868
>                 URL: https://issues.apache.org/jira/browse/CAY-1868
>             Project: Cayenne
>          Issue Type: Bug
>    Affects Versions: 3.1B2, 3.2M1
>            Reporter: Andrus Adamchik
>            Assignee: Andrus Adamchik
>             Fix For: 3.1B3, 3.2.M2
>
>         Attachments: cay1868.patch
>
>
> I am mostly using local cache and a single app-scoped ObjectContext for 
> selects. So I was oblivious to this issue. Today I tried shared cache and a 
> pool of app-scoped ObjectContexts randomly assigned to requests. I quickly 
> hit a contention point:
>  
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at 
> org.apache.cayenne.map.ObjRelationship.refreshFromDeferredPath(ObjRelationship.java:572)
>         - waiting to lock <0x424bf840> (a 
> org.apache.cayenne.map.ObjRelationship)
>         at 
> org.apache.cayenne.map.ObjRelationship.isToMany(ObjRelationship.java:431)
>         at 
> org.apache.cayenne.map.ObjRelationship.isOptional(ObjRelationship.java:310)
>         at 
> org.apache.cayenne.map.ObjRelationship.isSourceDefiningTargetPrecenseAndType(ObjRelationship.java:346)
>         at 
> org.apache.cayenne.access.DataDomainQueryAction.interceptRelationshipQuery(DataDomainQueryAction.java:239)
> ObjRelationship recalculating its 'toMany' value on every call is evil by 
> itself. Doing parts of it in a synchronized block is completely unacceptable. 
>  



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to