Thanks Armin,

I'll update to the latest and give it a try.

best,

Jon French
Programmer
ECOS Development Team
[EMAIL PROTECTED]
970-226-9290



Armin Waibel <[EMAIL PROTECTED]> 
08/17/2005 07:56 AM
Please respond to
"OJB Users List" <[email protected]>


To

OJB Users List <[email protected]>
cc





Subject
Re: proxy collections locking problem






Hi Jon,

 > Is this a bug or the intended behavior? I assume a work around would 
be to
 > have Child be a proxiable object and remove the Collection proxy from
 > Parent to Child, but I would rather not if I didn't have to.

Much thanks for the detailed description of your problem, this sounds 
like a bug.
I remember that a similar problem was fixed for 1.0.4. Please try (if 
possible) latest from CVS. Get OJB_1_0_RELEASE branch (should be 
stable), trunk is instable 1.x. Between 1.0.3 and now several minor 
fixes (related to odmg implementation) have been checked in.

If this doesn't solve your problem or you can't use the CVS version, 
please make a bug report in jira including the metadata mapping of your 
test case and pseudo code of your test (or the test itself if possible), 
so that it's possible to setup an test case in OJB test-suite to 
reproduce your problem.

regards,
Armin

[EMAIL PROTECTED] wrote:
> Hello OJB gurus:
> 
> I'm having a repeatable problem with ODMG Transaction locking and 
unwanted 
> database insertions when I use proxy collections. 
> 
> Here is a description of my environment:
> 
> [1] OJB 1.0.3
> 
> [2] implicitLocking=false in my OJB.properties
> 
> [3] I have an object of type Parent with a Collection of objects of type 

> Child. The Collection is via an indirection-table. Neither Parent nor 
> Child is a proxiable object (meaning that in the <class-descriptor> 
> elements for both Parent and Child, the "proxy" attribute is NOT 
> specified).
> 
> [4] The Parent collection of Child objects IS proxied via a Collection 
> proxy. This means that the "children" <collection-descriptor>'s "proxy" 
> attribute is set to true.
> 
> Here is what happens in pseudo code in run time:
> 
> [1] Opening persistent state: A given Parent object instance, parentA, 
has 
> one Child instance, ChildA, in it's Collection of children.
> 
> [2] A new ODMG Transaction is begun and parentA is retrieved from the 
> database. At this point, the Collection of Child objects (just childA) 
has 
> not yet been materialized.
> 
> [3] parentA is WRITE locked to the current transaction.
> 
> [4] A new child, childB, is created and WRITE locked to the transaction.
> 
> [5] childB is added to the Collection of parentA's children via 
> parentA.getChildren().add( childB ). I assume at this point the actual 
> Collection of children was materialized by the proxy during the call to 
> the getChildren() method.
> 
> [6] The transaction is committed and an SQLException occurs when the 
Child 
> primary key constraint is violated because OJB tries to re-insert childA 

> into the database. The Exception also occurs even if I WRITE lock childA 

> to the current transaction too before step 5. However, the exception 
does 
> NOT occur if I set the "proxy" attribute in Parent's children 
> <collection-descriptor> to false.
> 
> This leads me to believe that there is some state check when an object 
is 
> locked to a Transaction that is missing the existence of the proxied 
> collection of Children. When the proxied collection of Children is 
> materialized during the transaction, OJB incorrectly assumes that the 
> materialized childA also needs to be written to the database. 
> 
> Is this a bug or the intended behavior? I assume a work around would be 
to 
> have Child be a proxiable object and remove the Collection proxy from 
> Parent to Child, but I would rather not if I didn't have to.
> 
> Thanks for the help,
> 
> Jon French
> Programmer
> ECOS Development Team
> [EMAIL PROTECTED]
> 970-226-9290

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to