X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FWcXaResource.java;h=a6048fdcaf57e12c24d7bd96e48e51e4c74246f2;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=f438a2a67e2d358c8ea370b32db79345b44bf150;hpb=070656b6431e699a0f6ac8dc1839bce3fc2509ce;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/WcXaResource.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/WcXaResource.java index f438a2a67..a6048fdca 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/WcXaResource.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/WcXaResource.java @@ -25,7 +25,7 @@ class WcXaResource implements XAResource { } @Override - public void start(Xid xid, int flags) throws XAException { + public synchronized void start(Xid xid, int flags) throws XAException { if (editingXid != null) throw new UserDirectoryException("Already editing " + editingXid); UserDirectoryWorkingCopy wc = workingCopies.put(xid, @@ -39,14 +39,13 @@ class WcXaResource implements XAResource { @Override public void end(Xid xid, int flags) throws XAException { checkXid(xid); - } private UserDirectoryWorkingCopy wc(Xid xid) { return workingCopies.get(xid); } - UserDirectoryWorkingCopy wc() { + synchronized UserDirectoryWorkingCopy wc() { if (editingXid == null) return null; UserDirectoryWorkingCopy wc = workingCopies.get(editingXid); @@ -56,13 +55,10 @@ class WcXaResource implements XAResource { return wc; } - private void cleanUp(Xid xid) { - // clean collections + private synchronized void cleanUp(Xid xid) { wc(xid).cleanUp(); workingCopies.remove(xid); - - // clean IDs - // userDirectory.clearEditingTransactionXid(); + editingXid = null; } @Override @@ -75,7 +71,7 @@ class WcXaResource implements XAResource { userDirectory.prepare(wc); } catch (Exception e) { log.error("Cannot prepare " + xid, e); - throw new XAException(XAException.XA_RBOTHER); + throw new XAException(XAException.XAER_RMERR); } return XA_OK; } @@ -92,7 +88,7 @@ class WcXaResource implements XAResource { userDirectory.commit(wc); } catch (Exception e) { log.error("Cannot commit " + xid, e); - throw new XAException(XAException.XA_RBOTHER); + throw new XAException(XAException.XAER_RMERR); } finally { cleanUp(xid); } @@ -105,7 +101,7 @@ class WcXaResource implements XAResource { userDirectory.rollback(wc(xid)); } catch (Exception e) { log.error("Cannot rollback " + xid, e); - throw new XAException(XAException.XA_HEURMIX); + throw new XAException(XAException.XAER_RMERR); } finally { cleanUp(xid); }