Adam Ringel [https://community.jboss.org/people/adlepoo] created the discussion

"Re: Problem with XARecoveryModule."

To view the discussion, visit: https://community.jboss.org/message/725775#725775

--------------------------------------------------------------
Not only does JBoss 7 not appear ready to us to move our production code to, we 
also don't have the resources to do such a large effort just to fix this one 
problem.
We analyzed the code further and noticed that not only is the getXAResource not 
doing any sanity checking, but the cached instance variable:

private ManagedConnection recoverMC = null;



is not being reinitialized, ever.  You can see the open code used in the 
recovery will never recreate it:


   private ManagedConnection open(Subject s) throws ResourceException
   {
      if (recoverMC == null)
      {
         recoverMC = createManagedConnection(s, null);
            }


      return recoverMC;
   }



You can't even reinitialize it using the stopService lifecycle method from 
JMX.  You can see the close method nulls the passed in reference, but the 
actual instance variable is not nulled!!


   protected void stopService()
   {
      if (recoveryRegistered)
      {
         if (getXAResourceRecoveryRegistry() != null)
         {
            close(recoverMC);


            getXAResourceRecoveryRegistry().removeXAResourceRecovery(this);
            recoveryRegistered = false;


            if (log.isDebugEnabled())
               log.debug("Unregistered for XA Resource Recovery: " + 
dmd.getJndiName());
         }
      }


      mcf = null;
      mcfClass = null;
   }

   private void close(ManagedConnection mc)
   {
      if (mc != null)
      {
         try
         {
            mc.cleanup();
         }
         catch (ResourceException ire)
         {
            if (log.isDebugEnabled())
               log.debug("Error during recovery cleanup", ire);
         }
      }


      if (mc != null)
      {
         try
         {
            mc.destroy();
         }
         catch (ResourceException ire)
         {
            if (log.isDebugEnabled())
               log.debug("Error during recovery destroy", ire);
         }
      }


      mc = null;
   }



When we have a DB crash that cached ManagedConnection is no good anymore but it 
never gets reinitialized.  We would like to put a check in the open method that 
would verify the cached MC is healthy and if it isn't reinitialize it.
Any ideas on how to check the health at that stage?
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/725775#725775]

Start a new discussion in IronJacamar at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2098]

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to