]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.core/src/org/argeo/osgi/useradmin/WcXaResource.java
Improve and simplify OSGi Boot
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / osgi / useradmin / WcXaResource.java
index f438a2a67e2d358c8ea370b32db79345b44bf150..a6048fdcaf57e12c24d7bd96e48e51e4c74246f2 100644 (file)
@@ -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);
                }