Thanks for clarifying. Larry.
Armin Waibel wrote:
Hi Larry,
Larry V. Streepy, Jr. wrote:
As I think about this thread, I'm beginning to wonder about the consequences of the changes being proposed. The essence of the problem revolves around the equality of business objects. The problem was that the equals() method returns true, even when they have different primary keys. This means that you truly have two different real objects, but for business reasons you want them to compare equals. So, from a business perspective, they are the same object, but you want multiple, distinct persisted forms.
So, are we now saying that object identity (using "==") is the mechanism that OJB will use in all cases, as opposed to object equality (using equals())? If so, is this what was originally intended in the OJB code? Further, is anyone relying on the current behavior?
Official and internal OJB use ...broker.Identity objects as object entity (e.g. ObjectCache or Locking in odmg). Identiy based on the PK values and the TopLevel class of the object.
The problem found by Guillaume is a particular one. To avoid e.g. infinite loops (a object in collection has back reference to main object), we held a list of all stored/deleted objects (main object + references) when a store/delete call was done.
regards, Armin
Although it might make the code more complex, this might need to be a behavior that is configurable. Meaning that you would have to abstract the object equality comparisons and let them be controlled by specific implementations as needed by the business environment.
Just wanted to raise the questions because the change you are discussing is subtle, yet potentially very large in scope.
Thanks. Larry.
Armin Waibel wrote:
Hi,
Guillaume Nodet wrote:
Armin,
I dit not see any identity based List. There are Maps (in the
jarakarta-commons-collections for exemple) and a Set could be easily build
on top of this map.
Maybe just inlining the contains function directly in the doDelete function,
walking through the array should do the work.
Thanks, I will do this, but encapsulate it in a new class, because I assume that we need such an function on store method too (nowStoring List).
regards, Armin
Guillaume
-----Message d'origine----- De : Armin Waibel [mailto:[EMAIL PROTECTED] Envoy� : mercredi 11 f�vrier 2004 19:14 � : OJB Users List Objet : Re: Bug in doDelete with the markedForDelete list
Hi Guillaume,
Guillaume Nodet wrote:
Another way could be to use a specific Map that test an object equality
with
a '==' instead of a 'equals'.
agree, seems to be the smartest way to get around your problem. Do you know an object identity based ArrayList/List implementation?
regards, Armin
Guillaume
-----Message d'origine----- De : Guillaume Nodet [mailto:[EMAIL PROTECTED] Envoy� : mercredi 11 f�vrier 2004 12:22 � : OJB Objet : Bug in doDelete with the markedForDelete list
Hi Armin !
I've found a problem using objects instead of Identity in the markedForDelete list of PersistenceBrokerImpl class. Here is my problem:
I want to delete an object A that contains a collection of B objects. When i put 2 B objects that are equals in my collection, and trying to delete the A objects, the markedForDelete.contains(obj)
statement
returns true when trying to delete the second B object. They are trully equals, but have different primary keys...
Could this list use Identity instead of objects ?
Regards, Guillaume
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Larry V. Streepy, Jr. Senior Vice President and CTO Health Langauge, Inc.
