blob: 79a387e80c053be989400e571389480a070f8f9a [file] [log] [blame]
/*
*
* 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.management.wsdm;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.NotificationBroadcasterSupport;
import javax.management.ObjectName;
import org.apache.qpid.management.Names;
import org.apache.qpid.management.domain.handler.impl.QpidDomainObject;
import org.apache.qpid.management.domain.handler.impl.QpidDomainObjectMBean;
import org.apache.qpid.management.jmx.EntityLifecycleNotification;
/**
* QEmu is basically an instance creator that is installed separately
* as part of QMan test cases & examples.
* Reason for that is to emulate object creation (queues, exchanges, etc...)
* without having Qpid broker connected and therefore controlling the
* total number of the instances that are created.
*
* @author Andrea Gazzarini
*/
public class QEmu extends NotificationBroadcasterSupport implements QEmuMBean, MBeanRegistration{
private MBeanServer _mxServer;
private final static String PACKAGE_NAME= "org.apache.qpid";
private final static String QUEUE = "queue";
/**
* Unregisters a Queue MBean with MBeanServer.
*
* @param objectName the name of the MBean that must unregistered.
* @throws Exception when the creation or the registration fails.
*/
public void unregister(ObjectName objectName) throws Exception
{
_mxServer.unregisterMBean(objectName);
sendNotification(
EntityLifecycleNotification.INSTANCE_REMOVED_NOTIFICATION_TYPE,
objectName);
}
/**
* Creates and registers a Queue MBean with MBeanServer.
*
* @param objectName the name of the queue MBean.
* @throws Exception when the creation or the registration fails.
*/
public void createQueue(ObjectName objectName) throws Exception
{
QpidDomainObjectMBean queue = new QpidDomainObject();
_mxServer.registerMBean(queue, objectName);
sendNotification(
EntityLifecycleNotification.INSTANCE_ADDED_NOTIFICATION_TYPE,
objectName);
}
/**
* Sends a notification about a lifecycle event of the mbean associated
* with the given object.
*
* @param type the event (notification) type.
* @param name the name of the event source.
*/
private void sendNotification(String type,ObjectName name)
{
sendNotification(
new EntityLifecycleNotification(
type,
PACKAGE_NAME,
QUEUE,
Names.CLASS,
name));
}
/**
* Not implemented for this class.
*/
public void postDeregister()
{
// N.A.
}
/**
* Not implemented for this class.
*/
public void postRegister(Boolean registrationDone)
{
// N.A.
}
/**
* Not implemented for this class.
*/
public void preDeregister()
{
// N.A.
}
/**
* MBean server callback.
* Stores the value of the owner MBeanServer.
*/
public ObjectName preRegister(MBeanServer server, ObjectName name)
{
this._mxServer = server;
return name;
}
}