/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.resource; import java.lang.reflect.Constructor; import java.util.Iterator; import java.util.Map; 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.ReflectionException; import org.w3c.dom.Element; /** * RARDeployment.java * * * Created: Fri Sep 28 11:59:19 2001 * * @author David Jencks * @version */ public class RARDeployment implements DynamicMBean { private final RARMetaData rarMetaData; private final MBeanInfo mbi; /** * Creates a new RARDeployment instance. * * @param rarMetaData a RARMetaData value */ public RARDeployment (RARMetaData rarMetaData) { this.rarMetaData = rarMetaData; mbi = setupMBeanInfo(); } // implementation of javax.management.DynamicMBean interface /** * The invoke method throws an MBeanException for RARDeployement * because the mbean is read-only. * * @param operation a String value * @param params an Object[] value * @param sig a String[] value * @return * @exception MBeanException always thrown * @exception ReflectionException if an error occurs */ public Object invoke(String operation, Object[] params, String[] sig) throws MBeanException { throw new MBeanException(null, "No operations exposed for RARDeployment"); } /** * Describe getAttributes method here. * * @param AttributeNames a String[] value * @return an AttributeList value */ public AttributeList getAttributes(String[] attributeNames) { AttributeList atts = new AttributeList(); for (int i = 0; i < attributeNames.length; i++) { try { Object value = getAttribute(attributeNames[i]); atts.add(new Attribute(attributeNames[i], value)); } catch (Exception e) { } } return atts; } public Object getAttribute(String attributeName) throws AttributeNotFoundException, MBeanException, ReflectionException { if (attributeName == null) { throw new MBeanException(new AttributeNotFoundException("Null is not an attribute name"), "No attribute name given to getAttribute"); } else if (attributeName.equals("DisplayName")) { return rarMetaData.getDisplayName(); } else if (attributeName.equals("ManagedConnectionFactoryClass")) { return rarMetaData.getManagedConnectionFactoryClass(); } else if (attributeName.equals("TransactionSupport")) { return new Integer(rarMetaData.getTransactionSupport()); } else if (attributeName.equals("AuthMechType")) { return rarMetaData.getAuthMechType(); } else if (attributeName.equals("ReauthenticationSupport")) { return new Boolean(rarMetaData.getReauthenticationSupport()); } else if (attributeName.equals("RARMetaData")) { return rarMetaData; } else if (attributeName.equals("ResourceAdapterElement")) { return rarMetaData.getResourceAdapterElement(); } else { RARMetaData.Property prop = (RARMetaData.Property)rarMetaData.getProperties().get(attributeName); if (prop != null) { return prop.value; } } throw new AttributeNotFoundException("No such attribute: " + attributeName); } public MBeanInfo getMBeanInfo() { return mbi; } public void setAttribute(Attribute param1) throws AttributeNotFoundException { throw new AttributeNotFoundException("No settable attributes in RARDeployment"); } public AttributeList setAttributes(AttributeList param1) { return null; } private MBeanInfo setupMBeanInfo() { Map rarProps = rarMetaData.getProperties(); int attributeCount = 6 + rarProps.size(); MBeanAttributeInfo[] attributeInfos = new MBeanAttributeInfo[attributeCount]; MBeanConstructorInfo[] constructorInfos = new MBeanConstructorInfo[1]; int i = 0; attributeInfos[i++] = new MBeanAttributeInfo("DisplayName", "java.lang.String", "Display name of the Resource Adapter", true, false, false); attributeInfos[i++] = new MBeanAttributeInfo("ManagedConnectionFactoryClass", "java.lang.String", "Class name of the ManagedConnectionFactory for this Resource Adapter", true, false, false); attributeInfos[i++] = new MBeanAttributeInfo("TransactionSupport", "java.lang.Integer", "Transaction support of the Resource Adapter, expressed as a TX_SUPPORT_* constant", true, false, false); attributeInfos[i++] = new MBeanAttributeInfo("AuthMechType", "java.lang.String", "Authorization mechanism type of the Resource Adapter", true, false, false); attributeInfos[i++] = new MBeanAttributeInfo("ReauthenticationSupport", "java.lang.Boolean", "Whether this Resource Adapter supports reauthentication of existing connections.", true, false, false); attributeInfos[i++] = new MBeanAttributeInfo("ResourceAdapterElement", "org.w3c.Element", "ra.xml root element.", true, false, false); Iterator propIterator = rarProps.values().iterator(); while (propIterator.hasNext()) { RARMetaData.Property prop = (RARMetaData.Property)propIterator.next(); attributeInfos[i++] = new MBeanAttributeInfo(prop.name, prop.type, prop.desc, true, false, false); } Constructor[] constructors = getClass().getConstructors(); constructorInfos[0] = new MBeanConstructorInfo("Constructor for the RARDeployment", constructors[0]); MBeanInfo mbi = new MBeanInfo(getClass().getName(), "Description of a deployed Resource Adapter", attributeInfos, constructorInfos, new MBeanOperationInfo[0], new MBeanNotificationInfo[0]); return mbi; } }// Rardeployment