commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stephen Colebourne" <scolebou...@btopenworld.com>
Subject Re: [collections] NotifyingCollections - the wrapping problem
Date Fri, 15 Aug 2003 23:19:27 GMT
From: "Chuck Daniels" <cjd4@yahoo.com>
> >   sc.add("");
> > Sends event OK - BUT eventCollection == oc.
> > This is a problem, as if the listener then uses the collection,
> > it will not
> > be synchronized. Big problem.
>
> I don't think this will actually be a problem.  If calls to sc are
> synchronized, then anything that the listener does to the backing
collection
> (oc in this case) is still within the context of the synchronized call on
> sc.  Therefore, access to the backing collection is indirectly
synchronized.
> Or am I missing something here?

Intruiging. Yes, you are probably correct, so long as the listener operates
in the same thread in a normal fashion. I was thinking of trying to spot if
the ObservedCollection was being decorated and inform it, but maybe thats
over zealous, and javadoc will do.

Stephen





> > ----- Original Message -----
> > From: "Michael Heuer" <heuermh@acm.org>
> > To: "Jakarta Commons Developers List" <commons-dev@jakarta.apache.org>
> > Cc: <neilotoole@users.sourceforge.net>
> > Sent: Thursday, August 14, 2003 11:02 PM
> > Subject: Re: [collections] NotifyingCollections - capturing rich
> > non-uniform
> > data
> >
> >
> > >
> > > On Thu, 14 Aug 2003, Stephen Colebourne wrote:
> > >
> > > > <snip>
> > > >
> > > > The biggest problem with all this is that the collection returned by
> > > > getSource() on the event. If the observed collection is
> > wrapped (eg. by
> > a
> > > > SyncronizedCollection) then getSource() SHOULD return the wrapped
> > > > collection, but it can't as it doesn't know about it. This problem
> > applies
> > > > to all designs so far.
> > >
> > > Is this also a problem?  It's general to all of the delegation
> > > implementations.
> > >
> > >
> > >  private boolean heardChange = false;
> > >
> > >  public void testChangeToBackingCollection()
> > >  {
> > >   Collection c = new ArrayList();
> > >   ObservableCollection oc = CollectionUtils.observableCollection(c);
> > >   oc.addListener(new CollectionListener()
> > >    {
> > >     public void changed(CollectionEvent e) { heardChange = true; }
> > >    });
> > >
> > >   c.add("hello");
> > >
> > >   assertTrue("heardChange == true", heardChange == true);
> > >  }
> > >
> > >
> > > I don't think it's possible to make this test pass -- just a
> > > shortcoming of the wrapper design.  That's why I was looking into
> > > aspect-based implementations.
> > >
> > >    michael
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: commons-dev-help@jakarta.apache.org
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: commons-dev-help@jakarta.apache.org
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>


Mime
View raw message