If anyone is still interested, we modified ManagedConnectionFactoryDeployment like so and the issue was resolved:
private synchronized ManagedConnection open(Subject s) throws ResourceException {
if (recoverMC == null) {
recoverMC = createManagedConnection(s, null);
return recoverMC;
}
boolean valid = true;
if(recoverMC instanceof BaseWrapperManagedConnection) {
valid = ((BaseWrapperManagedConnection) recoverMC).checkValid();
}
if(! valid) {
log.info("open - recoverMC is not valid, reopening for deployment: " + toString());
close(recoverMC);
recoverMC = createManagedConnection(s, null);
}
return recoverMC;
}
Also nulled out recoverMC in the stopService method:
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());
}
}
recoverMC = null;
mcf = null;
mcfClass = null;
}