All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.system.ServiceDynamicMBeanSupport Maven / Gradle / Ivy

The newest version!
/*
 * JBoss, Home of Professional Open Source.
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
 * as indicated by the @author tags. See the copyright.txt file in the
 * distribution for a full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.jboss.system;

import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.DynamicMBean;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanConstructorInfo;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanNotificationInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.ReflectionException;

import org.jboss.logging.Logger;

/**
 * 
 *
 * @author  Sacha Labourey.
 * @version $Revision: 86477 $
 *
 * 

Revisions: * *

6 janv. 2003 Sacha Labourey: *

    *
  • First implementation
  • *
*/ public class ServiceDynamicMBeanSupport extends ServiceMBeanSupport implements DynamicMBean { // Constants ----------------------------------------------------- // Attributes ---------------------------------------------------- // Static -------------------------------------------------------- // Constructors -------------------------------------------------- public ServiceDynamicMBeanSupport() { super(); } public ServiceDynamicMBeanSupport(Class type) { super(type); } public ServiceDynamicMBeanSupport(String category) { super(category); } public ServiceDynamicMBeanSupport(Logger log) { super(log); } // Public -------------------------------------------------------- // DynamicMBean implementation ----------------------------------- public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException { // locally managed attributes! // if("State".equals(attribute)) { return new Integer(getState()); } if("StateString".equals(attribute)) { return getStateString(); } if("Name".equals(attribute)) { return getName(); } // Wrapped attributes? // return getInternalAttribute (attribute); } public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException, ReflectionException { try { if (ServiceController.JBOSS_INTERNAL_LIFECYCLE.equals(actionName)) { jbossInternalLifecycle((String) params[0]); return null; } if (params == null || params.length == 0) { if ("create".equals(actionName)) { create(); return null; } else if ("start".equals(actionName)) { start(); return null; } else if ("stop".equals(actionName)) { stop(); return null; } else if ("destroy".equals(actionName)) { destroy(); return null; } } } catch (Exception e) { throw new MBeanException(e, "Exception in service lifecyle operation: " + actionName); } // If I am here, it means that the invocation has not been handled locally // try { return internalInvoke (actionName, params, signature); } catch (Exception e) { throw new MBeanException(e, "Exception invoking: " + actionName); } } public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { setInternalAttribute (attribute); } public AttributeList setAttributes(AttributeList attributes) { AttributeList list = new AttributeList(); if (attributes == null) return list; for (int i = 0; i < attributes.size(); ++i) { Attribute attribute = (Attribute) attributes.get(i); try { setAttribute(attribute); list.add(attribute); } catch (Throwable t) { log.debug("Error setting attribute " + attribute.getName(), t); } } return list; } public AttributeList getAttributes(String[] attributes) { AttributeList list = new AttributeList(); if (attributes == null) return list; for (int i = 0; i < attributes.length; ++i) { try { Object value = getAttribute(attributes[i]); list.add(new Attribute(attributes[i], value)); } catch (Throwable t) { log.debug("Error getting attribute " + attributes[i], t); } } return list; } public MBeanInfo getMBeanInfo() { MBeanParameterInfo[] noParams = new MBeanParameterInfo[] {}; MBeanConstructorInfo[] ctorInfo = getInternalConstructorInfo(); MBeanAttributeInfo[] attrs = getInternalAttributeInfo(); MBeanAttributeInfo[] attrInfo = new MBeanAttributeInfo[3 + attrs.length]; attrInfo[0] = new MBeanAttributeInfo("Name", "java.lang.String", "Return the service name", true, false, false); attrInfo[1] = new MBeanAttributeInfo("State", "int", "Return the service state", true, false, false); attrInfo[2] = new MBeanAttributeInfo("StateString", "java.lang.String", "Return the service's state as a String", true, false, false); System.arraycopy(attrs, 0, attrInfo, 3, attrs.length); MBeanParameterInfo[] jbossInternalLifecycleParms = new MBeanParameterInfo[1]; jbossInternalLifecycleParms[0] = new MBeanParameterInfo("method", String.class.getName(), "The lifecycle method"); MBeanOperationInfo[] ops = getInternalOperationInfo(); MBeanOperationInfo[] opInfo = new MBeanOperationInfo[5 + ops.length]; opInfo[0] = new MBeanOperationInfo("create", "create service lifecycle operation", noParams, "void", MBeanOperationInfo.ACTION); opInfo[1] = new MBeanOperationInfo("start", "start service lifecycle operation", noParams, "void", MBeanOperationInfo.ACTION); opInfo[2] = new MBeanOperationInfo("stop", "stop service lifecycle operation", noParams, "void", MBeanOperationInfo.ACTION); opInfo[3] = new MBeanOperationInfo("destroy", "destroy service lifecycle operation", noParams, "void", MBeanOperationInfo.ACTION); opInfo[4] = new MBeanOperationInfo(ServiceController.JBOSS_INTERNAL_LIFECYCLE, "Internal lifecycle (for internal use)", jbossInternalLifecycleParms, "void", MBeanOperationInfo.ACTION); System.arraycopy(ops, 0, opInfo, 5, ops.length); MBeanNotificationInfo[] notifyInfo = getInternalNotificationInfo(); return new MBeanInfo(getClass().getName(), getInternalDescription(), attrInfo, ctorInfo, opInfo, notifyInfo); } // Y overrides --------------------------------------------------- // Package protected --------------------------------------------- // Protected ----------------------------------------------------- protected String getInternalDescription() { return "DynamicMBean Service"; } protected MBeanConstructorInfo[] getInternalConstructorInfo() { return new MBeanConstructorInfo[0]; } protected MBeanAttributeInfo[] getInternalAttributeInfo() { return new MBeanAttributeInfo[0]; } protected MBeanOperationInfo[] getInternalOperationInfo() { return new MBeanOperationInfo[0]; } protected MBeanNotificationInfo[] getInternalNotificationInfo() { return new MBeanNotificationInfo[0]; } protected Object getInternalAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException { throw new AttributeNotFoundException ("Attribute not found " + attribute); } protected void setInternalAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { throw new AttributeNotFoundException ("Attribute not found " + attribute); } protected Object internalInvoke(String actionName, Object[] params, String[] signature) throws MBeanException, ReflectionException { StringBuffer buffer = new StringBuffer(); buffer.append(actionName); buffer.append('('); for (int i = 0; i < signature.length; ++i) { buffer.append(signature[i]); if (i < signature.length - 1) buffer.append(", "); } buffer.append(')'); throw new MBeanException(new Exception("Operation not found " + buffer.toString()), "Operation not found " + actionName); } // Private ------------------------------------------------------- // Inner classes ------------------------------------------------- }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy