Search in sources :

Example 36 with ResourceHandle

use of com.sun.enterprise.resource.ResourceHandle in project Payara by payara.

the class LazyEnlistableResourceManagerImpl method lazyEnlist.

/**
 * This is called by the PoolManager (in turn by the LazyEnlistableConnectionManager)
 * when a lazy enlistment is sought.
 * @param mc ManagedConnection
 * @throws ResourceException
 */
public void lazyEnlist(ManagedConnection mc) throws ResourceException {
    if (_logger.isLoggable(Level.FINE)) {
        _logger.fine("Entering lazyEnlist");
    }
    // J2EETransactionManager tm = Switch.getSwitch().getTransactionManager();
    JavaEETransactionManager tm = ConnectorRuntime.getRuntime().getTransactionManager();
    Transaction tran = null;
    try {
        tran = tm.getTransaction();
        if (tran == null) {
            if (_logger.isLoggable(Level.FINE)) {
                _logger.fine(" Transaction null - not enlisting ");
            }
            return;
        }
    } catch (SystemException se) {
        ResourceException re = new ResourceException(se.getMessage());
        re.initCause(se);
        throw re;
    }
    // List invList = Switch.getSwitch().getInvocationManager().getAllInvocations();
    List invList = ConnectorRuntime.getRuntime().getInvocationManager().getAllInvocations();
    ResourceHandle h = null;
    for (int j = invList.size(); j > 0; j--) {
        ComponentInvocation inv = (ComponentInvocation) invList.get(j - 1);
        Object comp = inv.getInstance();
        List l = tm.getResourceList(comp, inv);
        ListIterator it = l.listIterator();
        while (it.hasNext()) {
            ResourceHandle hand = (ResourceHandle) it.next();
            ManagedConnection toEnlist = (ManagedConnection) hand.getResource();
            if (mc.equals(toEnlist)) {
                h = hand;
                break;
            }
        }
    }
    // The other case might or might not work
    if (h != null && h.getResourceState().isUnenlisted()) {
        try {
            // Enable the suspended lazyenlistment so as to enlist the resource.
            h.setEnlistmentSuspended(false);
            tm.enlistResource(tran, h);
            // Suspend it back
            h.setEnlistmentSuspended(true);
        } catch (Exception e) {
            // In the rare cases where enlistResource throws exception, we
            // should report the resource to the pool as bad
            PoolManager mgr = ConnectorRuntime.getRuntime().getPoolManager();
            mgr.putbackBadResourceToPool(h);
            _logger.log(Level.WARNING, "poolmgr.err_enlisting_res_in_getconn", h.getResourceSpec().getPoolInfo());
            if (_logger.isLoggable(Level.FINE)) {
                _logger.fine("rm.enlistResource threw Exception. Evicting resource from pool");
            }
            // and rethrow the exception
            throw new ResourceException(e);
        }
    }
}
Also used : ComponentInvocation(org.glassfish.api.invocation.ComponentInvocation) JavaEETransactionManager(com.sun.enterprise.transaction.api.JavaEETransactionManager) ListIterator(java.util.ListIterator) PoolManager(com.sun.enterprise.resource.pool.PoolManager) PoolingException(com.sun.appserv.connectors.internal.api.PoolingException) ResourceException(javax.resource.ResourceException) ResourceHandle(com.sun.enterprise.resource.ResourceHandle) ResourceException(javax.resource.ResourceException) List(java.util.List) ManagedConnection(javax.resource.spi.ManagedConnection)

Aggregations

ResourceHandle (com.sun.enterprise.resource.ResourceHandle)36 PoolingException (com.sun.appserv.connectors.internal.api.PoolingException)11 ResourceException (javax.resource.ResourceException)9 ResourceState (com.sun.enterprise.resource.ResourceState)6 JavaEETransaction (com.sun.enterprise.transaction.api.JavaEETransaction)5 HashSet (java.util.HashSet)5 AssocWithThreadResourceHandle (com.sun.enterprise.resource.AssocWithThreadResourceHandle)4 ManagedConnection (javax.resource.spi.ManagedConnection)3 RetryableUnavailableException (javax.resource.spi.RetryableUnavailableException)3 ResourceSpec (com.sun.enterprise.resource.ResourceSpec)2 JavaEETransactionManager (com.sun.enterprise.transaction.api.JavaEETransactionManager)2 Set (java.util.Set)2 InvocationException (org.glassfish.api.invocation.InvocationException)2 ConnectorRuntimeException (com.sun.appserv.connectors.internal.api.ConnectorRuntimeException)1 XAResourceWrapper (com.sun.enterprise.resource.XAResourceWrapper)1 ConnectionEventListener (com.sun.enterprise.resource.listener.ConnectionEventListener)1 PoolManager (com.sun.enterprise.resource.pool.PoolManager)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 Iterator (java.util.Iterator)1 List (java.util.List)1