summaryrefslogtreecommitdiff
path: root/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/QpidClass.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/QpidClass.java')
-rw-r--r--qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/QpidClass.java833
1 files changed, 0 insertions, 833 deletions
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/QpidClass.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/QpidClass.java
deleted file mode 100644
index 667e600668..0000000000
--- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/QpidClass.java
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- *
- * 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.domain.model;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.Map.Entry;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.AttributeNotFoundException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanOperationInfo;
-import javax.management.MBeanRegistration;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.ReflectionException;
-import javax.management.RuntimeOperationsException;
-
-import org.apache.qpid.management.Messages;
-import org.apache.qpid.management.Names;
-import org.apache.qpid.management.domain.handler.impl.IMethodInvocationListener;
-import org.apache.qpid.management.domain.handler.impl.InvocationResult;
-import org.apache.qpid.management.domain.handler.impl.MethodOrEventDataTransferObject;
-import org.apache.qpid.management.domain.model.type.Binary;
-import org.apache.qpid.management.domain.services.SequenceNumberGenerator;
-import org.apache.qpid.management.jmx.EntityLifecycleNotification;
-import org.apache.qpid.management.jmx.OperationHasBeenInvokedNotification;
-import org.apache.qpid.transport.codec.BBDecoder;
-import org.apache.qpid.transport.util.Logger;
-
-/**
- * Qpid Class definition.
- * A type definition for a manageable object.
- * This class is also responsible to manage incoming obejct instance data (configuration & instrumentation).
- * How can we handle data before schema is injected into this class? simply we must retain that data in raw format.
- * This class has 3 states :
- * 1) first state is when schema is not yet injected. In this case the incoming object data is retained as is (in raw format)
- * and a schema request is sent;
- * 2) second state is when schema has been requested but not yet injected. The incoming object data is still retained as is
- * (in raw format)
- * 3) third state is when schema is injected. Each injection of data will result in an update / create / delete of
- * the corresponding object instance. In addition, the first time the state change, the old retained raw data is cnverted in
- * object instance(s).
- */
-class QpidClass extends QpidEntity implements QpidClassMBean
-{
- /**
- * State interface for this class definition.
- * Each state is responsible to handle the injection of the data and / or schema.
- *
- * @author Andrea Gazzarini
- */
- interface State
- {
- /**
- * Adds configuration data for the object instance associated to the given object identifier.
- *
- * @param objectId the object identifier.
- * @param rawData the raw configuration data.
- */
- void addInstrumentationData (Binary objectId, byte[] rawData);
-
- /**
- * Adds instrumentation data for the object instance associated to the given object identifier.
- *
- * @param objectId the object identifier.
- * @param rawData the raw instrumentation data.
- */
- void addConfigurationData (Binary objectId, byte[] rawData);
-
- /**
- * Inject the schema into this class definition.
- *
- * @param propertyDefinitions
- * @param statisticDefinitions
- * @param methodDefinitions
- * @throws UnableToBuildFeatureException when it's not possibile to parse schema and build the class definition.
- */
- public void setSchema (
- List<Map<String, Object>> propertyDefinitions,
- List<Map<String, Object>> statisticDefinitions,
- List<MethodOrEventDataTransferObject> methodDefinitions) throws UnableToBuildFeatureException;
- };
-
- /**
- * This is the initial state of every qpid class.
- * The class definition instance is created but its schema has not been injected.
- * Incoming configuration & instrumentation data will be stored in raw format because we don't know how to
- * parse it until the schema arrives.
- * In addition, this state is responsible (when data arrives) to request its schema.
- */
- final State _schemaNotRequested = new State() {
-
- /**
- * Stores the incoming data in raw format and request the schema for this class.
- * After that a transition to the next state is made.
- *
- * @param objectId the object instance identifier.
- * @param rawData incoming configuration data.
- */
- public synchronized void addConfigurationData (Binary objectId, byte[] rawData)
- {
- try
- {
- requestSchema();
- _state = _schemaRequestedButNotYetInjected;
- } catch (Exception exception)
- {
- _logger.error(
- exception,
- Messages.QMAN_100015_UNABLE_TO_SEND_SCHEMA_REQUEST,
- _parent.getName(),
- _name);
- } finally {
- QManManagedObject instance = getObjectInstance(objectId,false);
- instance._rawConfigurationData.add(rawData);
- }
- }
-
- /**
- * Stores the incoming data in raw format and request the schema for this class.
- * After that a transition to the next state is made.
- *
- * @param objectId the object instance identifier.
- * @param rawData incoming instrumentation data.
- */
- public synchronized void addInstrumentationData (Binary objectId, byte[] rawData)
- {
- try
- {
- requestSchema();
- _state = _schemaRequestedButNotYetInjected;
- } catch (Exception e)
- {
- _logger.error(
- Messages.QMAN_100015_UNABLE_TO_SEND_SCHEMA_REQUEST,
- _parent.getName(),
- _name);
- } finally {
- QManManagedObject instance = getObjectInstance(objectId,false);
- instance._rawConfigurationData.add(rawData);
- }
- }
-
- /**
- * This method only throws an illegal state exception because when a schema arrives
- * this state is no longer valid.
- */
- public void setSchema (
- List<Map<String, Object>> propertyDefinitions,
- List<Map<String, Object>> statisticDefinitions,
- List<MethodOrEventDataTransferObject> methodDefinitions) throws UnableToBuildFeatureException
- {
- throw new IllegalStateException("When a schema arrives it's not possible for this class to be in this state.");
- }
- };
-
- /**
- * This is the first state of this class definition : the schema is not yet injected so each injection of object data will be
- * retained in raw format.
- */
- final State _schemaRequestedButNotYetInjected = new State()
- {
- /**
- * Stores the incoming data in raw format.
- *
- * @param objectId the object instance identifier.
- * @param rawData incoming configuration data.
- */
- public void addConfigurationData (Binary objectId, byte[] rawData)
- {
- QManManagedObject instance = getObjectInstance(objectId,false);
- instance._rawConfigurationData.add(rawData);
- }
-
- /**
- * Stores the incoming data in raw format.
- *
- * @param objectId the object instance identifier.
- * @param rawData incoming instrumentation data.
- */
- public void addInstrumentationData (Binary objectId, byte[] rawData)
- {
- QManManagedObject instance = getObjectInstance(objectId,false);
- instance._rawInstrumentationData.add(rawData);
- }
-
- /**
- * When a schema is injected into this defintiion the following should happen :
- * 1) the incoming schema is parsed and the class definition is built;
- * 2) the retained raw data is converted into object instance(s)
- * 3) the internal state of this class changes;
- *
- * If someting is wrong during that process the schema is not built and the state don't change.
- */
- public synchronized void setSchema (
- List<Map<String, Object>> propertyDefinitions,
- List<Map<String, Object>> statisticDefinitions,
- List<MethodOrEventDataTransferObject> methodDefinitions) throws UnableToBuildFeatureException
- {
-
- MBeanAttributeInfo [] attributesMetadata = new MBeanAttributeInfo[propertyDefinitions.size()+statisticDefinitions.size()];
- MBeanOperationInfo [] operationsMetadata = new MBeanOperationInfo[methodDefinitions.size()];
-
- buildAttributes(propertyDefinitions,statisticDefinitions,attributesMetadata);
- buildMethods(methodDefinitions,operationsMetadata);
-
- _metadata = new MBeanInfo(_name,_name,attributesMetadata,null,operationsMetadata,null);
-
- EntityLifecycleNotification notification = new EntityLifecycleNotification(
- EntityLifecycleNotification.SCHEMA_INJECTED_NOTIFICATION_TYPE,
- _parent.getName(),
- _name,
- Names.CLASS,
- _objectName);
-
- sendNotification(notification);
-
- // Converting stored object instances into JMX MBean and removing raw instance data.
- for (Entry<Binary, QManManagedObject> instanceEntry : _objectInstances.entrySet())
- {
- Binary objectId = instanceEntry.getKey();
- QManManagedObject instance = instanceEntry.getValue();
-
- for (Iterator<byte[]> iterator = instance._rawInstrumentationData.iterator(); iterator.hasNext();)
- {
- updateInstanceWithInstrumentationData(instance,iterator.next());
- iterator.remove();
- }
-
- for (Iterator<byte[]> iterator = instance._rawConfigurationData.iterator(); iterator.hasNext();)
- {
- updateInstanceWithConfigurationData(instance, iterator.next());
- iterator.remove();
- }
-
- registerMBean(instance,_parent.getOwnerId(),_parent.getName(),_name,objectId);
- }
- _state = _schemaInjected;
-
- }
- };
-
- /**
- * After a schema is built into this definition this is the current state of the class.
- */
- final State _schemaInjected = new State()
- {
- /**
- * Updates the configuration state of the object instance associates with the given object identifier.
- *
- * @param objectId the object identifier.
- * @param rawData the configuration data (raw format).
- */
- public void addConfigurationData (Binary objectId, byte[] rawData)
- {
- QManManagedObject instance = getObjectInstance(objectId,true);
- updateInstanceWithConfigurationData(instance, rawData);
- }
-
- /**
- * Updates the instrumentation state of the object instance associates with the given object identifier.
- *
- * @param objectId the object identifier.
- * @param rawData the instrumentation data (raw format).
- */
- public void addInstrumentationData (Binary objectId, byte[] rawData)
- {
- QManManagedObject instance = getObjectInstance(objectId,true);
- updateInstanceWithInstrumentationData(instance, rawData);
- }
-
- /**
- * Never called when the class definition has this state.
- */
- public void setSchema (
- List<Map<String, Object>> propertyDefinitions,
- List<Map<String, Object>> statisticDefinitions,
- List<MethodOrEventDataTransferObject> methodDefinitions) throws UnableToBuildFeatureException
- {
- throw new IllegalStateException("When a schema arrives it's not possible for this class to be in this state.");
- }
- };
-
- /**
- * MBean used for representing remote broker object instances.
- * This is the core component of the QMan domain model
- */
- class QManManagedObject extends QManManagedEntity implements MBeanRegistration
- {
- private Binary _objectId;
-
- // Arrays used for storing raw data before this mbean is registered to mbean server.
- List<byte[]> _rawInstrumentationData = new ArrayList<byte[]>();
- List<byte[]> _rawConfigurationData = new ArrayList<byte[]>();
-
- /**
- * Builds a new managed object with the given object identifier.
- *
- * @param objectId the object identifier.
- */
- QManManagedObject(Binary objectId)
- {
- this._objectId = objectId;
- }
-
- /**
- * Returns the value of the given attribute.s
- *
- * @throws AttributeNotFoundException when no attribute is found with the given name.
- */
- public Object getAttribute (String attributeName) throws AttributeNotFoundException, MBeanException, ReflectionException
- {
- if (attributeName == null)
- {
- throw new RuntimeOperationsException(new IllegalArgumentException("attribute name must not be null"));
- }
-
- if (_properties.containsKey(attributeName) || _statistics.containsKey(attributeName))
- {
- return _attributes.get(attributeName);
- } else
- {
- throw new AttributeNotFoundException(attributeName);
- }
- }
-
- /**
- * Executes an operation on this object instance.
- *
- * @param actionName the name of the method.
- * @param params the method parameters
- * @param signature the method signature.
- */
- public Object invoke (String actionName, Object[] params, String[] signature) throws MBeanException,ReflectionException
- {
- OperationHasBeenInvokedNotification notification = null;
- try
- {
- QpidMethod method = _methods.get(actionName);
- if (method != null)
- {
- try
- {
- method.validate(params);
- InvocationResult result = invokeMethod(_objectId, method, params);
- notification = new OperationHasBeenInvokedNotification(actionName,params,signature,result);
- return result;
- } catch (Exception ex)
- {
- MBeanException exception = new MBeanException(ex);
- notification = new OperationHasBeenInvokedNotification(actionName,params,signature,exception);
- throw exception;
- }
- } else
- {
- ReflectionException exception = new ReflectionException(new NoSuchMethodException(actionName));
- notification = new OperationHasBeenInvokedNotification(actionName,params,signature,exception);
- throw exception;
- }
- } finally
- {
- sendNotification(notification);
- }
- }
-
- /**
- * Sets the value of the given attribute on this object instance.
- *
- * @param attribute contains the new value of the attribute.
- * @throws AttributeNotFoundException when the given attribute is not found on this object instance.
- * @throws InvalidAttributeValueException when the given value is violating one attribute invariant.
- */
- public void setAttribute (Attribute attribute) throws AttributeNotFoundException,
- InvalidAttributeValueException, MBeanException, ReflectionException
- {
- QpidProperty property = _properties.get(attribute.getName());
- try
- {
- property.validate(attribute.getValue());
- } catch(ValidationException exception)
- {
- throw new InvalidAttributeValueException(exception.getMessage());
- }
- throw new RuntimeException("Not yet implemented.");
- }
-
- /**
- * Sets the values of several attributes of this MBean.
- *
- * @param attributes a list of attributes: The identification of the attributes to be set and the values they are to be set to.
- * @return The list of attributes that were set, with their new values.
- */
- public AttributeList setAttributes (AttributeList attributes)
- {
- throw new RuntimeException("Not yet implemented.");
- }
-
- /**
- * MBean server callback after deregistration.
- */
- public void postDeregister ()
- {
- }
-
- /**
- * After the object is registered the raw data is set to null.
- * This is done because we no longer need this data : it has already been
- * injected into this object instance.
- *
- * @param registrationDone a flag indicating if the instance has been registered to mbean server.
- */
- public void postRegister (Boolean registrationDone)
- {
- if (registrationDone)
- {
- _rawConfigurationData = null;
- _rawInstrumentationData = null;
- }
- }
-
- /**
- * MBean server callback before deregistration.
- */
- public void preDeregister () throws Exception
- {
- }
-
- /**
- * MBean server callback before registration.
- */
- public ObjectName preRegister (MBeanServer server, ObjectName name) throws Exception
- {
- return name;
- }
- }
-
- Map<String, QpidProperty> _properties = new HashMap<String, QpidProperty>();
- Map<String, QpidStatistic> _statistics = new HashMap<String, QpidStatistic>();
- private Map<String, QpidMethod> _methods = new HashMap<String, QpidMethod>();
-
- private List<QpidProperty> _schemaOrderedProperties = new ArrayList<QpidProperty>();
- private List<QpidStatistic> _schemaOrderedStatistics= new ArrayList<QpidStatistic>();
-
- private int _howManyPresenceBitMasks;
- private BlockingQueue<InvocationResult> _exchangeChannelForMethodInvocations;
- private final IMethodInvocationListener _methodInvocationListener;
-
- Map<Binary, QManManagedObject> _objectInstances = new HashMap<Binary, QManManagedObject>();
- State _state = _schemaNotRequested;;
-
- private final static class Log
- {
- private final static Logger LOGGER = Logger.get(QpidClass.class);
- final static void logMethodInvocationResult(InvocationResult result)
- {
- if (LOGGER.isDebugEnabled())
- {
- LOGGER.debug(String.valueOf(result));
- }
- }
- }
-
- /**
- * Builds a new class with the given name and package as parent.
- *
- * @param className the name of the class.
- * @param hash the class schema hash.
- * @param parentPackage the parent of this class.
- */
- QpidClass(String className, Binary hash, QpidPackage parentPackage)
- {
- super(className,hash, parentPackage,Names.CLASS);
- this._methodInvocationListener = _parent.getMethodInvocationListener();
- this._exchangeChannelForMethodInvocations = new SynchronousQueue<InvocationResult>();
- }
-
- /**
- * Adds the configuration data for the object instance associated to the given object identifier.
- *
- * @param objectId the object identifier.
- * @param rawData the raw configuration data.
- */
- void addInstrumentationData (Binary objectId, byte[] rawData)
- {
- _logger.debug(
- Messages.QMAN_200014_INCOMING_INSTRUMENTATION_DATA,
- _parent.getOwnerId(),
- _parent.getName(),
- _name,
- objectId);
- _state.addInstrumentationData(objectId, rawData);
- }
-
- /**
- * Adds the instrumentation data for the object instance associated to the given object identifier.
- *
- * @param objectId the object identifier.
- * @param rawData the raw instrumentation data.
- */
- void addConfigurationData (Binary objectId, byte[] rawData)
- {
- _logger.debug(
- Messages.QMAN_200015_INCOMING_CONFIGURATION_DATA,
- _parent.getOwnerId(),
- _parent.getName(),
- _name,
- objectId);
- _state.addConfigurationData(objectId, rawData);
- }
-
- /**
- * Sets the schema for this class definition.
- * A schema is basically a metadata description of all properties, statistics, methods and events of this class.
- *
- * @param propertyDefinitions properties metadata.
- * @param statisticDefinitions statistics metadata.
- * @param methodDefinitions methods metadata.
- * @throws UnableToBuildFeatureException when some error occurs while parsing the incoming schema.
- */
- void setSchema (
- List<Map<String, Object>> propertyDefinitions,
- List<Map<String, Object>> statisticDefinitions,
- List<MethodOrEventDataTransferObject> methodDefinitions) throws UnableToBuildFeatureException
- {
- _logger.info(Messages.QMAN_000010_INCOMING_SCHEMA,_parent.getOwnerId(),_parent.getName(),_name);
- _state.setSchema(propertyDefinitions, statisticDefinitions, methodDefinitions);
- }
-
- /**
- * Internal method used for building attributes definitions.
- *
- * @param props the map contained in the properties schema.
- * @param stats the map contained in the statistics schema.
- * @param attributes the management metadata for attributes.
- * @throws UnableToBuildFeatureException when it's not possibile to build one attribute definition.
- */
- void buildAttributes (
- List<Map<String, Object>> props,
- List<Map<String, Object>> stats,
- MBeanAttributeInfo[] attributes) throws UnableToBuildFeatureException
- {
- int index = 0;
- int howManyOptionalProperties = 0;
-
- for (Map<String, Object> propertyDefinition : props)
- {
- QpidFeatureBuilder builder = QpidFeatureBuilder.createPropertyBuilder(propertyDefinition);
- builder.build();
-
- QpidProperty property = (QpidProperty) builder.getQpidFeature();
-
- howManyOptionalProperties += (property.isOptional()) ? 1 : 0;
-
- _properties.put(property.getName(),property);
- _schemaOrderedProperties.add(property);
- attributes[index++]=(MBeanAttributeInfo) builder.getManagementFeature();
-
- _logger.debug(
- Messages.QMAN_200016_PROPERTY_DEFINITION_HAS_BEEN_BUILT,
- _parent.getName(),
- _name,
- property);
- }
-
- _howManyPresenceBitMasks = (int)Math.ceil((double)howManyOptionalProperties / 8);
-
- _logger.debug(
- Messages.QMAN_200018_OPTIONAL_PROPERTIES_INFO,
- _parent.getOwnerId(),
- _parent.getName(),
- _name,
- _howManyPresenceBitMasks);
-
- for (Map<String, Object> statisticDefinition : stats)
- {
- QpidFeatureBuilder builder = QpidFeatureBuilder.createStatisticBuilder(statisticDefinition);
- builder.build();
- QpidStatistic statistic = (QpidStatistic) builder.getQpidFeature();
-
- _statistics.put(statistic.getName(),statistic);
- _schemaOrderedStatistics.add(statistic);
- attributes[index++]=(MBeanAttributeInfo) builder.getManagementFeature();
-
- _logger.debug(
- Messages.QMAN_200017_STATISTIC_DEFINITION_HAS_BEEN_BUILT,
- _parent.getName(),
- _name,
- statistic);
- }
- }
-
- /**
- * Returns the object instance associated to the given identifier.
- * Note that if the identifier is not associated to any obejct instance, a new one will be created.
- *
- * @param objectId the object identifier.
- * @param registration a flag indicating whenever the (new ) instance must be registered with MBean server.
- * @return the object instance associated to the given identifier.
- */
- QManManagedObject getObjectInstance(Binary objectId, boolean registration)
- {
- QManManagedObject objectInstance = _objectInstances.get(objectId);
- if (objectInstance == null)
- {
- objectInstance = new QManManagedObject(objectId);
- _objectInstances.put(objectId, objectInstance);
- if (registration)
- {
- registerMBean(objectInstance,_parent.getOwnerId(),_parent.getName(),_name,objectId);
- }
- }
- return objectInstance;
- }
-
- /**
- * Internal method used for building method defintiions.
- *
- * @param definitions the properties map contained in the incoming schema.
- * @param operationsMetadata
- * @throws UnableToBuildFeatureException when it's not possibile to build one or more definitions.
- */
- void buildMethods (List<MethodOrEventDataTransferObject> definitions, MBeanOperationInfo[] operationsMetadata) throws UnableToBuildFeatureException
- {
- int index = 0;
- for (MethodOrEventDataTransferObject definition: definitions)
- {
- QpidFeatureBuilder builder = QpidFeatureBuilder.createMethodBuilder(definition);
- builder.build();
- operationsMetadata [index++]= (MBeanOperationInfo) builder.getManagementFeature();
- QpidMethod method = (QpidMethod) builder.getQpidFeature();
- _methods.put(method.getName(),method);
- }
- }
-
- /**
- * Header (opcode='M')
- * ObjectId of target object (128 bits)
- * Package name (str8)
- * Class name (str8)
- * Class hash (bin128)
- * Method name (str8) [as defined in the schema]
- * Now encode all input ("I") and i/o (IO) arguments in the order in which they are defined in the schema.
- * (i.e. make one pass over the argument list and encode arguments that are either input or inptu/output).
-
- * @param objectId
- * @param method
- * @param parameters
- * @throws Exception
- */
- private InvocationResult invokeMethod(Binary objectId,QpidMethod method,Object [] parameters) throws Exception
- {
- try
- {
- _service.connect();
-
- int sequenceNumber = SequenceNumberGenerator.getNextSequenceNumber();
- _methodInvocationListener.operationIsGoingToBeInvoked(new InvocationEvent(this,sequenceNumber,_exchangeChannelForMethodInvocations));
- _service.invoke(_parent.getName(), _name, _hash,objectId,parameters, method,sequenceNumber,objectId.getBankId(),objectId.getBrokerId());
-
- InvocationResult result = _exchangeChannelForMethodInvocations.poll(5000,TimeUnit.MILLISECONDS);
-
- if (result == null)
- {
- throw new TimeoutException();
- }
-
- Map<String, Object> output = method.decodeParameters(result.getOutputAndBidirectionalArgumentValues());
- result.setOutputSection(output);
-
- Log.logMethodInvocationResult(result);
-
- if (result.isException())
- {
- result.createAndThrowException();
- }
- return result;
- } finally
- {
- _service.close();
- }
- }
-
- /**
- * Updates the given obejct instance with the given incoming configuration data.
- *
- * @param instance the managed object instance.
- * @param rawData the incoming configuration data which contains new values for instance properties.
- */
- void updateInstanceWithConfigurationData(QManManagedObject instance,byte [] rawData)
- {
- BBDecoder decoder = new BBDecoder();
- decoder.init(ByteBuffer.wrap(rawData));
-
- byte [] presenceBitMasks = decoder.readBytes(_howManyPresenceBitMasks);
- for (QpidProperty property : _schemaOrderedProperties)
- {
- try {
- Object value = property.decodeValue(decoder,presenceBitMasks);
- instance.createOrReplaceAttributeValue(property.getName(),value);
- } catch(Exception ignore) {
- _logger.error(Messages.QMAN_100016_UNABLE_TO_DECODE_FEATURE_VALUE, _parent.getName(),_name,property.getName());
- }
- }
- }
-
- /**
- * Updates the given object instance with the given incoming instrumentation data.
- *
- * @param instance the managed object instance.
- * @param rawData the incoming instrumentation data which contains new values for instance properties.
- */
- void updateInstanceWithInstrumentationData(QManManagedObject instance,byte [] rawData)
- {
- BBDecoder decoder = new BBDecoder();
- decoder.init(ByteBuffer.wrap(rawData));
-
- for (QpidStatistic statistic : _schemaOrderedStatistics)
- {
- try {
- Object value = statistic.decodeValue(decoder);
- instance.createOrReplaceAttributeValue(statistic.getName(),value);
- } catch(Exception ignore) {
- _logger.error(Messages.QMAN_100016_UNABLE_TO_DECODE_FEATURE_VALUE, _parent.getName(),_name,statistic.getName());
- }
- }
- }
-
- @Override
- public String toString ()
- {
- return new StringBuilder()
- .append(_parent.getOwnerId())
- .append("::")
- .append(_parent.getName())
- .append('.')
- .append(_name)
- .toString();
- }
-
- /**
- * Removes the object instance associated to the given identifier.
- *
- * @param objectId the object identifier.
- */
- void removeObjectInstance (Binary objectId)
- {
- QManManagedObject toBeRemoved = _objectInstances.remove(objectId);
- if (toBeRemoved != null)
- {
- ObjectName objectName = JMX_SERVICE.unregisterObjectInstance(_parent.getOwnerId(),_parent.getName(),_name,toBeRemoved._objectId);
-
- EntityLifecycleNotification notification = new EntityLifecycleNotification(
- EntityLifecycleNotification.INSTANCE_REMOVED_NOTIFICATION_TYPE,
- _parent.getName(),
- _name,
- Names.CLASS,
- objectName);
-
- sendNotification(notification);
- }
- }
-
- /**
- * Deregisters all the object instances and release all previously acquired resources.
- */
- void releaseResources ()
- {
- _objectInstances.clear();
- JMX_SERVICE.unregisterObjectInstances();
- JMX_SERVICE.unregisterClassDefinitions();
- _service.close();
- }
-
- /**
- * Compose method used for registering mbean instance.
- *
- * @param instance the mbean instance.
- * @param brokerId the broker identifier.
- * @param packageName the package name.
- * @param className the class name.
- * @param objectId the object identifier.
- */
- private void registerMBean(
- QManManagedObject instance,
- UUID brokerId,
- String packageName,
- String className,
- Binary objectId)
- {
- ObjectName objectName = JMX_SERVICE.registerObjectInstance(instance,_parent.getOwnerId(),_parent.getName(),_name,objectId);
-
- EntityLifecycleNotification notification = new EntityLifecycleNotification(
- EntityLifecycleNotification.INSTANCE_ADDED_NOTIFICATION_TYPE,
- packageName,
- className,
- Names.CLASS,
- objectName);
-
- sendNotification(notification);
- }
-}