[jboss-cvs] JBossAS SVN: r104379 - in branches/JBPAPP_5_1/connector/src/main/org/jboss/resource: deployers/builder and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 30 14:06:46 EDT 2010


Author: jesper.pedersen
Date: 2010-04-30 14:06:46 -0400 (Fri, 30 Apr 2010)
New Revision: 104379

Modified:
   branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java
   branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/deployers/builder/ManagedConnectionFactoryBuilder.java
Log:
[JBPAPP-3638] XA Resource Recovery (Part 2)

Modified: branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java
===================================================================
--- branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java	2010-04-30 15:12:08 UTC (rev 104378)
+++ branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/connectionmanager/ManagedConnectionFactoryDeployment.java	2010-04-30 18:06:46 UTC (rev 104379)
@@ -57,6 +57,7 @@
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.MetaData;
+import org.jboss.resource.connectionmanager.xa.XAResourceWrapperImpl;
 import org.jboss.resource.metadata.ConfigPropertyMetaData;
 import org.jboss.resource.metadata.ConnectionDefinitionMetaData;
 import org.jboss.resource.metadata.ConnectorMetaData;
@@ -147,6 +148,7 @@
    private String recoverSecurityDomain = null;
    private String recoverUserName = null;
    private String recoverPassword = null;
+   private String connectionManager = null;
    
    /**
     * Default managed constructor for RARDeployment mbeans.
@@ -155,10 +157,13 @@
    {
    }
    
-   public ManagedConnectionFactoryDeployment(ConnectorMetaData cmd, ManagedConnectionFactoryDeploymentMetaData dmd)
+   public ManagedConnectionFactoryDeployment(ConnectorMetaData cmd, 
+                                             ManagedConnectionFactoryDeploymentMetaData dmd,
+                                             String connectionManager)
    {
       this.cmd = cmd;
-      this.dmd = dmd;      
+      this.dmd = dmd;
+      this.connectionManager = connectionManager;
    }
    
    public String getJndiName()
@@ -356,6 +361,11 @@
       this.subjectFactory = sf;
    }
 
+   public String getConnectionManager()
+   {
+      return connectionManager;
+   }
+
    protected void startService() throws Exception
    {
       if (mcf != null)
@@ -420,9 +430,8 @@
       if (dmd instanceof XADataSourceDeploymentMetaData)
       {
          XADataSourceDeploymentMetaData xdsdm = (XADataSourceDeploymentMetaData)dmd;
-         XAResourceRecoveryRegistry xrrr = getXAResourceRecoveryRegistry();
 
-         if (xrrr != null && !xdsdm.isNoRecover())
+         if (getXAResourceRecoveryRegistry() != null && !xdsdm.isNoRecover())
          {
             // If we have an XAResourceRecoveryRegistry and the deployment is XA
             // lets register it for XA Resource Recovery using the "recover" definitions
@@ -490,7 +499,7 @@
             if (log.isDebugEnabled())
                log.debug("RecoverSecurityDomain=" + recoverSecurityDomain);
 
-            xrrr.addXAResourceRecovery(this);
+            getXAResourceRecoveryRegistry().addXAResourceRecovery(this);
             recoveryRegistered = true;
          }
       }
@@ -500,11 +509,9 @@
    {
       if (recoveryRegistered)
       {
-         XAResourceRecoveryRegistry xrrr = getXAResourceRecoveryRegistry();
-
-         if (xrrr != null)
+         if (getXAResourceRecoveryRegistry() != null)
          {
-            xrrr.removeXAResourceRecovery(this);
+            getXAResourceRecoveryRegistry().removeXAResourceRecovery(this);
             recoveryRegistered = false;
 
             if (log.isDebugEnabled())
@@ -544,8 +551,55 @@
 
                XAResource xaResource = mc.getXAResource();
 
-               // TODO: EISName, ...
+               try
+               {
+                  ObjectName on = new ObjectName(connectionManager);
 
+                  boolean wrapXAResource = false;
+                  boolean padXid = false;
+                  Boolean isSameRMOverrideValue = Boolean.FALSE;
+
+                  Boolean b = null;
+
+                  b = (Boolean)getServer().getAttribute(on, "WrapXAResource");
+                  if (b != null)
+                     wrapXAResource = b.booleanValue();
+
+                  b = (Boolean)getServer().getAttribute(on, "PadXid");
+                  if (b != null)
+                     padXid = b.booleanValue();
+
+                  b = (Boolean)getServer().getAttribute(on, "IsSameRMOverrideValue");
+                  if (b != null)
+                     isSameRMOverrideValue = b;
+
+                  if(wrapXAResource)
+                  {
+                     String eisProductName = null;
+                     String eisProductVersion = null;
+
+                     try
+                     {
+                        eisProductName = mc.getMetaData().getEISProductName();
+                        eisProductVersion = mc.getMetaData().getEISProductVersion();
+                     }
+                     catch (ResourceException re)
+                     {
+                        // Ignore
+                     }
+
+                     xaResource = new XAResourceWrapperImpl(xaResource, 
+                                                            padXid,
+                                                            isSameRMOverrideValue,
+                                                            eisProductName,
+                                                            eisProductVersion);
+                  }
+               }
+               catch (Throwable t)
+               {
+                  // Ignore
+               }
+
                if (log.isDebugEnabled())
                   log.debug("Recovery XAResource=" + xaResource + " for " + dmd.getJndiName());
             
@@ -906,6 +960,7 @@
       attributes.add(new MBeanAttributeInfo("McfInstance", "javax.resource.spi.ManagedConnectionFactory", "The ManagedConnectionFactory instance", true, false, false));
       attributes.add(new MBeanAttributeInfo("XAResourceRecoveryRegistry", XAResourceRecoveryRegistry.class.getName(), "The XAResource Recovery Registry", true, false, false));
       attributes.add(new MBeanAttributeInfo("SubjectFactory", SubjectFactory.class.getName(), "The subject factory used for recovery", true, false, false));
+      attributes.add(new MBeanAttributeInfo("ConnectionManager", String.class.getName(), "The connection manager object name", true, false, false));
       
 //      ConnectionDefinitionMetaData cdmd = cmd.getConnectionDefinition(this.connectionDefinition);
       
@@ -1048,6 +1103,10 @@
       {
          result = subjectFactory;               
       }
+      else if("ConnectionManager".equals(attribute))
+      {
+         result = connectionManager;               
+      }
       
       if(result == null)
       {

Modified: branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/deployers/builder/ManagedConnectionFactoryBuilder.java
===================================================================
--- branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/deployers/builder/ManagedConnectionFactoryBuilder.java	2010-04-30 15:12:08 UTC (rev 104378)
+++ branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/deployers/builder/ManagedConnectionFactoryBuilder.java	2010-04-30 18:06:46 UTC (rev 104379)
@@ -28,7 +28,9 @@
 
 import org.jboss.mx.util.ObjectNameFactory;
 import org.jboss.resource.metadata.ConnectorMetaData;
+import org.jboss.resource.metadata.mcf.DataSourceDeploymentMetaData;
 import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentMetaData;
+import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryTransactionSupportMetaData;
 import org.jboss.resource.metadata.repository.DefaultJCAMetaDataRepository;
 import org.jboss.system.metadata.ServiceAttributeMetaData;
 import org.jboss.system.metadata.ServiceConstructorMetaData;
@@ -100,8 +102,10 @@
       ConnectorMetaData md = repository.getConnectorMetaData(mcfmd.getRarName());
       if( md == null )
          throw new IllegalStateException("No ConnectorMetaData found for mdf rarName: "+mcfmd.getRarName());
-      constructor.setParameters(new Object[]{md, mcfmd});
-      constructor.setSignature(new String[]{md.getClass().getName(), ManagedConnectionFactoryDeploymentMetaData.class.getName()});
+      constructor.setParameters(new Object[]{md, mcfmd, getConnectionManager(mcfmd)});
+      constructor.setSignature(new String[]{md.getClass().getName(), 
+                                            ManagedConnectionFactoryDeploymentMetaData.class.getName(),
+                                            String.class.getName()});
       return constructor;       
    }
    
@@ -126,4 +130,44 @@
       return MCF;
    }
  
+   /**
+    * Get the connection manager ObjectName
+    * @param md The metadata
+    * @return The name
+    */
+   private String getConnectionManager(ManagedConnectionFactoryDeploymentMetaData md)
+   {
+      String cmType = "jboss.jca:service=";
+      String jndiName = md.getJndiName();
+      
+      if(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.NONE))
+      {
+         cmType += "NoTxCM,name=" + jndiName;         
+      }
+      else if(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.LOCAL))
+      {
+         if(md instanceof DataSourceDeploymentMetaData)
+         {
+            cmType += "LocalTxCM,name=" + jndiName;               
+         }
+         else
+         {
+            cmType += "TxCM,name=" + jndiName;               
+         }
+
+      }else
+      {
+         if(md instanceof DataSourceDeploymentMetaData)
+         {
+            cmType += "XATxCM,name=" + jndiName;               
+            
+         }
+         else
+         {
+            cmType += "TxCM,name=" + jndiName;               
+         }
+      }
+
+      return cmType;
+   }
 }




More information about the jboss-cvs-commits mailing list