You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Guillaume Nodet <gu...@deliasystems.com> on 2004/02/11 12:21:59 UTC

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: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by Rémi Bars <rb...@softeam.fr>.
Hi 

when i try to store or retrieve array of object i get this exception (rc5)

java.lang.ClassCastException
at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeCollections(PersistenceBrokerImpl.java)


i have change the code and it seems to work but is it correct to do that :

in  PersistenceBrokerImpl i put this code (line 807) (in store collection method)
......
// MBAIRD
// if the collection is a collectionproxy and it's not already loaded
// no need to store it.
if (col instanceof CollectionProxy && !((CollectionProxy) col).isLoaded())
 {
          continue;
}
//RBA 
 if (!(col instanceof Collection))
                       col = java.util.Arrays.asList((Object[])col);
//RBA if col is not an array i ll get the same exception else it works :)
......


thank 

Remi

Re: Bug in doDelete with the markedForDelete list

Posted by Armin Waibel <ar...@apache.org>.
Thanks, I will check in this patch (but put IdentityArrayList under 
...broker.util package instead of making an inner class).

regards,
Armin

Guillaume Nodet wrote:

> Hi Armin
> 
> Here is simple class than can be included in PersistenceBrokerImpl as a
> replacement for the ArrayList. Just replacing the nowStoring and
> markedForDelete lists with this one. This seems to work fine
> 
> 	/**
> 	 * List inheriting ArrayList, modified for checking objects on
> 	 * object equality with '==' instead of 'equals'
> 	 */
> 	private static class IdentityArrayList extends ArrayList
> 	{
> 		public boolean contains(Object elem)
> 		{
> 			return indexOf(elem) >= 0;
> 		}
> 		public int indexOf(Object elem)
> 		{
> 			for (int i = 0; i < size(); i++)
> 				if (elem == get(i))
> 					return i;
> 			return -1;
> 		}
> 		public int lastIndexOf(Object elem)
> 		{
> 			for (int i = size()-1; i >= 0; i--)
> 				if (elem == get(i))
> 					return i;
> 			return -1;
> 		}
> 	}
> 
> 
> Regards,
> Guillaume
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


RE: Bug in doDelete with the markedForDelete list

Posted by Guillaume Nodet <gu...@deliasystems.com>.
Hi Armin

Here is simple class than can be included in PersistenceBrokerImpl as a
replacement for the ArrayList. Just replacing the nowStoring and
markedForDelete lists with this one. This seems to work fine

	/**
	 * List inheriting ArrayList, modified for checking objects on
	 * object equality with '==' instead of 'equals'
	 */
	private static class IdentityArrayList extends ArrayList
	{
		public boolean contains(Object elem)
		{
			return indexOf(elem) >= 0;
		}
		public int indexOf(Object elem)
		{
			for (int i = 0; i < size(); i++)
				if (elem == get(i))
					return i;
			return -1;
		}
		public int lastIndexOf(Object elem)
		{
			for (int i = size()-1; i >= 0; i--)
				if (elem == get(i))
					return i;
			return -1;
		}
	}


Regards,
Guillaume




---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by "Larry V. Streepy, Jr." <st...@healthlanguage.com>.
Ahh, so the right thing to do would be to compare the Identity of each 
object in the list, and not rely on the equals() method.

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:arminw@apache.org]
>>>> 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:guillaume.nodet@deliasystems.com]
>>>>> 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: ojb-user-unsubscribe@db.apache.org
>>>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>>
>>>>
>>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>

-- 
Larry V. Streepy, Jr.
Senior Vice President and CTO
Health Langauge, Inc.

Re: Bug in doDelete with the markedForDelete list

Posted by Armin Waibel <ar...@apache.org>.
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:arminw@apache.org]
>>> 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:guillaume.nodet@deliasystems.com]
>>>> 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: ojb-user-unsubscribe@db.apache.org
>>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by Gus Heck <gu...@olin.edu>.
Gus Heck wrote:

> Armin Waibel wrote:
>
>> Hi again,
>>
>> Guillaume Nodet wrote:
>>
>>> Maybe using the Identity object's 'equals' method should solve the 
>>> problem.
>>>
>>
>> hmm, Identity should be ok, but it's much more costly than using 
>> object identity in this case.
>>
>>> I don't think the point here is on business objects equality. The 
>>> point is
>>> to know if the object ojb is storing or deleting has already been 
>>> processed
>>> or not for a given object graph. This can only be the case if the 
>>> primary
>>> keys of the objects are the same (wether they are stored in the 
>>> objects or
>>> anonymous).
>>>
>>> There could be cases where two objects have the same primary keys, 
>>> but are
>>> not the same object (in the sense of '=='). In theses case, and you are
>>> right about that, this would lead to problems.
>>
>>
>>
>> What are the problems? If we delete the same object twice or more 
>> (same PK, but different instances), nothing should happend.
>> When we store different instances with same PK, first time an insert 
>> will happend, all further instances cause an update.
>> Do I overlook a fault?
>>
> Well, the latter sounds like the order of storage matters if there are 
> any differences.... But maybe this is a user problem not OJB's 
> problem... The  becomes, can ordering issues arise within OJB that the 
> user can't control?

Sorry misedit: s/The becomes,/The question becomes,/


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by Gus Heck <gu...@olin.edu>.
Armin Waibel wrote:

> Hi again,
>
> Guillaume Nodet wrote:
>
>> Maybe using the Identity object's 'equals' method should solve the 
>> problem.
>>
>
> hmm, Identity should be ok, but it's much more costly than using 
> object identity in this case.
>
>> I don't think the point here is on business objects equality. The 
>> point is
>> to know if the object ojb is storing or deleting has already been 
>> processed
>> or not for a given object graph. This can only be the case if the 
>> primary
>> keys of the objects are the same (wether they are stored in the 
>> objects or
>> anonymous).
>>
>> There could be cases where two objects have the same primary keys, 
>> but are
>> not the same object (in the sense of '=='). In theses case, and you are
>> right about that, this would lead to problems.
>
>
> What are the problems? If we delete the same object twice or more 
> (same PK, but different instances), nothing should happend.
> When we store different instances with same PK, first time an insert 
> will happend, all further instances cause an update.
> Do I overlook a fault?
>
Well, the latter sounds like the order of storage matters if there are 
any differences.... But maybe this is a user problem not OJB's 
problem... The  becomes, can ordering issues arise within OJB that the 
user can't control?






---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


RE: Bug in doDelete with the markedForDelete list

Posted by Guillaume Nodet <gu...@deliasystems.com>.
Hi,

> 
> What are the problems? If we delete the same object twice or more (same 
> PK, but different instances), nothing should happend.
> When we store different instances with same PK, first time an insert 
> will happend, all further instances cause an update.
> Do I overlook a fault?
> 

I think you are right on this point.

Guillaume


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by Armin Waibel <ar...@apache.org>.
Hi again,

Guillaume Nodet wrote:

> Maybe using the Identity object's 'equals' method should solve the problem.
> 

hmm, Identity should be ok, but it's much more costly than using object 
identity in this case.

> I don't think the point here is on business objects equality. The point is
> to know if the object ojb is storing or deleting has already been processed
> or not for a given object graph. This can only be the case if the primary
> keys of the objects are the same (wether they are stored in the objects or
> anonymous).
> 
> There could be cases where two objects have the same primary keys, but are
> not the same object (in the sense of '=='). In theses case, and you are
> right about that, this would lead to problems.

What are the problems? If we delete the same object twice or more (same 
PK, but different instances), nothing should happend.
When we store different instances with same PK, first time an insert 
will happend, all further instances cause an update.
Do I overlook a fault?

regards,
Armin

> But using their associated
> Identity objects should be right.
> 
> Guillaume
> 
> 
> -----Message d'origine-----
> De : Larry V. Streepy, Jr. [mailto:streepy@healthlanguage.com]
> Envoyé : jeudi 12 février 2004 16:35
> À : OJB Users List
> Objet : Re: Bug in doDelete with the markedForDelete list
> 
> 
> 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?
> 
> 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:arminw@apache.org]
>>>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:guillaume.nodet@deliasystems.com]
>>>>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: ojb-user-unsubscribe@db.apache.org
>>>>For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
> 
> --
> Larry V. Streepy, Jr.
> Senior Vice President and CTO
> Health Language, Inc.
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


RE: Bug in doDelete with the markedForDelete list

Posted by Guillaume Nodet <gu...@deliasystems.com>.
Maybe using the Identity object's 'equals' method should solve the problem.

I don't think the point here is on business objects equality. The point is
to know if the object ojb is storing or deleting has already been processed
or not for a given object graph. This can only be the case if the primary
keys of the objects are the same (wether they are stored in the objects or
anonymous).

There could be cases where two objects have the same primary keys, but are
not the same object (in the sense of '=='). In theses case, and you are
right about that, this would lead to problems. But using their associated
Identity objects should be right.

Guillaume


-----Message d'origine-----
De : Larry V. Streepy, Jr. [mailto:streepy@healthlanguage.com]
Envoyé : jeudi 12 février 2004 16:35
À : OJB Users List
Objet : Re: Bug in doDelete with the markedForDelete list


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?

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:arminw@apache.org]
>> 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:guillaume.nodet@deliasystems.com]
>>> 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: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>

--
Larry V. Streepy, Jr.
Senior Vice President and CTO
Health Language, Inc.



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by "Larry V. Streepy, Jr." <st...@healthlanguage.com>.
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?

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:arminw@apache.org]
>> 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:guillaume.nodet@deliasystems.com]
>>> 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: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>

-- 
Larry V. Streepy, Jr.
Senior Vice President and CTO
Health Language, Inc.

Re: Bug in doDelete with the markedForDelete list

Posted by Armin Waibel <ar...@apache.org>.
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:arminw@apache.org]
> 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:guillaume.nodet@deliasystems.com]
>>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: ojb-user-unsubscribe@db.apache.org
>>For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


RE: Bug in doDelete with the markedForDelete list

Posted by Guillaume Nodet <gu...@deliasystems.com>.
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.

Guillaume

-----Message d'origine-----
De : Armin Waibel [mailto:arminw@apache.org]
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:guillaume.nodet@deliasystems.com]
> 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: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Bug in doDelete with the markedForDelete list

Posted by Armin Waibel <ar...@apache.org>.
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:guillaume.nodet@deliasystems.com]
> 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: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


RE: Bug in doDelete with the markedForDelete list

Posted by Guillaume Nodet <gu...@deliasystems.com>.
Another way could be to use a specific Map that test an object equality with
a '==' instead of a 'equals'.
Guillaume

-----Message d'origine-----
De : Guillaume Nodet [mailto:guillaume.nodet@deliasystems.com]
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: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org