cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hugo Burm" <hu...@xs4all.nl>
Subject RE: "Remove" problems with the Woody sample
Date Tue, 09 Sep 2003 17:29:15 GMT


> -----Original Message-----
> From: Bruno Dumon [mailto:bruno@outerthought.org]
> Sent: Tuesday, September 09, 2003 11:05 AM
> To: dev@cocoon.apache.org
> Subject: Re: "Remove" problems with the Woody sample
>
>
> On Sat, 2003-09-06 at 13:39, Hugo Burm wrote:
> > This is about the "Bean Binding" sample on the Woody samples
> page, and the
> > "Remove" option of the Contacts on this page.
> > (Cocoon version: 2.1.2, one day after the release of 2.1.1)
> >
> > 1)
> > If I have more than one Contact (e.g. by adding the lines
> >     contact = new Packages.org.apache.cocoon.woody.samples.Contact();
> >     contact.setId("2");
> >     contact.setFirstName("Hugo");
> >     bean.addContact(contact);
> > to the "form2bean" function in "binding_example.js"),
> > I cannot delete more than one at a time. When I check two
> Contacts, Click on
> > "Remove selected contacts", then only one of them is removed.
>
> You mean that only one is removed _after performing the binding_, right?
> They are both removed from the repeater-widget, but there's something
> wrong in the repeater binding indeed. It doesn't work for binding to XML
> documents either.

Yes, that is wat I meant. After pressing "Submit Query", one of the two
contacts that was just removed by the repeater, re-appears. Sorry for not
explaining that clearly.

>
> This seems to be caused by the classical problem when removing items
> from a list while running through it.
>
> I've tried to solve this by first storing the JXPathContexts of the
> items to delete in a seperate list, and then running backwards through
> that list, and it seems to work all right. Will commit this soon.
>
> Thanks for reporting this problem!
>

Thanks for repairing it.

> >
> > 2)
> > The Contacts are not removed from the ArrayList. By the Remove
> option, all
> > relevant keys of the Contact are set to null, so you will never
> see it again
> > in this context.  But the item is not removed from the list. This is a
> > problem if you have a persistence framework flushing the list
> to hard disk
> > (zombie records in your database).
> >
>
> Not sure that I follow here: I suppose that if I don't see the item
> anymore on jx-generated page, it really isn't in the arraylist anymore?
>

Because this occured both for the standaard Woody repeater and for my own
map-repeater which uses Maps instead of ArrayLists, I concluded it was a
Woody problem. But now I did some additionally checks, it looks like it is a
Hibernate problem. Hibernate is doing runtime reflection: it replaces the
instances of the classes like Maps, Lists, Sets with its own instances in
order to do its O/R mapping. May be there is a problem with JXPath. I have
to post this to some other list.


> >
> > I checked the Woody source. I guess it must be the JXPath
> removePath() in
> > DeleteNodeJXPathBinding.java.
> > What is this removePath() supposed to do?
>
> Remove the addressed path. If it addresses an item in a collection, it
> means removing the item from the collection.

That was what I was wondering about: does it actually remove it from the
Collection, or does it just set all keys to null, like it is doing in my
environment. But now I have some obvious suspects for the latter behaviour
(the combination of Hibernate annd JXPath)

>
> --
> Bruno Dumon                             http://outerthought.org/
> Outerthought - Open Source, Java & XML Competence Support Center
> bruno@outerthought.org                          bruno@apache.org
>
>


Hugo Burm


Mime
View raw message