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=efe7c2fa2b0f03ca6dc1386adcdc5764cb790202;hp=7408b1c1f91d28977690dcf3e30c73d901e0629d;hpb=0a7d938324d33848ac7dc4ef4007c73a714171ee;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 7408b1c1f..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,11 +48,13 @@ 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. */ -public class NodeUserAdmin implements UserAdmin { +public class NodeUserAdmin implements UserAdmin, KernelConstants { private final static Log log = LogFactory.getLog(NodeUserAdmin.class); final static LdapName ROLES_BASE; static { @@ -75,6 +77,8 @@ public class NodeUserAdmin implements UserAdmin { private Repository repository; private Session adminSession; + private final String cacheName = UserDirectory.class.getName(); + public NodeUserAdmin(TransactionManager transactionManager, Repository repository) { this.repository = repository; @@ -85,11 +89,11 @@ public class NodeUserAdmin implements UserAdmin { } // DAOs - File nodeBaseDir = new File(getOsgiInstanceDir(), "node"); + File nodeBaseDir = new File(getOsgiInstanceDir(), DIR_NODE); nodeBaseDir.mkdirs(); - String userAdminUri = getFrameworkProp(KernelConstants.USERADMIN_URIS); + String userAdminUri = getFrameworkProp(USERADMIN_URIS); initUserAdmins(userAdminUri, nodeBaseDir); - String nodeRolesUri = getFrameworkProp(KernelConstants.ROLES_URI); + String nodeRolesUri = getFrameworkProp(ROLES_URI); initNodeRoles(nodeRolesUri, nodeBaseDir); // Transaction manager @@ -127,7 +131,15 @@ public class NodeUserAdmin implements UserAdmin { 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 { // // 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 { 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) { @@ -316,7 +337,8 @@ public class NodeUserAdmin implements UserAdmin { if (!nodeRolesFile.exists()) try { FileUtils.copyInputStreamToFile(getClass() - .getResourceAsStream("demo.ldif"), nodeRolesFile); + .getResourceAsStream(baseNodeRoleDn + ".ldif"), + nodeRolesFile); } catch (IOException e) { throw new CmsException("Cannot copy demo resource", e); }