/** Allocates a connection. */ private Object allocateConnection( ManagedConnectionFactory mcf, Subject subject, ConnectionRequestInfo info) throws ResourceException { UserPoolItem userPoolItem = null; try { while (true) { userPoolItem = null; UserTransactionImpl transaction = _tm.getUserTransaction(); if (transaction != null) userPoolItem = allocateShared(transaction, mcf, subject, info); if (userPoolItem == null) userPoolItem = allocatePoolConnection(mcf, subject, info, null); Object userConn; userConn = userPoolItem.allocateUserConnection(); if (userConn != null) { userPoolItem = null; return userConn; } userPoolItem.close(); } } finally { if (userPoolItem != null) userPoolItem.close(); } }