[jboss-jira] [JBoss JIRA] Updated: (JBAS-3997) getManagedConnection retries

Adrian Brock (JIRA) jira-events at jboss.com
Wed Jan 17 06:29:52 EST 2007


     [ http://jira.jboss.com/jira/browse/JBAS-3997?page=all ]

Adrian Brock updated JBAS-3997:
-------------------------------

    Description: 
We should add the ability to retry getManagedConnection()
when there is a resource exception from the pool.

This will allow the ConnectionManagers to be more tolerant of transient failures.

I'd suggest two new attributes on the connection manager, with the suggested defaults:

<allocate-retry>1</allocate-retry>
<allocate-retry-wait-millis>5000</allocate-retry-wait-millis>

I also think the connection manager needs a "shutdown" boolean (maintained by start/stop)
i.e. so don't wait 5 seconds if we get a resource exception caused by the CM/Pool getting
undeployed, e.g. at JBoss shutdown.

This would turn into the following *untested* code in BaseConnectionManager2:

   // Shutdown maintained by start/stop service
   SynchronizedBoolean shutdown = new SynchronizedBoolean(false);
   
   // Number of retries
   int allocationRetries = 1;
   
   // wait time in millis
   long allocationWait = 5000;

   protected ConnectionListener getManagedConnection(Transaction transaction, Subject subject, ConnectionRequestInfo cri)
         throws ResourceException
   {
      ResourceException failure = null;

      if (shutdown.get())
         throw new ResourceException("The connection manager is shutdown " + jndiName);
      
      // First attempt
      try
      {
         return poolingStrategy.getConnection(transaction, subject, cri);
      }
      catch (ResourceException e)
      {
         failure = e;
         
         // Retry?
         for (int i = 0; i < allocationRetries; ++i)
         {

            if (shutdown.get())
               throw new ResourceException("The connection manager is shutdown " + jndiName);

            try
            {
               if (allocationWait != 0)
                  wait(allocationWait);
               return poolingStrategy.getConnection(transaction, subject, cri);
            }
            catch (ResourceException e1)
            {
               failure = e1;
            }
            catch (InterruptedException e1)
            {
               JBossResourceException.rethrowAsResourceException("getManagedConnection retry wait was interrupted " + jndiName, e1);
            }
         }
      }

      // If we get here all retries failed, throw the lastest failure
      throw failure;
   }


  was:
We should add the ability to retry getManagedConnection()
when there is a resource exception from the pool.

This will allow the ConnectionManagers to be more tolerant of transient failures.

I'd suggest two new attributes on the connection manager, with the suggested defaults:

<allocate-retry>1</allocate-retry>
<allocate-retry-wait-millis>5000</allocate-retry-wait-millis>

I also think the connection manager needs a "shutdown" boolean (maintained by start/stop)
i.e. so don't wait 5 seconds if we get a resource exception caused by the CM/Pool getting
undeployed, e.g. at JBoss shutdown.

This would turn into the following *untested* code in BaseConnectionManager2:

   protected ConnectionListener getManagedConnection(Transaction transaction, Subject subject, ConnectionRequestInfo cri)
         throws ResourceException
   {
      ResourceException failure = null;

      if (shutdown.get())
         throw new ResourceException("The connection manager is shutdown " + jndiName);
      
      // First attempt
      try
      {
         return poolingStrategy.getConnection(transaction, subject, cri);
      }
      catch (ResourceException e)
      {
         failure = e;
         
         // Retry?
         for (int i = 0; i < allocationRetries; ++i)
         {

            if (shutdown.get())
               throw new ResourceException("The connection manager is shutdown " + jndiName);

            try
            {
               if (allocationWait != 0)
                  wait(allocationWait);
               return poolingStrategy.getConnection(transaction, subject, cri);
            }
            catch (ResourceException e1)
            {
               failure = e1;
            }
            catch (InterruptedException e1)
            {
               JBossResourceException.rethrowAsResourceException("getManagedConnection retry wait was interrupted " + jndiName, e1);
            }
         }
      }

      // If we get here all retries failed, throw the lastest failure
      throw failure;
   }



> getManagedConnection retries
> ----------------------------
>
>                 Key: JBAS-3997
>                 URL: http://jira.jboss.com/jira/browse/JBAS-3997
>             Project: JBoss Application Server
>          Issue Type: Feature Request
>      Security Level: Public(Everyone can see) 
>          Components: JCA service
>            Reporter: Adrian Brock
>         Assigned To: Weston Price
>
> We should add the ability to retry getManagedConnection()
> when there is a resource exception from the pool.
> This will allow the ConnectionManagers to be more tolerant of transient failures.
> I'd suggest two new attributes on the connection manager, with the suggested defaults:
> <allocate-retry>1</allocate-retry>
> <allocate-retry-wait-millis>5000</allocate-retry-wait-millis>
> I also think the connection manager needs a "shutdown" boolean (maintained by start/stop)
> i.e. so don't wait 5 seconds if we get a resource exception caused by the CM/Pool getting
> undeployed, e.g. at JBoss shutdown.
> This would turn into the following *untested* code in BaseConnectionManager2:
>    // Shutdown maintained by start/stop service
>    SynchronizedBoolean shutdown = new SynchronizedBoolean(false);
>    
>    // Number of retries
>    int allocationRetries = 1;
>    
>    // wait time in millis
>    long allocationWait = 5000;
>    protected ConnectionListener getManagedConnection(Transaction transaction, Subject subject, ConnectionRequestInfo cri)
>          throws ResourceException
>    {
>       ResourceException failure = null;
>       if (shutdown.get())
>          throw new ResourceException("The connection manager is shutdown " + jndiName);
>       
>       // First attempt
>       try
>       {
>          return poolingStrategy.getConnection(transaction, subject, cri);
>       }
>       catch (ResourceException e)
>       {
>          failure = e;
>          
>          // Retry?
>          for (int i = 0; i < allocationRetries; ++i)
>          {
>             if (shutdown.get())
>                throw new ResourceException("The connection manager is shutdown " + jndiName);
>             try
>             {
>                if (allocationWait != 0)
>                   wait(allocationWait);
>                return poolingStrategy.getConnection(transaction, subject, cri);
>             }
>             catch (ResourceException e1)
>             {
>                failure = e1;
>             }
>             catch (InterruptedException e1)
>             {
>                JBossResourceException.rethrowAsResourceException("getManagedConnection retry wait was interrupted " + jndiName, e1);
>             }
>          }
>       }
>       // If we get here all retries failed, throw the lastest failure
>       throw failure;
>    }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list