[jboss-cvs] JBossAS SVN: r68446 - in trunk/connector/src/main/org/jboss/resource/deployers: management and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Dec 20 00:27:42 EST 2007


Author: alex.loubyansky at jboss.com
Date: 2007-12-20 00:27:42 -0500 (Thu, 20 Dec 2007)
New Revision: 68446

Added:
   trunk/connector/src/main/org/jboss/resource/deployers/management/XADataSourceDeploymentMetaDataBuilder.java
Modified:
   trunk/connector/src/main/org/jboss/resource/deployers/ManagedConnectionFactoryParserDeployer.java
   trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplate.java
   trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java
Log:
JBAS-4671 represent xa-connection-properties as a Map<String, String> in management interface

Modified: trunk/connector/src/main/org/jboss/resource/deployers/ManagedConnectionFactoryParserDeployer.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/deployers/ManagedConnectionFactoryParserDeployer.java	2007-12-20 04:10:17 UTC (rev 68445)
+++ trunk/connector/src/main/org/jboss/resource/deployers/ManagedConnectionFactoryParserDeployer.java	2007-12-20 05:27:42 UTC (rev 68446)
@@ -35,7 +35,9 @@
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup;
 import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentMetaData;
+import org.jboss.resource.metadata.mcf.XADataSourceDeploymentMetaData;
 import org.jboss.resource.metadata.repository.JCAMetaDataRepository;
+import org.jboss.resource.deployers.management.XADataSourceDeploymentMetaDataBuilder;
 import org.jboss.virtual.VirtualFile;
 import org.jboss.managed.api.ManagedObject;
 import org.jboss.managed.api.factory.ManagedObjectFactory;
@@ -58,6 +60,7 @@
    
    /** The repository */
    private JCAMetaDataRepository repository;
+   private ManagedObjectFactory moFactory;
 
    /**
     * Create a new ManagedConnectionFactoryParserDeployer.
@@ -67,6 +70,9 @@
       super(ManagedConnectionFactoryDeploymentGroup.class);
       setIncludeDeploymentFile(true);
       setBuildManagedObject(true);
+
+      moFactory = ManagedObjectFactoryBuilder.create();
+      moFactory.setBuilder(XADataSourceDeploymentMetaData.class, new XADataSourceDeploymentMetaDataBuilder());
    }
 
    /**
@@ -139,16 +145,17 @@
          ManagedConnectionFactoryDeploymentGroup deployment = unit.getAttachment(getOutput());
          if (deployment != null)
          {
-            ManagedObjectFactory factory = ManagedObjectFactoryBuilder.create();
             if(deployment.getDeployments() != null)
             {
                for(ManagedConnectionFactoryDeploymentMetaData mcf : deployment.getDeployments())
                {
-                  ManagedObject mo = factory.initManagedObject(mcf, null, null);
+                  ManagedObject mo = moFactory.initManagedObject(mcf, null, null);
                   if (mo != null)
+                  {
                      // mcf.getClass().getName(), mo.getName() returns JndiName
                      // which won't work in the DsDataSourceTemplateInfo
                      managedObjects.put(mcf.getClass().getName(), mo);
+                  }
                }
             }
          }

Modified: trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplate.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplate.java	2007-12-20 04:10:17 UTC (rev 68445)
+++ trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplate.java	2007-12-20 05:27:42 UTC (rev 68446)
@@ -91,6 +91,7 @@
 
       ManagedConnectionFactoryDeploymentMetaData mcf;
       ManagedObjectFactory mof = ManagedObjectFactoryBuilder.create();
+      mof.setBuilder(XADataSourceDeploymentMetaData.class, new XADataSourceDeploymentMetaDataBuilder());
       ManagedObject cfMO;
 
       String rootElementName = "datasources";

Modified: trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java	2007-12-20 04:10:17 UTC (rev 68445)
+++ trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java	2007-12-20 05:27:42 UTC (rev 68446)
@@ -23,6 +23,7 @@
 
 import java.util.Map;
 import java.util.List;
+import java.lang.reflect.Type;
 
 import org.jboss.managed.api.Fields;
 import org.jboss.managed.plugins.DefaultFieldsImpl;
@@ -124,11 +125,27 @@
       ManagedObjectImpl mo = new ManagedObjectImpl(XADataSourceDeploymentMetaData.class.getName());
       addDsProperties(mo);
       addManagedProperty("xa-datasource-class", "The xa datasource class name", true, SimpleMetaType.STRING, mo);
-      addManagedProperty("xa-datasource-properties", "The xa datasource properties", false, MetaTypeFactory.getInstance().resolve(List.class), mo);
+
+      Type mapType;
+      try
+      {
+         mapType = getClass().getMethod("compositeValueMap").getGenericReturnType();
+      }
+      catch(NoSuchMethodException e)
+      {
+         throw new IllegalStateException("Failed to find compoditeValueMap method.");
+      }
+      addManagedProperty("xa-datasource-properties", "The xa datasource properties", false, MetaTypeFactory.getInstance().resolve(mapType), mo);
+
       addManagedProperty("url-property", "The URL property", true, SimpleMetaType.STRING, mo);
       addManagedProperty("xa-resource-timeout", "The XA resource timeout", true, SimpleMetaType.INTEGER, new Integer(0), mo);
    }
 
+   public Map<String, String> compositeValueMap()
+   {
+      return null;
+   }
+
    private void createLocalTxDsTemplate()
    {
       ManagedObjectImpl mo = new ManagedObjectImpl(LocalDataSourceDeploymentMetaData.class.getName());

Added: trunk/connector/src/main/org/jboss/resource/deployers/management/XADataSourceDeploymentMetaDataBuilder.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/deployers/management/XADataSourceDeploymentMetaDataBuilder.java	                        (rev 0)
+++ trunk/connector/src/main/org/jboss/resource/deployers/management/XADataSourceDeploymentMetaDataBuilder.java	2007-12-20 05:27:42 UTC (rev 68446)
@@ -0,0 +1,127 @@
+/*
+  * 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.deployers.management;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.List;
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.lang.reflect.Type;
+import java.lang.reflect.UndeclaredThrowableException;
+import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.info.spi.PropertyInfo;
+import org.jboss.managed.api.ManagedProperty;
+import org.jboss.managed.plugins.factory.AbstractManagedObjectFactory;
+import org.jboss.managed.plugins.ManagedObjectImpl;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.MetaValueFactory;
+import org.jboss.resource.metadata.mcf.XADataSourceDeploymentMetaData;
+import org.jboss.resource.metadata.mcf.XAConnectionPropertyMetaData;
+
+/**
+ * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
+ * @version <tt>$Revision: $</tt>
+ */
+public class XADataSourceDeploymentMetaDataBuilder
+   extends AbstractManagedObjectFactory
+{
+   private final Type mapType;
+   private MetaValueFactory metaValueFactory;
+
+   public XADataSourceDeploymentMetaDataBuilder()
+   {
+      metaValueFactory = MetaValueFactory.getInstance();
+
+      try
+      {
+         mapType = getClass().getMethod("compositeValueMap").getGenericReturnType();
+      }
+      catch(NoSuchMethodException e)
+      {
+         throw new IllegalStateException("Failed to find compoditeValueMap method.");
+      }
+   }
+
+   public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, Serializable object)
+   {
+      if("xa-datasource-properties".equals(property.getName()))
+      {
+         MetaValue metaValue = null;
+         XADataSourceDeploymentMetaData ds = (XADataSourceDeploymentMetaData)object;
+         List<XAConnectionPropertyMetaData> list = ds.getXADataSourceProperties();
+         Map<String, String> map = new HashMap<String, String>();
+         if(list != null)
+         {
+            for(XAConnectionPropertyMetaData prop : list)
+            {
+               map.put(prop.getName(), prop.getValue());
+            }
+            metaValue = metaValueFactory.create(map, mapType);
+         }
+         return metaValue;
+      }
+      return super.getValue(beanInfo, property, object);
+   }
+
+   public void setValue(BeanInfo beanInfo, ManagedProperty property, Serializable object, MetaValue value)
+   {
+      if("xa-datasource-properties".equals(property.getName()))
+      {
+         String propName = getPropertyName(property);
+         PropertyInfo propertyInfo = beanInfo.getProperty(propName);
+         Map<String, String> map = (Map<String, String>)metaValueFactory.unwrap(value, mapType);
+
+         List<XAConnectionPropertyMetaData> list = null;
+         if(map != null)
+         {
+            list = new ArrayList<XAConnectionPropertyMetaData>();
+            for(String name : map.keySet())
+            {
+               XAConnectionPropertyMetaData xaProp = new XAConnectionPropertyMetaData();
+               xaProp.setName(name);
+               xaProp.setValue(map.get(name));
+               list.add(xaProp);
+            }
+         }
+         else
+            new Exception("setValue> " + property.getName() + "=" + value).printStackTrace();
+
+         try
+         {
+            propertyInfo.set(object, list);
+         }
+         catch (Throwable t)
+         {
+            throw new UndeclaredThrowableException(t);
+         }
+         System.out.println("setValue> " + property.getName() + "=" + list);
+      }
+      else
+         super.setValue(beanInfo, property, object, value);
+   }
+
+   public Map<String, String> compositeValueMap()
+   {
+      return null;
+   }
+}




More information about the jboss-cvs-commits mailing list