Package org.apache.qpid.server.jmx.mbeans

Source Code of org.apache.qpid.server.jmx.mbeans.VirtualHostMBean

/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/

package org.apache.qpid.server.jmx.mbeans;

import org.apache.log4j.Logger;
import org.apache.qpid.server.jmx.AMQManagedObject;
import org.apache.qpid.server.jmx.ManagedObject;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
import org.apache.qpid.server.model.ConfigurationChangeListener;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.Connection;
import org.apache.qpid.server.model.Exchange;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.virtualhost.ManagedVirtualHost;

import javax.management.JMException;
import javax.management.ObjectName;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class VirtualHostMBean extends AMQManagedObject implements ManagedVirtualHost, ConfigurationChangeListener
{
    private static final Logger LOGGER = Logger.getLogger(VirtualHostMBean.class);

    private final VirtualHost _virtualHost;

    private final Map<ConfiguredObject, AMQManagedObject> _children =
            new HashMap<ConfiguredObject, AMQManagedObject>();
    private VirtualHostManagerMBean _managerMBean;

    public VirtualHostMBean(VirtualHost virtualHost, ManagedObjectRegistry registry) throws JMException
    {
        super(ManagedVirtualHost.class, ManagedVirtualHost.TYPE, registry);
        _virtualHost = virtualHost;
        virtualHost.addChangeListener(this);

        initQueues();
        initExchanges();
        initConnections();

        //This is the actual JMX bean for this 'VirtualHostMBean', leave it alone.
        _managerMBean = new VirtualHostManagerMBean(this);
    }

    private void initQueues() throws JMException
    {
        synchronized (_children)
        {
            for(Queue queue : _virtualHost.getQueues())
            {
                if(!_children.containsKey(queue))
                {
                    _children.put(queue, new QueueMBean(queue, this));
                }
            }
        }
    }

    private void initExchanges() throws JMException
    {
        synchronized (_children)
        {
            for(Exchange exchange : _virtualHost.getExchanges())
            {
                if(!_children.containsKey(exchange))
                {
                    _children.put(exchange, new ExchangeMBean(exchange, this));
                }
            }
        }
    }

    private void initConnections() throws JMException
    {
        synchronized (_children)
        {
            for(Connection conn : _virtualHost.getConnections())
            {
                if(!_children.containsKey(conn))
                {
                    _children.put(conn, new ConnectionMBean(conn, this));
                }
            }
        }
    }

    public String getObjectInstanceName()
    {
        return ObjectName.quote(_virtualHost.getName());
    }

    public String getName()
    {
        return _virtualHost.getName();
    }

    public void stateChanged(ConfiguredObject object, State oldState, State newState)
    {
        // ignore
    }

    public void childAdded(ConfiguredObject object, ConfiguredObject child)
    {
        synchronized (_children)
        {
            try
            {
                if(child instanceof Queue)
                {
                    QueueMBean queueMB = new QueueMBean((Queue)child, this);
                    _children.put(child, queueMB);

                }
                else if(child instanceof Exchange)
                {
                    ExchangeMBean exchangeMBean = new ExchangeMBean((Exchange)child, this);
                    _children.put(child, exchangeMBean);

                }
                else if(child instanceof Connection)
                {
                    ConnectionMBean connectionMBean = new ConnectionMBean((Connection)child, this);
                    _children.put(child, connectionMBean);

                }
                else
                {
                    LOGGER.debug("Unsupported child : " + child.getName() + " type : " + child.getClass());
                }

            }
            catch(JMException e)
            {
                LOGGER.error("Failed to add mbean for child : " + child.getName(), e);
            }
        }
    }

    public void childRemoved(ConfiguredObject object, ConfiguredObject child)
    {
        synchronized (_children)
        {
            AMQManagedObject mbean = _children.remove(child);
            if(mbean != null)
            {
                try
                {
                    mbean.unregister();
                }
                catch(JMException e)
                {
                    LOGGER.error("Failed to remove mbean for child : " + child.getName(), e);
                }
            }
        }
    }

    @Override
    public ManagedObject getParentObject()
    {
        return null;
    }

    protected VirtualHost getVirtualHost()
    {
        return _virtualHost;
    }

    public Collection<QueueMBean> getQueues()
    {
        Collection<AMQManagedObject> children;
        synchronized (_children)
        {
            children = new ArrayList<AMQManagedObject>(_children.values());
        }
        Collection<QueueMBean> queues = new ArrayList<QueueMBean>();

        for(AMQManagedObject child : children)
        {
            if(child instanceof QueueMBean)
            {
                queues.add((QueueMBean) child);
            }
        }

        return queues;
    }
}
TOP

Related Classes of org.apache.qpid.server.jmx.mbeans.VirtualHostMBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.