diff --git a/bytejta-core/src/main/java/org/bytesoft/bytejta/resource/XATerminatorImpl.java b/bytejta-core/src/main/java/org/bytesoft/bytejta/resource/XATerminatorImpl.java index 524f080..b66e488 100644 --- a/bytejta-core/src/main/java/org/bytesoft/bytejta/resource/XATerminatorImpl.java +++ b/bytejta-core/src/main/java/org/bytesoft/bytejta/resource/XATerminatorImpl.java @@ -1055,14 +1055,17 @@ public boolean delistResource(XAResourceDescriptor descriptor, int flag) throws private boolean delistResource(XAResourceArchive archive, int flag) throws SystemException, RollbackRequiredException { try { Xid branchXid = archive.getXid(); - archive.end(branchXid, flag); switch (flag) { case XAResource.TMSUCCESS: case XAResource.TMFAIL: + archive.end(branchXid, flag); archive.setDelisted(true); break; case XAResource.TMSUSPEND: + archive.end(branchXid, flag); + archive.setDelisted(true); + archive.setSuspended(true); break; default: throw new SystemException(); @@ -1156,6 +1159,8 @@ private boolean enlistResource(XAResourceArchive archive, int flag) throws Syste break; case XAResource.TMRESUME: archive.start(branchXid, flag); + archive.setDelisted(false); + archive.setSuspended(false); break; default: throw new SystemException(); diff --git a/bytejta-core/src/main/java/org/bytesoft/transaction/archive/XAResourceArchive.java b/bytejta-core/src/main/java/org/bytesoft/transaction/archive/XAResourceArchive.java index 4b67d38..8d2f418 100644 --- a/bytejta-core/src/main/java/org/bytesoft/transaction/archive/XAResourceArchive.java +++ b/bytejta-core/src/main/java/org/bytesoft/transaction/archive/XAResourceArchive.java @@ -27,6 +27,7 @@ public class XAResourceArchive implements XAResource { static final Logger logger = LoggerFactory.getLogger(XAResourceArchive.class); public static final int DEFAULT_VOTE = -1; + private boolean suspended; private boolean delisted; private boolean completed; private boolean readonly; @@ -157,6 +158,14 @@ public void setDescriptor(XAResourceDescriptor descriptor) { this.descriptor = descriptor; } + public boolean isSuspended() { + return suspended; + } + + public void setSuspended(boolean suspended) { + this.suspended = suspended; + } + public boolean isDelisted() { return delisted; }