[jboss-cvs] JBossAS SVN: r111960 - in projects/jboss-jca/trunk: deployers/src/main/java/org/jboss/jca/deployers/fungal and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 8 12:33:05 EDT 2011


Author: jesper.pedersen
Date: 2011-08-08 12:33:05 -0400 (Mon, 08 Aug 2011)
New Revision: 111960

Modified:
   projects/jboss-jca/trunk/common/src/test/resources/ra.xml
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployment.java
Log:
Improvements to the RAActivator

Modified: projects/jboss-jca/trunk/common/src/test/resources/ra.xml
===================================================================
--- projects/jboss-jca/trunk/common/src/test/resources/ra.xml	2011-08-08 16:14:51 UTC (rev 111959)
+++ projects/jboss-jca/trunk/common/src/test/resources/ra.xml	2011-08-08 16:33:05 UTC (rev 111960)
@@ -10,19 +10,24 @@
     <eis-type>TS EIS</eis-type>
     <resourceadapter-version>1.0</resourceadapter-version>
     <resourceadapter>
-        <resourceadapter-class>
-            com.sun.ts.tests.common.connector.whitebox.multianno.MAResourceAdapterImpl
-        </resourceadapter-class>
-        <config-property>
-            <config-property-name>overRide</config-property-name>
-            <config-property-type>java.lang.String</config-property-type>
-            <config-property-value>VAL_FROM_DD</config-property-value>
-        </config-property>
+      <resourceadapter-class>
+        com.sun.ts.tests.common.connector.whitebox.multianno.MAResourceAdapterImpl
+      </resourceadapter-class>
+      <config-property>
+        <config-property-name>overRide</config-property-name>
+        <config-property-type>java.lang.String</config-property-type>
+        <config-property-value>VAL_FROM_DD</config-property-value>
+      </config-property>
       <outbound-resourceadapter>
         <connection-definition>
             <managedconnectionfactory-class>
                 com.sun.ts.tests.common.connector.whitebox.multianno.MAManagedConnectionFactory
             </managedconnectionfactory-class>
+            <config-property>
+              <config-property-name>cp</config-property-name>
+              <config-property-type>java.lang.String</config-property-type>
+              <config-property-value>1</config-property-value>
+            </config-property>
             <connectionfactory-interface>
                 com.sun.ts.tests.common.connector.whitebox.TSConnectionFactory
             </connectionfactory-interface>
@@ -36,6 +41,28 @@
                 com.sun.ts.tests.common.connector.whitebox.TSEISConnection
             </connection-impl-class>
         </connection-definition>
+        <connection-definition>
+            <managedconnectionfactory-class>
+                com.sun.ts.tests.common.connector.whitebox.multianno.MAManagedConnectionFactory2
+            </managedconnectionfactory-class>
+            <config-property>
+              <config-property-name>cp</config-property-name>
+              <config-property-type>java.lang.String</config-property-type>
+              <config-property-value>2</config-property-value>
+            </config-property>
+            <connectionfactory-interface>
+                com.sun.ts.tests.common.connector.whitebox.TSConnectionFactory
+            </connectionfactory-interface>
+            <connectionfactory-impl-class>
+                com.sun.ts.tests.common.connector.whitebox.TSEISDataSource
+            </connectionfactory-impl-class>
+            <connection-interface>
+                com.sun.ts.tests.common.connector.whitebox.TSConnection
+            </connection-interface>
+            <connection-impl-class>
+                com.sun.ts.tests.common.connector.whitebox.TSEISConnection
+            </connection-impl-class>
+        </connection-definition>
         <transaction-support>LocalTransaction</transaction-support>
         <authentication-mechanism>
             <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
@@ -43,5 +70,25 @@
         </authentication-mechanism>
         <reauthentication-support>false</reauthentication-support>
       </outbound-resourceadapter>
+      <adminobject>
+         <adminobject-interface>com.sun.ts.tests.common.connector.whitebox.AdminObject1</adminobject-interface>
+         <adminobject-class>com.sun.ts.tests.common.connector.whitebox.AdminObject1Impl</adminobject-class>
+         <config-property>
+            <config-property-name>acp</config-property-name>
+            <config-property-type>java.lang.String</config-property-type>
+            <config-property-value></config-property-value>
+         </config-property>
+
+      </adminobject>
+      <adminobject>
+         <adminobject-interface>com.sun.ts.tests.common.connector.whitebox.AdminObject2</adminobject-interface>
+         <adminobject-class>com.sun.ts.tests.common.connector.whitebox.AdminObject2Impl</adminobject-class>
+         <config-property>
+            <config-property-name>acp</config-property-name>
+            <config-property-type>java.lang.String</config-property-type>
+            <config-property-value></config-property-value>
+         </config-property>
+
+      </adminobject>
     </resourceadapter>
 </connector>

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java	2011-08-08 16:14:51 UTC (rev 111959)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java	2011-08-08 16:33:05 UTC (rev 111960)
@@ -23,7 +23,10 @@
 package org.jboss.jca.deployers.fungal;
 
 import org.jboss.jca.common.api.metadata.ironjacamar.IronJacamar;
+import org.jboss.jca.common.api.metadata.ra.AdminObject;
+import org.jboss.jca.common.api.metadata.ra.ConnectionDefinition;
 import org.jboss.jca.common.api.metadata.ra.Connector;
+import org.jboss.jca.common.api.metadata.ra.MessageListener;
 import org.jboss.jca.common.api.metadata.ra.ResourceAdapter;
 import org.jboss.jca.common.api.metadata.ra.ResourceAdapter1516;
 import org.jboss.jca.common.api.metadata.ra.ra10.ResourceAdapter10;
@@ -257,7 +260,7 @@
                   {
                      Connector entryXml = mdr.getResourceAdapter(entry);
 
-                     if (raXml.equals(entryXml))
+                     if (sameStructure(raXml, entryXml))
                         configured.add(entry);
                   }
                }
@@ -273,6 +276,152 @@
    }
 
    /**
+    * Check if two connector defines the same structures
+    * @param c1 The first connector
+    * @param c2 The second connector
+    * @return True if same structure; otherwise false
+    */
+   private boolean sameStructure(Connector c1, Connector c2)
+   {
+      if (c1 == null || c1.getResourceadapter() == null)
+         return false;
+
+      if (c2 == null || c2.getResourceadapter() == null)
+         return false;
+
+      ResourceAdapter ra1 = c1.getResourceadapter();
+      ResourceAdapter ra2 = c2.getResourceadapter();
+
+      if (ra1 instanceof ResourceAdapter10 && ra2 instanceof ResourceAdapter10)
+      {
+         ResourceAdapter10 ra110 = (ResourceAdapter10)ra1;
+         ResourceAdapter10 ra210 = (ResourceAdapter10)ra2;
+
+         return ra110.getManagedConnectionFactoryClass().getValue().
+            equals(ra210.getManagedConnectionFactoryClass().getValue());
+      }
+      else if (ra1 instanceof ResourceAdapter1516 && ra2 instanceof ResourceAdapter1516)
+      {
+         ResourceAdapter1516 ra11516 = (ResourceAdapter1516)ra1;
+         ResourceAdapter1516 ra21516 = (ResourceAdapter1516)ra2;
+
+         Set<String> clzRa1 = new HashSet<String>();
+         Set<String> clzMcf1 = new HashSet<String>();
+         Set<String> clzAo1 = new HashSet<String>();
+         Set<String> clzAS1 = new HashSet<String>();
+
+         if (ra11516.getResourceadapterClass() != null)
+            clzRa1.add(ra11516.getResourceadapterClass());
+
+         if (ra11516.getOutboundResourceadapter() != null)
+         {
+            if (ra11516.getOutboundResourceadapter().getConnectionDefinitions() != null)
+            {
+               for (ConnectionDefinition cd : ra11516.getOutboundResourceadapter().getConnectionDefinitions())
+               {
+                  clzMcf1.add(cd.getManagedConnectionFactoryClass().getValue());
+               }
+            }
+         }
+
+         if (ra11516.getAdminObjects() != null)
+         {
+            for (AdminObject ao : ra11516.getAdminObjects())
+            {
+               clzAo1.add(ao.getAdminobjectClass().getValue());
+            }
+         }
+
+         if (ra11516.getInboundResourceadapter() != null &&
+             ra11516.getInboundResourceadapter().getMessageadapter() != null &&
+             ra11516.getInboundResourceadapter().getMessageadapter().getMessagelisteners() != null)
+         {
+            for (MessageListener ml : ra11516.getInboundResourceadapter().getMessageadapter().getMessagelisteners())
+            {
+               clzAS1.add(ml.getActivationspec().getActivationspecClass().getValue());
+            }
+         }
+
+         Set<String> clzRa2 = new HashSet<String>();
+         Set<String> clzMcf2 = new HashSet<String>();
+         Set<String> clzAo2 = new HashSet<String>();
+         Set<String> clzAS2 = new HashSet<String>();
+
+         if (ra21516.getResourceadapterClass() != null)
+            clzRa2.add(ra21516.getResourceadapterClass());
+
+         if (ra21516.getOutboundResourceadapter() != null)
+         {
+            if (ra21516.getOutboundResourceadapter().getConnectionDefinitions() != null)
+            {
+               for (ConnectionDefinition cd : ra21516.getOutboundResourceadapter().getConnectionDefinitions())
+               {
+                  clzMcf2.add(cd.getManagedConnectionFactoryClass().getValue());
+               }
+            }
+         }
+
+         if (ra21516.getAdminObjects() != null)
+         {
+            for (AdminObject ao : ra21516.getAdminObjects())
+            {
+               clzAo2.add(ao.getAdminobjectClass().getValue());
+            }
+         }
+
+         if (ra21516.getInboundResourceadapter() != null &&
+             ra21516.getInboundResourceadapter().getMessageadapter() != null &&
+             ra21516.getInboundResourceadapter().getMessageadapter().getMessagelisteners() != null)
+         {
+            for (MessageListener ml : ra21516.getInboundResourceadapter().getMessageadapter().getMessagelisteners())
+            {
+               clzAS2.add(ml.getActivationspec().getActivationspecClass().getValue());
+            }
+         }
+
+         if (clzRa1.size() != clzRa2.size())
+            return false;
+
+         if (clzMcf1.size() != clzMcf2.size())
+            return false;
+
+         if (clzAo1.size() != clzAo2.size())
+            return false;
+
+         if (clzAS1.size() != clzAS2.size())
+            return false;
+
+         for (String s : clzRa1)
+         {
+            if (!clzRa2.contains(s))
+               return false;
+         }
+
+         for (String s : clzMcf1)
+         {
+            if (!clzMcf2.contains(s))
+               return false;
+         }
+
+         for (String s : clzAo1)
+         {
+            if (!clzAo2.contains(s))
+               return false;
+         }
+
+         for (String s : clzAS1)
+         {
+            if (!clzAS2.contains(s))
+               return false;
+         }
+
+         return true;
+      }
+
+      return false;
+   }
+
+   /**
     * Deploy
     * @param url The url
     * @param parent The parent classloader
@@ -326,6 +475,9 @@
          Connector cmd = metadataRepository.getResourceAdapter(url.toExternalForm());
          IronJacamar ijmd = metadataRepository.getIronJacamar(url.toExternalForm());
 
+         if (cmd != null)
+            cmd = (Connector)cmd.copy();
+
          cmd = (new Merger()).mergeConnectorWithCommonIronJacamar(ijmd, cmd);
 
          CommonDeployment c = createObjectsAndInjectValue(url, deploymentName, root, cl, cmd, ijmd);
@@ -377,14 +529,51 @@
       if (cmd == null)
          return false;
 
-      if (ijmd != null)
-         return true;
-
       ResourceAdapter ra = cmd.getResourceadapter();
 
       if (ra == null)
          return false;
 
+      if (ijmd != null)
+      {
+         if (ra instanceof ResourceAdapter10)
+         {
+            return true;
+         }
+         else
+         {
+            ResourceAdapter1516 ra1516 = (ResourceAdapter1516)ra;
+
+            int mcfs = ijmd.getConnectionDefinitions() != null ? ijmd.getConnectionDefinitions().size() : 0;
+            int aos = ijmd.getAdminObjects() != null ? ijmd.getAdminObjects().size() : 0;
+            boolean inflow = false;
+
+            if (mcfs == 0)
+            {
+               if (ra1516.getOutboundResourceadapter() != null)
+               {
+                  mcfs = ra1516.getOutboundResourceadapter().getConnectionDefinitions() != null ?
+                     ra1516.getOutboundResourceadapter().getConnectionDefinitions().size() : 0;
+               }
+            }
+
+            if (aos == 0)
+            {
+               aos = ra1516.getAdminObjects() != null ? ra1516.getAdminObjects().size() : 0;
+            }
+
+            if (ra1516.getInboundResourceadapter() != null &&
+                ra1516.getInboundResourceadapter().getMessageadapter() != null &&
+                ra1516.getInboundResourceadapter().getMessageadapter().getMessagelisteners() != null &&
+                ra1516.getInboundResourceadapter().getMessageadapter().getMessagelisteners().size() > 0)
+            {
+               inflow = true;
+            }
+
+            return mcfs >= 1 || aos >= 1 || inflow;
+         }
+      }
+
       if (ra instanceof ResourceAdapter10)
       {
          return true;

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java	2011-08-08 16:14:51 UTC (rev 111959)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java	2011-08-08 16:33:05 UTC (rev 111960)
@@ -264,6 +264,9 @@
          IronJacamar ijmd = mdr.getIronJacamar(deployment.toExternalForm());
          File root = mdr.getRoot(deployment.toExternalForm());
 
+         if (cmd != null)
+            cmd = (Connector)cmd.copy();
+
          cmd = (new Merger()).mergeConnectorWithCommonIronJacamar(raxml, cmd);
          // Create classloader
          URL[] urls = getUrls(root);

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployment.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployment.java	2011-08-08 16:14:51 UTC (rev 111959)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployment.java	2011-08-08 16:33:05 UTC (rev 111960)
@@ -25,7 +25,6 @@
 import org.jboss.jca.core.api.management.Connector;
 import org.jboss.jca.core.api.management.ManagementRepository;
 import org.jboss.jca.core.spi.mdr.MetadataRepository;
-import org.jboss.jca.core.spi.mdr.NotFoundException;
 import org.jboss.jca.core.spi.naming.JndiStrategy;
 import org.jboss.jca.core.spi.rar.ResourceAdapterRepository;
 import org.jboss.jca.core.spi.transaction.recovery.XAResourceRecovery;
@@ -45,9 +44,6 @@
  */
 public class RaXmlDeployment extends AbstractFungalDeployment
 {
-   /** The resource adapter deployment */
-   private URL raDeployment;
-
    /**
     * Constructor
     * @param deployment The deployment
@@ -85,54 +81,5 @@
       super(deployment, deploymentName, true, ra, raKey, jndiStrategy, mdr, resourceAdapterRepository,
             cfs, cfJndis, aos, aoJndis, recoveryModules, recoveryRegistry, managementRepository, 
             connector, server, objectNames, cl, log);
-
-      this.raDeployment = raDeployment;
    }
-
-   /**
-    * Stop
-    */
-   @Override
-   public void stop()
-   {
-      super.stop();
-
-      log.debug("Undeploying: " + deployment.toExternalForm());
-
-      if (mdr != null && cfs != null && cfJndis != null)
-      {
-         for (int i = 0; i < cfs.length; i++)
-         {
-            try
-            {
-               String cf = cfs[i].getClass().getName();
-               String jndi = cfJndis[i];
-
-               mdr.unregisterJndiMapping(raDeployment.toExternalForm(), cf, jndi);
-            }
-            catch (NotFoundException nfe)
-            {
-               log.warn("Exception during unregistering deployment", nfe);
-            }
-         }
-      }
-
-      if (mdr != null && aos != null && aoJndis != null)
-      {
-         for (int i = 0; i < aos.length; i++)
-         {
-            try
-            {
-               String ao = aos[i].getClass().getName();
-               String jndi = aoJndis[i];
-
-               mdr.unregisterJndiMapping(raDeployment.toExternalForm(), ao, jndi);
-            }
-            catch (NotFoundException nfe)
-            {
-               log.warn("Exception during unregistering deployment", nfe);
-            }
-         }
-      }
-   }
 }



More information about the jboss-cvs-commits mailing list