X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeUserAdmin.java;h=2c6fe7de00ac60a618cf38eab1ef966d8f2ff46d;hb=a9703e4b430af19ae04c9982d2393bf1b7504006;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..2c6fe7de0 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) { @@ -269,10 +290,11 @@ public class NodeUserAdmin implements UserAdmin, KernelConstants { if (uri.startsWith("/") || uri.startsWith("./") || uri.startsWith("../")) u = new File(uri).getCanonicalFile().toURI(); - else if (!uri.contains("/")) - u = new File(nodeBaseDir, uri).getCanonicalFile() - .toURI(); - else + else if (!uri.contains("/")) { + u = new URI(nodeBaseDir.toURI()+ uri); + // u = new File(nodeBaseDir, uri).getCanonicalFile() + // .toURI(); + } else throw new CmsException("Cannot interpret " + uri + " as an uri"); } else if (u.getScheme().equals("file")) {