On 6/27/07, Vamsavardhana Reddy <[EMAIL PROTECTED]> wrote:

I see the following constructor:

    public RealMBeanServerReference(String mbeanServerId) throws
MBeanServerNotFound {
        ArrayList servers = MBeanServerFactory.findMBeanServer
(mbeanServerId);
        if ( servers.size() == 0) {
            mbeanServer = MBeanServerFactory.createMBeanServer
("geronimo");
        } else if (servers.size() > 1) {
            throw new MBeanServerNotFound(servers.size() + " MBeanServers
were found with the agent id " + mbeanServerId);
        } else {
            mbeanServer = (MBeanServer) servers.get(0);
        }
    }

I guess the intention of this code is to use a single MBeanServer for all
geronimo MBeans and the default domain for that MBeanServer be "geronimo".
MBeanServerFactory.createMBeanServer() takes domain as parameter.  Whereas
MBeanServerFactory.findMBeanServer() takes AgentId.  There is no (easy)
way to create an MBeanServer with a predefined agentId.  Does this mean
mbeanServerId parameter is redundant?  Should this code be searching for an
MBeanServer with default domain "geronimo" and creating one if there is
none?  In this case, the code should look something like...

   public RealMBeanServerReference(String mbeanServerId) throws
MBeanServerNotFound {
        ArrayList servers = MBeanServerFactory.findMBeanServer(null);
        for(int i = 0; i < servers.size(); ++i) {
            if("geronimo".equals(((MBeanServer) servers.get
(i)).getDefaultDomain()))
                mbeanServer = (MBeanServer) servers.get(i);


you may break or return from here ;)

       }
        if(mbeanServer == null) mbeanServer =
MBeanServerFactory.createMBeanServer("geronimo");
    }

I am also noticing that if I create a new JMX agent by specifiying the
system property com.sun.management.jmxremote.port, geronimo hooks up to
the MBeanServer created with default domain name "DefaultDomain" instead of
creating a new one for itself with default domain "geronimo".

Vamsi

Reply via email to