[jboss-cvs] JBossAS SVN: r61512 - trunk/connector/src/main/org/jboss/resource/connectionmanager.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 21 00:37:51 EDT 2007


Author: weston.price at jboss.com
Date: 2007-03-21 00:37:51 -0400 (Wed, 21 Mar 2007)
New Revision: 61512

Added:
   trunk/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java
Log:
[JBAS-1425] New deployment module representing an MCF deployment.

Added: trunk/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java	                        (rev 0)
+++ trunk/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java	2007-03-21 04:37:51 UTC (rev 61512)
@@ -0,0 +1,934 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.resource.connectionmanager;
+
+import java.beans.PropertyEditor;
+import java.beans.PropertyEditorManager;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.Attribute;
+import javax.management.AttributeNotFoundException;
+import javax.management.InvalidAttributeValueException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanOperationInfo;
+import javax.management.Notification;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionManager;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.resource.spi.ManagedConnection;
+import javax.resource.spi.ManagedConnectionFactory;
+import javax.resource.spi.ResourceAdapter;
+import javax.resource.spi.ResourceAdapterAssociation;
+
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.MetaData;
+import org.jboss.resource.metadata.ConfigPropertyMetaData;
+import org.jboss.resource.metadata.ConnectionDefinitionMetaData;
+import org.jboss.resource.metadata.ConnectorMetaData;
+import org.jboss.resource.metadata.DescriptionGroupMetaData;
+import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentMetaData;
+import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryPropertyMetaData;
+import org.jboss.system.ServiceDynamicMBeanSupport;
+import org.jboss.util.Classes;
+import org.jboss.util.NestedRuntimeException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+
+/**
+ * A ManagedConnectionFactoryDeployment.
+ * 
+ * @author <a href="weston.price at jboss.org">Weston Price</a>
+ * @version $Revision: 1.1 $
+ */
+public class ManagedConnectionFactoryDeployment extends ServiceDynamicMBeanSupport implements ManagedConnectionFactory
+{
+
+   /** The serialVersionUID */
+   private static final long serialVersionUID = -8448602289610025849L;
+
+   public final static String MCF_ATTRIBUTE_CHANGED_NOTIFICATION = "jboss.mcfattributechangednotification";
+
+   private Logger log = Logger.getLogger(getClass());
+
+   //Hack to use previous ra.xml parsing code until xslt deployment is written.
+   private ObjectName oldRarDeployment;
+
+   private String rarName;
+
+   private String connectionDefinition;
+
+   private String vendorName;
+
+   private String specVersion;
+
+   private String eisType;
+
+   private String version;
+
+   private String managedConnectionFactoryClass;
+
+   private String connectionFactoryInterface;
+
+   private String connectionFactoryImplClass;
+
+   private String connectionInterface;
+
+   private String connectionImplClass;
+
+   private String transactionSupport;
+
+   private Element managedConnectionFactoryProperties;
+
+   private String authenticationMechanismType;
+
+   private String credentialInterface;
+
+   private boolean reauthenticationSupport;
+
+   private Class mcfClass;
+
+   private String jndiName;
+   
+   private ManagedConnectionFactory mcf;
+   
+   private ManagedConnectionFactoryDeploymentMetaData dmd;
+   
+   private ConnectorMetaData cmd;
+   
+   /**
+    * Default managed constructor for RARDeployment mbeans.
+    */
+   public ManagedConnectionFactoryDeployment()
+   {
+   }
+   
+   public ManagedConnectionFactoryDeployment(ConnectorMetaData cmd, ManagedConnectionFactoryDeploymentMetaData dmd)
+   {
+      this.cmd = cmd;
+      this.dmd = dmd;      
+   }
+   
+   public String getJndiName()
+   {
+      return this.jndiName;
+   }
+   
+   public void setJndiName(String jndiName)
+   {
+      this.jndiName = jndiName;
+      
+   }
+   public String getRARName()
+   {
+      return rarName;
+   }
+
+   public void setRARName(String rarName)
+   {
+      this.rarName = rarName;
+   }
+
+   public String getConnectionDefinition()
+   {
+      return connectionDefinition;
+   }
+
+   public void setConnectionDefinition(String connectionDefinition)
+   {
+      this.connectionDefinition = connectionDefinition;
+   }
+
+   public String getVendorName()
+   {
+      return vendorName;
+   }
+
+   public void setVendorName(String vendorName)
+   {
+      this.vendorName = vendorName;
+   }
+
+   public String getSpecVersion()
+   {
+      return specVersion;
+   }
+
+   public void setSpecVersion(String specVersion)
+   {
+      this.specVersion = specVersion;
+   }
+
+   public String getEisType()
+   {
+      return eisType;
+   }
+
+   public void setEisType(String eisType)
+   {
+      this.eisType = eisType;
+   }
+
+   public String getVersion()
+   {
+      return version;
+   }
+
+   public void setVersion(String version)
+   {
+      this.version = version;
+   }
+
+   public String getManagedConnectionFactoryClass()
+   {
+      return managedConnectionFactoryClass;
+   }
+
+   public void setManagedConnectionFactoryClass(final String managedConnectionFactoryClass)
+   {
+      this.managedConnectionFactoryClass = managedConnectionFactoryClass;
+   }
+
+   public String getConnectionFactoryInterface()
+   {
+      return connectionFactoryInterface;
+   }
+
+   public void setConnectionFactoryInterface(String connectionFactoryInterface)
+   {
+      this.connectionFactoryInterface = connectionFactoryInterface;
+   }
+
+   public String getConnectionFactoryImplClass()
+   {
+      return connectionFactoryImplClass;
+   }
+
+   public void setConnectionFactoryImplClass(String connectionFactoryImplClass)
+   {
+      this.connectionFactoryImplClass = connectionFactoryImplClass;
+   }
+
+   public String getConnectionInterface()
+   {
+      return connectionInterface;
+   }
+
+   public void setConnectionInterface(String connectionInterface)
+   {
+      this.connectionInterface = connectionInterface;
+   }
+
+   public String getConnectionImplClass()
+   {
+      return connectionImplClass;
+   }
+
+   public void setConnectionImplClass(String connectionImplClass)
+   {
+      this.connectionImplClass = connectionImplClass;
+   }
+
+   public String getTransactionSupport()
+   {
+      return transactionSupport;
+   }
+
+   public void setTransactionSupport(String transactionSupport)
+   {
+      this.transactionSupport = transactionSupport;
+   }
+
+   public Element getManagedConnectionFactoryProperties()
+   {
+      return managedConnectionFactoryProperties;
+   }
+
+   public void setManagedConnectionFactoryProperties(Element managedConnectionFactoryProperties)
+   {
+      this.managedConnectionFactoryProperties = managedConnectionFactoryProperties;
+   }
+
+   public String getAuthenticationMechanismType()
+   {
+      return authenticationMechanismType;
+   }
+
+   public void setAuthenticationMechanismType(String authenticationMechanismType)
+   {
+      this.authenticationMechanismType = authenticationMechanismType;
+   }
+
+   public String getCredentialInterface()
+   {
+      return credentialInterface;
+   }
+
+   public void setCredentialInterface(String credentialInterface)
+   {
+      this.credentialInterface = credentialInterface;
+   }
+
+   public boolean isReauthenticationSupport()
+   {
+      return reauthenticationSupport;
+   }
+
+   public void setReauthenticationSupport(boolean reauthenticationSupport)
+   {
+      this.reauthenticationSupport = reauthenticationSupport;
+   }
+
+   public ManagedConnectionFactory getMcfInstance()
+   {
+      return mcf;
+   }
+   
+//   protected void startService() throws Exception
+//   {
+//      if (mcf != null)
+//         throw new org.jboss.deployers.spi.DeploymentException("Stop the RARDeployment before restarting it");
+//
+//      ConnectorMetaData cmd = null;
+//      ConnectionDefinitionMetaData cdmd = null;
+//      ResourceAdapter resourceAdapter = null;
+//      ManagedConnectionFactoryDeployment deployment = null;
+//
+//      JCAMetaDataRepository repository = JCAMetaDataRepository.getInstance();
+//      
+//      List<JCAMetaDataRepositoryEntry> candidates = repository.getMetaDataForConnectionDefinitionAndJndiName(connectionDefinition, jndiName);
+//      
+//      if(candidates.size() > 1 || candidates.size() <= 0)
+//      {
+//         //We will have to throw here as the MD cannot be determined      
+//      }
+//      JCAMetaDataRepositoryEntry entry = candidates.get(0);
+//      cmd = entry.getRARMetaData();
+//      cdmd = cmd.getConnectionDefinition(connectionDefinition);
+//      
+//      //Should optimized
+//      List<JCAManagedDeployment> temp = entry.getDeployments();
+//      deployment = (ManagedConnectionFactoryDeployment)temp.get(0).getRealDeployment();
+//      
+//      if(cdmd == null)
+//      {
+//         //Should never get here
+//      }
+//            
+//      //TODO set all the other properties
+//      setManagedConnectionFactoryClass(cdmd.getManagedConnectionFactoryClass());
+//      setReauthenticationSupport(cmd.getReauthenticationSupport());
+//      
+//      try
+//      {
+//         mcfClass = Thread.currentThread().getContextClassLoader().loadClass(managedConnectionFactoryClass);
+//         mcf = (ManagedConnectionFactory) mcfClass.newInstance();
+//
+//      }catch(ClassNotFoundException e)
+//      {
+//         log.error("Could not find ManagedConnectionFactory class: " + managedConnectionFactoryClass, e);
+//         throw new org.jboss.deployers.spi.DeploymentException("Could not find ManagedConnectionFactory class: "
+//               + managedConnectionFactoryClass);
+//      }
+//      catch (Exception e)
+//      {
+//         log.error("Could not instantiate ManagedConnectionFactory: " + managedConnectionFactoryClass, e);
+//         throw new org.jboss.deployers.spi.DeploymentException("Could not instantiate ManagedConnectionFactory: "
+//               + managedConnectionFactoryClass);
+//      }
+//      
+//      if (cmd != null)
+//      {
+//         // Set the resource adapter properties
+//         setMcfProperties(cmd.getProperties(), false);
+//         // Set the connection definition properties
+//         setMcfProperties(cdmd.getProperties(), true);
+//         
+//         setManagedConnectionFactoryProperties(deployment.getManagedConnectionFactoryProperties());            
+//
+//      }
+//      
+//      if(mcf instanceof ResourceAdapterAssociation)
+//      {
+//         resourceAdapter = (ResourceAdapter) getServer().getAttribute(new ObjectName(entry.getName()), "ResourceAdapter");
+//         ResourceAdapterAssociation ras = (ResourceAdapterAssociation)mcf;
+//         ras.setResourceAdapter(resourceAdapter);
+//         
+//      }
+//      
+//   }
+//   
+   
+   protected void startService() throws Exception
+   {
+      if (mcf != null)
+         throw new DeploymentException("Stop the RARDeployment before restarting it");
+
+      ResourceAdapter resourceAdapter = null;
+      ConnectionDefinitionMetaData cdmd = cmd.getConnectionDefinition(dmd.getConnectionDefinition());
+      
+      try
+      {
+         resourceAdapter = (ResourceAdapter) getServer().getAttribute(oldRarDeployment, "ResourceAdapter");
+
+         if (cdmd == null)
+            throw new DeploymentException("ConnectionDefinition '" + connectionDefinition + "' not found in rar '"
+                  + rarName + "'");
+
+         setManagedConnectionFactoryClass(cdmd.getManagedConnectionFactoryClass());
+         setReauthenticationSupport(cmd.getReauthenticationSupport());
+      }
+      catch (Exception e)
+      {
+         throw new DeploymentException("couldn't get oldRarDeployment! " + oldRarDeployment, e);
+      }
+      
+      try
+      {
+         mcfClass = Thread.currentThread().getContextClassLoader().loadClass(cdmd.getManagedConnectionFactoryClass());
+      }
+      catch (ClassNotFoundException cnfe)
+      {
+         log.error("Could not find ManagedConnectionFactory class: " + managedConnectionFactoryClass, cnfe);
+         throw new DeploymentException("Could not find ManagedConnectionFactory class: "
+               + managedConnectionFactoryClass);
+      }
+      try
+      {
+         mcf = (ManagedConnectionFactory) mcfClass.newInstance();
+      }
+      catch (Exception e)
+      {
+         log.error("Could not instantiate ManagedConnectionFactory: " + managedConnectionFactoryClass, e);
+         throw new DeploymentException("Could not instantiate ManagedConnectionFactory: "
+               + managedConnectionFactoryClass);
+      }
+      
+      if (cmd != null)
+      {
+         // Set the resource adapter properties
+         setMcfProperties(cmd.getProperties(), false);
+         // Set the connection definition properties
+         setMcfProperties(cdmd.getProperties(), true);
+      }
+      
+      setManagedConnectionFactoryProperties(dmd.getManagedConnectionFactoryProperties());
+
+      if (resourceAdapter != null && mcf instanceof ResourceAdapterAssociation)
+      {
+         ResourceAdapterAssociation raa = (ResourceAdapterAssociation) mcf;
+         raa.setResourceAdapter(resourceAdapter);
+      }
+   }
+
+   protected void stopService()
+   {
+      mcf = null;
+      mcfClass = null;
+      cmd = null;
+      dmd = null;
+   }
+
+   public void setManagedConnectionFactoryAttribute(String name, Class clazz, Object value)
+   {
+      setManagedConnectionFactoryAttribute(name, clazz, value, false);
+   }
+   
+   protected void setManagedConnectionFactoryAttribute(String name, Class clazz, Object value, boolean mustExist)
+   {
+      if (name == null || name.length() == 0)
+         throw new IllegalArgumentException("Null or empty attribute name " + name);
+      String setterName = "set" + Character.toUpperCase(name.charAt(0));
+      if (name.length() > 1)
+         setterName = setterName.concat(name.substring(1));
+      Method setter;
+      try
+      {
+         setter = mcfClass.getMethod(setterName, new Class[] {clazz});
+      }
+      catch (NoSuchMethodException nsme)
+      {
+         String error = "The class '" + mcfClass.toString() + "' has no setter for config property '" + name + "'"; 
+         if (mustExist)
+            throw new IllegalArgumentException(error);
+         else
+         {
+            log.trace(error, nsme);
+            return;
+         }
+      }
+      try
+      {
+         setter.invoke(mcf, new Object[] {value});
+         log.debug("set property " + name + " to value " + value);
+      }
+      catch (Exception e)
+      {
+         String error = "Unable to invoke setter method '" + setter + "' " + "on object '" + mcf + "'";
+         if (e instanceof InvocationTargetException)
+            throw new NestedRuntimeException(error, ((InvocationTargetException) e).getCause());
+         else
+            throw new NestedRuntimeException(error, e);
+      }
+      sendNotification(new Notification(MCF_ATTRIBUTE_CHANGED_NOTIFICATION, getServiceName(),
+            getNextNotificationSequenceNumber()));
+   }
+
+   public Object getManagedConnectionFactoryAttribute(String name)
+   {
+      if (name == null || name.length() == 0)
+         throw new IllegalArgumentException("Null or empty attribute name " + name);
+      String getterName = "get" + Character.toUpperCase(name.charAt(0));
+      if (name.length() > 1)
+         getterName = getterName.concat(name.substring(1));
+      Method getter;
+      try
+      {
+         getter = mcfClass.getMethod(getterName, new Class[] {});
+      }
+      catch (NoSuchMethodException e)
+      {
+         String msg = "The class '" + mcfClass + "' has no getter("
+            + getterName + ") for config property '" + name + "'";
+         log.debug(msg, e);
+         throw new IllegalArgumentException(msg);
+      }
+      try
+      {
+         Object value = getter.invoke(mcf, new Object[]{});
+         log.debug("get property " + name + ": value " + value);
+         return value;
+      }
+      catch (Exception e)
+      {
+         String error = "Unable to invoke getter method '" + getter + "' " + "on object '" + mcf + "'";
+         log.debug(error, e);
+         if (e instanceof InvocationTargetException)
+            throw new NestedRuntimeException(error, ((InvocationTargetException) e).getCause());
+         else
+            throw new NestedRuntimeException(error, e);
+      }
+   }
+
+   protected void setMcfProperties(Collection properties, boolean mustExist) throws DeploymentException
+   {
+      for (Iterator i = properties.iterator(); i.hasNext();)
+      {
+         ConfigPropertyMetaData cpmd = (ConfigPropertyMetaData) i.next();
+         String name = cpmd.getName();
+         String type = cpmd.getType();
+         String value = cpmd.getValue();
+         if (name == null || name.length() == 0 || value == null || value.length() == 0)
+         {
+            log.debug("Not setting config property '" + name + "'");
+            continue;
+         }
+         // see if it is a primitive type first
+         Class clazz = Classes.getPrimitiveTypeForName(type);
+         if (clazz == null)
+         {
+            //not primitive, look for it.
+            try
+            {
+               clazz = Thread.currentThread().getContextClassLoader().loadClass(type);
+            }
+            catch (ClassNotFoundException cnfe)
+            {
+               log.warn("Unable to find class '" + type + "' for " + "property '" + name + "' - skipping property.");
+               continue;
+            }
+         }
+         PropertyEditor pe = PropertyEditorManager.findEditor(clazz);
+         if (pe == null)
+         {
+            log.warn("Unable to find a PropertyEditor for class '" + clazz + "' of property '" + name + "' - "
+                  + "skipping property");
+            continue;
+         }
+         log.debug("setting property: " + name + " to value " + value);
+         try
+         {
+            pe.setAsText(value);
+         }
+         catch (IllegalArgumentException iae)
+         {
+            log.warn("Value '" + value + "' is not valid for property '" + name + "' of class '" + clazz
+                  + "' - skipping " + "property");
+            continue;
+         }
+         Object v = pe.getValue();
+         setManagedConnectionFactoryAttribute(name, clazz, v, mustExist);
+      }
+   }
+
+   protected void setMcfProperties(Element mcfProps) throws DeploymentException
+   {
+      if (mcfProps == null)
+         return;
+      // the properties that the deployment descriptor says we need to set
+      NodeList props = mcfProps.getChildNodes();
+      for (int i = 0; i < props.getLength(); i++)
+      {
+         if (props.item(i).getNodeType() == Node.ELEMENT_NODE)
+         {
+            Element prop = (Element) props.item(i);
+            if (prop.getTagName().equals("config-property"))
+            {
+               String name = null;
+               String type = null;
+               String value = null;
+               //Support for more friendly config style
+               //<config-property name="" type=""></config-property>
+               if (prop.hasAttribute("name"))
+               {
+                  name = prop.getAttribute("name");
+                  type = prop.getAttribute("type");
+                  value = MetaData.getElementContent(prop, null, false);
+               }
+               else
+               {
+                  name = MetaData.getElementContent(MetaData.getUniqueChild(prop, "config-property-name"));
+                  type = MetaData.getElementContent(MetaData.getUniqueChild(prop, "config-property-type"));
+                  value = MetaData.getElementContent(MetaData.getOptionalChild(prop, "config-property-value"), null, false);
+               }
+               if (name == null || name.length() == 0 || value == null || value.length() == 0)
+               {
+                  log.debug("Not setting config property '" + name + "'");
+                  continue;
+               }
+               if (type == null || type.length() == 0)
+               {
+                  // Default to String for convenience.
+                  type = "java.lang.String";
+               }
+               // see if it is a primitive type first
+               Class clazz = Classes.getPrimitiveTypeForName(type);
+               if (clazz == null)
+               {
+                  //not primitive, look for it.
+                  try
+                  {
+                     clazz = Thread.currentThread().getContextClassLoader().loadClass(type);
+                  }
+                  catch (ClassNotFoundException cnfe)
+                  {
+                     log.warn("Unable to find class '" + type + "' for " + "property '" + name
+                           + "' - skipping property.");
+                     continue;
+                  }
+               }
+               PropertyEditor pe = PropertyEditorManager.findEditor(clazz);
+               if (pe == null)
+               {
+                  log.warn("Unable to find a PropertyEditor for class '" + clazz + "' of property '" + name + "' - "
+                        + "skipping property");
+                  continue;
+               }
+               log.debug("setting property: " + name + " to value " + value);
+               try
+               {
+                  pe.setAsText(value);
+               }
+               catch (IllegalArgumentException iae)
+               {
+                  log.warn("Value '" + value + "' is not valid for property '" + name + "' of class '" + clazz
+                        + "' - skipping " + "property");
+                  continue;
+               }
+               Object v = pe.getValue();
+               setManagedConnectionFactoryAttribute(name, clazz, v);
+            }
+         }
+      }
+   }
+   
+   protected void setManagedConnectionFactoryProperties(List<ManagedConnectionFactoryPropertyMetaData> properties)
+   {
+      
+      for (ManagedConnectionFactoryPropertyMetaData property : properties)
+      {
+         String name = property.getName();
+         String type = property.getType();
+         String value = property.getValue();
+         
+         if (name == null || name.length() == 0 || value == null || value.length() == 0)
+         {
+            log.debug("Not setting config property '" + name + "'");
+            continue;
+         }
+         
+         if (type == null || type.length() == 0)
+         {
+            // Default to String for convenience.
+            type = "java.lang.String";
+         }
+         Class clazz = Classes.getPrimitiveTypeForName(type);
+         if (clazz == null)
+         {
+            //not primitive, look for it.
+            try
+            {
+               clazz = Thread.currentThread().getContextClassLoader().loadClass(type);
+            }
+            catch (ClassNotFoundException cnfe)
+            {
+               log.warn("Unable to find class '" + type + "' for " + "property '" + name
+                     + "' - skipping property.");
+               continue;
+            }
+         }
+         PropertyEditor pe = PropertyEditorManager.findEditor(clazz);
+         if (pe == null)
+         {
+            log.warn("Unable to find a PropertyEditor for class '" + clazz + "' of property '" + name + "' - "
+                  + "skipping property");
+            continue;
+         }
+         log.debug("setting property: " + name + " to value " + value);
+         try
+         {
+            pe.setAsText(value);
+         }
+         catch (IllegalArgumentException iae)
+         {
+            log.warn("Value '" + value + "' is not valid for property '" + name + "' of class '" + clazz
+                  + "' - skipping " + "property");
+            continue;
+         }
+         Object v = pe.getValue();
+         setManagedConnectionFactoryAttribute(name, clazz, v);
+      
+      }
+      
+      
+   }
+
+   public Object createConnectionFactory() throws ResourceException
+   {
+      return mcf.createConnectionFactory();
+   }
+
+   public Object createConnectionFactory(ConnectionManager cxManager) throws ResourceException
+   {
+      return mcf.createConnectionFactory(cxManager);
+   }
+
+   public ManagedConnection createManagedConnection(javax.security.auth.Subject subject,
+         ConnectionRequestInfo cxRequestInfo) throws ResourceException
+   {
+      return mcf.createManagedConnection(subject, cxRequestInfo);
+   }
+
+   public boolean equals(Object other)
+   {
+      return mcf.equals(other);
+   }
+
+   public java.io.PrintWriter getLogWriter() throws ResourceException
+   {
+      return mcf.getLogWriter();
+   }
+
+   public String toString()
+   {
+      StringBuffer buffer = new StringBuffer();
+      buffer.append(getClass().getName());
+      buffer.append('@');
+      buffer.append(Integer.toHexString(System.identityHashCode(this)));
+      return buffer.toString();
+   }
+   
+   public int hashCode()
+   {
+      return mcf.hashCode();
+   }
+
+   public ManagedConnection matchManagedConnections(java.util.Set connectionSet, javax.security.auth.Subject subject,
+         ConnectionRequestInfo cxRequestInfo) throws ResourceException
+   {
+      return mcf.matchManagedConnections(connectionSet, subject, cxRequestInfo);
+   }
+
+   public void setLogWriter(java.io.PrintWriter out) throws ResourceException
+   {
+      mcf.setLogWriter(out);
+   }
+
+   @Override
+   protected MBeanAttributeInfo[] getInternalAttributeInfo()
+   {
+      List<MBeanAttributeInfo> attributes = new ArrayList<MBeanAttributeInfo>();
+      attributes.add(new MBeanAttributeInfo("RARName", String.class.getName(), "The ResourceAdapter deployment name.", true, false, false));
+      attributes.add(new MBeanAttributeInfo("OldRarDeployment", javax.management.ObjectName.class.getName(), "The Connection Defintion class name.", true, true, false));
+      attributes.add(new MBeanAttributeInfo("ConnectionDefinition", String.class.getName(), "The Connection Defintion class name.", true, false, false));
+      attributes.add(new MBeanAttributeInfo("VendorName", String.class.getName(), "The Vendor Name.", true, false, false));
+      attributes.add(new MBeanAttributeInfo("SpecVersion", String.class.getName(), "The Specification Version.", true, false, false));
+      attributes.add(new MBeanAttributeInfo("EisType", String.class.getName(), "The Enterprise Information System type.", true, false, false));
+      attributes.add(new MBeanAttributeInfo("Version", String.class.getName(), "The ResourceAdapter version.", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ManagedConnectionFactoryClass", String.class.getName(), "The ManagedConnectionFactory class", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ConnectionInterface", String.class.getName(), "The Connection interface", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ConnectionFactoryImpl", String.class.getName(), "The Connection Factory implementation", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ConnectionInterface", String.class.getName(), "The Connection Inteface", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ConnectionImplClass", String.class.getName(), "The Connection Implementation class", true, false, false));
+      attributes.add(new MBeanAttributeInfo("TransactionSupport", String.class.getName(), "The Transaction Support", true, false, false));
+      attributes.add(new MBeanAttributeInfo("AuthenticationMechanismType", String.class.getName(), "The Authentication Mechanism Type", true, false, false));
+      attributes.add(new MBeanAttributeInfo("CredentialInterface", String.class.getName(), "The Credential Interface", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ReauthenticationSupport", Boolean.class.getName(), "The Reauthentication Support", true, false, true));
+      attributes.add(new MBeanAttributeInfo("McfInstance", "javax.resource.spi.ManagedConnectionFactory", "The ManagedConnectionFactory instance", true, false, false));
+      
+      ConnectionDefinitionMetaData cdmd = cmd.getConnectionDefinition(this.connectionDefinition);
+      
+//      Collection mcfProps = cdmd.getProperties();
+//      
+//      for(Iterator iter = mcfProps.iterator(); iter.hasNext();)
+//      {
+//         ConfigPropertyMetaData cpmd = (ConfigPropertyMetaData)iter.next();         
+//         attributes.add(new MBeanAttributeInfo(cpmd.getName(), cpmd.getType(), cpmd.getDescription().getDescription(), true, false, false));         
+//      }
+      MBeanAttributeInfo[] info = attributes.toArray(new MBeanAttributeInfo[attributes.size()]);
+      return info;
+            
+   }
+   
+   @Override
+   protected void setInternalAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException
+   {
+      if("OldRarDeployment".equals(attribute.getName()))
+      {
+         this.oldRarDeployment = (ObjectName)attribute.getValue();
+         
+      }
+   }
+
+   @Override
+   protected MBeanOperationInfo[] getInternalOperationInfo()
+   {
+      // TODO Auto-generated method stub
+      return super.getInternalOperationInfo();
+   }
+   
+   @Override
+   protected Object getInternalAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException
+   {
+      ConnectionDefinitionMetaData cdmd = cmd.getConnectionDefinition(dmd.getConnectionDefinition());
+      
+      Object result = null;
+      
+      if("RARName".equals(attribute))
+      {
+         result = rarName;         
+      
+      }else if("OldRarDeployment".equals(attribute))
+      {
+         result = oldRarDeployment;
+      }
+      else if("ConnectionDefinition".equals(attribute))
+      {
+         result = dmd.getConnectionDefinition();         
+      
+      }else if("VendorName".equals(attribute))
+      {
+         result = cmd.getVendorName();         
+      
+      }else if("SpecVersion".equals(attribute))
+      {
+         result = cmd.getVersion();         
+      
+      }else if("EisType".equals(attribute))
+      {
+         result = cmd.getEISType();               
+      
+      }else if("Version".equals(attribute))
+      {
+         result = cmd.getRAVersion();
+      
+      }else if("ManagedConnectionFactoryClass".equals(attribute))
+      {
+         result = cdmd.getManagedConnectionFactoryClass();         
+
+      }else if("ConnectionInterface".equals(attribute))
+      {
+         result = cdmd.getConnectionInterfaceClass();         
+      }
+      else if("ConnectionFactoryImpl".equals(attribute))
+      {
+         result = cdmd.getConnectionFactoryImplementationClass();
+         
+      }else if("ConnectionImplClass".equals(attribute))
+      {
+         result = cdmd.getConnectionImplementationClass();
+      
+      }
+      else if("TransactionSupport".equals(attribute))
+      {
+         result = dmd.getTransactionSupportMetaData();         
+      
+      }
+      else if("AuthenticationMechanismType".equals(attribute))
+      {
+         result = cmd.getAuthenticationMechanism().getAuthenticationMechansimType();      
+      
+      }
+      else if("CredentialInterface".equals(attribute))
+      {
+         result = cmd.getAuthenticationMechanism().getCredentialInterfaceClass(); 
+      
+      }
+      else if("ReauthenticationSupport".equals(attribute))
+      {
+         result = cmd.getReauthenticationSupport();
+               
+      }
+      else if("McfInstance".equals(attribute))
+      {
+         result = mcf;               
+      }
+      
+      if(result == null)
+      {
+         result = super.getInternalAttribute(attribute);
+      }
+      
+      return result;
+   }
+   
+   protected String getInternalDescription()
+   {
+      String description = null;
+      DescriptionGroupMetaData dgmd = cmd.getDescription();
+      if (dgmd != null)
+         description = dgmd.getDescription();
+      if (description == null)
+         description = "RAR Deployment ";
+      return description;
+   }
+}




More information about the jboss-cvs-commits mailing list