X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FUserDirectoryWorkingCopy.java;h=0e25bdfa12c441459e4f6bbee26353aa588ec5b2;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=d2bd9ffb611b3328772579ec574a57ea4fc29a5e;hpb=f708c8d4cfc7ca9446b61b9f26244394cb447e4a;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java index d2bd9ffb6..0e25bdfa1 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java @@ -5,52 +5,18 @@ import java.util.Map; import javax.naming.directory.Attributes; import javax.naming.ldap.LdapName; -import javax.transaction.xa.XAException; import javax.transaction.xa.XAResource; -import javax.transaction.xa.Xid; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import bitronix.tm.resource.ehcache.EhCacheXAResourceProducer; /** {@link XAResource} for a user directory being edited. */ -class UserDirectoryWorkingCopy implements XAResource { - private final static Log log = LogFactory - .getLog(UserDirectoryWorkingCopy.class); - private final String cacheName = getClass().getName(); - - private final AbstractUserDirectory userDirectory; - - private Xid xid; - private int transactionTimeout = 0; +class UserDirectoryWorkingCopy { + // private final static Log log = LogFactory + // .getLog(UserDirectoryWorkingCopy.class); private Map newUsers = new HashMap(); private Map modifiedUsers = new HashMap(); private Map deletedUsers = new HashMap(); - public UserDirectoryWorkingCopy(AbstractUserDirectory userDirectory) { - this.userDirectory = userDirectory; - try { - // FIXME Make it less bitronix dependant - EhCacheXAResourceProducer.registerXAResource(cacheName, this); - } catch (Exception e) { - log.error("Cannot register resource to Bitronix", e); - } - } - - @Override - public void start(Xid xid, int flags) throws XAException { - this.xid = xid; - } - - @Override - public void end(Xid xid, int flags) throws XAException { - checkXid(xid); - - } - - private void cleanUp() { + void cleanUp() { // clean collections newUsers.clear(); newUsers = null; @@ -58,98 +24,6 @@ class UserDirectoryWorkingCopy implements XAResource { modifiedUsers = null; deletedUsers.clear(); deletedUsers = null; - - // clean IDs - this.xid = null; - userDirectory.clearEditingTransactionXid(); - - try { - // FIXME Make it less bitronix dependant - EhCacheXAResourceProducer.unregisterXAResource(cacheName, this); - } catch (Exception e) { - log.error("Cannot unregister resource from Bitronix", e); - } - } - - @Override - public int prepare(Xid xid) throws XAException { - checkXid(xid); - if (noModifications()) - return XA_RDONLY; - try { - userDirectory.prepare(this); - } catch (Exception e) { - log.error("Cannot prepare " + xid, e); - throw new XAException(XAException.XA_RBOTHER); - } - return XA_OK; - } - - @Override - public void commit(Xid xid, boolean onePhase) throws XAException { - try { - checkXid(xid); - if (noModifications()) - return; - if (onePhase) - userDirectory.prepare(this); - userDirectory.commit(this); - } catch (Exception e) { - log.error("Cannot commit " + xid, e); - throw new XAException(XAException.XA_RBOTHER); - } finally { - cleanUp(); - } - } - - @Override - public void rollback(Xid xid) throws XAException { - try { - checkXid(xid); - userDirectory.rollback(this); - } catch (Exception e) { - log.error("Cannot rollback " + xid, e); - throw new XAException(XAException.XA_HEURMIX); - } finally { - cleanUp(); - } - } - - @Override - public void forget(Xid xid) throws XAException { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isSameRM(XAResource xares) throws XAException { - return xares == this; - } - - @Override - public Xid[] recover(int flag) throws XAException { - return new Xid[0]; - } - - @Override - public int getTransactionTimeout() throws XAException { - return transactionTimeout; - } - - @Override - public boolean setTransactionTimeout(int seconds) throws XAException { - transactionTimeout = seconds; - return true; - } - - Xid getXid() { - return xid; - } - - private void checkXid(Xid xid) throws XAException { - if (this.xid == null) - throw new XAException(XAException.XAER_OUTSIDE); - if (!this.xid.equals(xid)) - throw new XAException(XAException.XAER_NOTA); } public boolean noModifications() { @@ -181,5 +55,4 @@ class UserDirectoryWorkingCopy implements XAResource { public Map getModifiedUsers() { return modifiedUsers; } - }