Alex Blewitt wrote:
You just need to be able to read through the configuration using an Iterator, surely?

Not if you want automatic persistence. Making it a Bean is good. but whatever I agree it is a bad idea for this Container.

So how about the following

     void addComponent(Component)
     void removeComponent(Component)
     ObjectName[] getComponents()


Even worse, IMHO. A container contains components, not JMX objects/ObjectNames.

getComponents is a conveniance method. Each Component has a JMX ObjectName and a common thing that you will want to do on a Container is to find out all the ObjectNames that it contains.

> And you've still got the array, which was what I
meant in my last e-mail.

Some people like arrays, some people like Collection, others prefer iterators. I can see all sides and am happy eitherway, so long as you are consistent. However - JMX is not very Collection friendly, well many JMX agents anyway. Thus keeping to simple types where possible is best.


But we still don't have a method to iterate over all the
Components, or get them all.  So either we need something like

ListIterator getComponentIterator()

Why not just Iterator? I don't see the benefit of ListIterator.

Because: + Order and reverse order are important. You want to stop the components in the reverse order you started them. + Doing some operations like removal via the iterator can also be simpler, more efficient and less prone to simultaneous modification problems.


OR we just give up on typing and do:

   interface Container extends Component, Collection
   {
     ObjectName[] getComponents()
   }

Urg. No, I don't like that at all. A Container shouldn't implement Collection -- if it does, it breaks all manner of things (not the least of which is that you have to add a whole bunch of spurious methods to a Container implementation to get it to work.

Just running it up the flag pole. I'm not sure I agree with your distinction that a Container is not a Collection... but then I'd like it to be typed anyway, so I was not keen on the Collection idea.

public interface Container extends Component {

  public Iterator getComponents();
  public void addComponent(Component component);
  public void removeComponent(Component component);
}

Make that a ListIterator and I'm 95% happy.

Add the conveniance method for getting an array of ObjectNames
and I'm 100%

cheers




Alex.

I also propose that the Component interface has one extra method:

String getObjectName();

Why not just getName(), by the way?


Because it is a JMX ObjectName


I think this is one of the examples where because JMXAsKernel is being used, JMXIsEverywhere :-/






Reply via email to