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 {
private Repository repository;
private Session adminSession;
+ private final String cacheName = UserDirectory.class.getName();
+
public NodeUserAdmin(TransactionManager transactionManager,
Repository repository) {
this.repository = repository;
}
// 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
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();
+
}
}
}
//
// 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);
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) {
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);
}