X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeUserAdmin.java;h=d6d721f6dcc9e33c84a765566b6e128760870e92;hb=0dfcfef53a629cf38bade4f8605c5b7e507c7436;hp=77c8fdc336d1e3bc66851db88a8ee5fc8a754ab7;hpb=1928d251fb3a6ce463efbc3405c5337cc59c9dda;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java index 77c8fdc33..d6d721f6d 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java @@ -48,6 +48,8 @@ import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; import org.osgi.service.useradmin.UserAdmin; +import bitronix.tm.resource.ehcache.EhCacheXAResourceProducer; + /** * Aggregates multiple {@link UserDirectory} and integrates them with this node * system roles. @@ -75,6 +77,8 @@ public class NodeUserAdmin implements UserAdmin, KernelConstants { private Repository repository; private Session adminSession; + private final String cacheName = UserDirectory.class.getName(); + public NodeUserAdmin(TransactionManager transactionManager, Repository repository) { this.repository = repository; @@ -127,7 +131,15 @@ public class NodeUserAdmin implements UserAdmin, KernelConstants { if (userAdmins.get(name) instanceof UserDirectory) { UserDirectory userDirectory = (UserDirectory) userAdmins .get(name); + try { + // FIXME Make it less bitronix dependant + EhCacheXAResourceProducer.unregisterXAResource(cacheName, + userDirectory.getXaResource()); + } catch (Exception e) { + log.error("Cannot unregister resource from Bitronix", e); + } userDirectory.destroy(); + } } } @@ -195,7 +207,7 @@ public class NodeUserAdmin implements UserAdmin, KernelConstants { // // USER ADMIN AGGREGATOR // - public synchronized void addUserAdmin(String baseDn, UserAdmin userAdmin) { + public void addUserAdmin(String baseDn, UserAdmin userAdmin) { if (userAdmins.containsKey(baseDn)) throw new UserDirectoryException( "There is already a user admin for " + baseDn); @@ -205,6 +217,15 @@ public class NodeUserAdmin implements UserAdmin, KernelConstants { throw new UserDirectoryException("Badly formatted base DN " + baseDn, e); } + if (userAdmin instanceof UserDirectory) { + try { + // FIXME Make it less bitronix dependant + EhCacheXAResourceProducer.registerXAResource(cacheName, + ((UserDirectory) userAdmin).getXaResource()); + } catch (Exception e) { + log.error("Cannot register resource to Bitronix", e); + } + } } private UserAdmin findUserAdmin(String name) {