]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java
Add robots.txt allowing all agents
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / NodeUserAdmin.java
index 7408b1c1f91d28977690dcf3e30c73d901e0629d..d6d721f6dcc9e33c84a765566b6e128760870e92 100644 (file)
@@ -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);
                                }