I'm not sure if this will solve the problem with removal aware list implementation, because removal aware list only recognise loaded objects. If clear was called on the proxy and data was not loaded the objects will not be passed to the removal aware list.
So load data may be mandatory on clear call?
regards, Armin
Jakob Braeuchi wrote:
hi edson, armin,
i checked it in.
jakob
Jakob Braeuchi wrote:
hi edson, armin,
imo the correct fix is as follows:
..
// ECER: assure it will notify all being removed, necessary for RemovalAware classes...
if (isLoaded())
{
getData().clear();
}
..
otherwise the clear will fire a load.
jakob
Edson Carlos Ericksson Richter wrote:
Sorry, I don't wanna be boring...
Armin Waibel wrote:
Hi Edson,
I'm not familiar with the proxy stuff, so be patience...
[EMAIL PROTECTED] wrote:
Is this already in CVS? This fix is correct?
Thanks,
Edson Richter
After some research, I've found an implementation that works:
public void clear() { Collection coll;
if(getData()instanceof ManageableCollection) {
getData() will materialize the whole collection on each clear call. Is this the expected behaviour or should we check loading status before perfrom your changes?
regards, Armin
getData().clear(); // ECER: assure it will notify all being removed, necessary for RemovalAware classes... } else { // BRJ: use an empty collection so isLoaded will return true try { coll = (Collection) getCollectionClass().newInstance(); } catch (Exception e) { coll = new ArrayList(); } setData(coll); _size = 0; } }
Could someone cofirm/fix this in CVS?
Thanks,
Edson Richter
Edson Carlos Ericksson Richter wrote:
I think I and a co-worker (Igor) found a little bug in collection proxy. When using RemovalAware... as class for a collection descriptor, calling clear() in the collection don't register the objects for deletion. The answer is the clear implementation in CollectionProxyDefaultImpl:
public void clear() { Collection coll;
// BRJ: use an empty collection so isLoaded will return true try { coll = (Collection) getCollectionClass().newInstance(); } catch (Exception e) { coll = new ArrayList(); } setData(coll); _size = 0;
}
I think the right method should be:
public void clear() { Collection coll; getData().clear(); // ECER: assure it will notify all being removed, necessary for RemovalAware classes...
// BRJ: use an empty collection so isLoaded will return true try { coll = (Collection) getCollectionClass().newInstance(); } catch (Exception e) { coll = new ArrayList(); } setData(coll); _size = 0;
}
Could you analize and report if this is right?
Thanks,
Edson Richter
---------------------------------------------------------------------
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]
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
--------------------------------------------------------------------- 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]
