FileDocCategorySizeDatePackage
ResourceAdapterFactory.javaAPI DocJBoss 4.2.14223Fri Jul 13 21:01:16 BST 2007org.jboss.resource.deployment

ResourceAdapterFactory

public class ResourceAdapterFactory extends Object
A resource adapter factory
author
Adrian Brock
version
$Revision: 57189 $

Fields Summary
public static final String
DUMMY_RA_CLASS
The dummy resource adapter for old deployment
Constructors Summary
Methods Summary
public static javax.resource.spi.ResourceAdaptercreateResourceAdapter(org.jboss.resource.metadata.ConnectorMetaData cmd)
Create a new resource adapter

param
cmd the connector meta data
throws
Exception for any error


                        
         
   
      // Determine the resource adapter class
      String className = cmd.getRAClass();
      if (className == null)
      {
         if (cmd.getVersion().equals("1.0"))
            className = DUMMY_RA_CLASS;
         else
            throw new IllegalArgumentException("No resource adapter class name specified");
      }
      
      // Load the class
      Class raClass = Thread.currentThread().getContextClassLoader().loadClass(className);
      if (ResourceAdapter.class.isAssignableFrom(raClass) == false)
         throw new DeploymentException(raClass.getName() + " is not a resource adapter class");
      ResourceAdapter result = (ResourceAdapter) raClass.newInstance();
      
      // Apply the properties
      for (Iterator i = cmd.getProperties().iterator(); i.hasNext();)
      {
         ConfigPropertyMetaData cpmd = (ConfigPropertyMetaData) i.next();
         String name = cpmd.getName();
         String type = cpmd.getType();
         String value = cpmd.getValue();
         
         Class clazz = Thread.currentThread().getContextClassLoader().loadClass(type);
         PropertyEditor editor = PropertyEditorManager.findEditor(clazz);
         if (editor == null)
            throw new IllegalArgumentException("No property editor found for property " + cpmd);
         editor.setAsText(value);
         Object object = editor.getValue();
         
         try
         {
            String setter = "set" + Character.toUpperCase(name.charAt(0));
            if (name.length() > 1)
               setter = setter.concat(name.substring(1));
            Method method = raClass.getMethod(setter, new Class[] { clazz });
            method.invoke(result, new Object[] { object });
         }
         catch (InvocationTargetException e)
         {
            DeploymentException.rethrowAsDeploymentException("Error for resource adapter class " + raClass.getName() + " setting property " + cpmd, e.getTargetException());
         }
         catch (Throwable t)
         {
            DeploymentException.rethrowAsDeploymentException("Error for resource adapter class " + raClass.getName() + " accessing property setter " + cpmd, t);
         }
      }
      
      return result;