You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by cp...@apache.org on 2016/05/05 13:49:21 UTC

[04/15] directory-fortress-core git commit: refactored to not use static initialization blocks

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/GroupDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/GroupDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/GroupDAO.java
index 1bbf25d..7a38421 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/GroupDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/GroupDAO.java
@@ -21,6 +21,9 @@
 package org.apache.directory.fortress.core.impl;
 
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.CursorException;
@@ -34,24 +37,21 @@ import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.SearchScope;
-import org.apache.directory.fortress.core.model.Group;
-import org.apache.directory.fortress.core.model.PropUtil;
-import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.fortress.core.CreateException;
 import org.apache.directory.fortress.core.FinderException;
-import org.apache.directory.fortress.core.model.ObjectFactory;
+import org.apache.directory.fortress.core.GlobalErrIds;
+import org.apache.directory.fortress.core.GlobalIds;
+import org.apache.directory.fortress.core.RemoveException;
 import org.apache.directory.fortress.core.UpdateException;
-import org.apache.directory.fortress.core.util.Config;
 import org.apache.directory.fortress.core.ldap.LdapDataProvider;
+import org.apache.directory.fortress.core.model.Group;
+import org.apache.directory.fortress.core.model.ObjectFactory;
+import org.apache.directory.fortress.core.model.PropUtil;
 import org.apache.directory.fortress.core.model.User;
+import org.apache.directory.fortress.core.util.Config;
+import org.apache.directory.ldap.client.api.LdapConnection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.directory.fortress.core.CreateException;
-import org.apache.directory.fortress.core.GlobalErrIds;
-import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.RemoveException;
-
-import java.util.ArrayList;
-import java.util.List;
 
 
 /**
@@ -65,27 +65,33 @@ final class GroupDAO extends LdapDataProvider
     private static final String CLS_NM = GroupDAO.class.getName();
     private static final Logger LOG = LoggerFactory.getLogger( CLS_NM );
     private static final String GROUP_OBJECT_CLASS = "group.objectclass";
-    private static final String GROUP_OBJECT_CLASS_IMPL = Config.getProperty( GROUP_OBJECT_CLASS );
+    private String GROUP_OBJECT_CLASS_IMPL;
     private static final String GROUP_PROTOCOL_ATTR = "group.protocol";
-    private static final String GROUP_PROTOCOL_ATTR_IMPL = Config.getProperty( GROUP_PROTOCOL_ATTR );
+    private String GROUP_PROTOCOL_ATTR_IMPL;
     private static final String GROUP_PROPERTY_ATTR = "group.properties";
-    private static final String GROUP_PROPERTY_ATTR_IMPL = Config.getProperty( GROUP_PROPERTY_ATTR );
-    private static final String GROUP_OBJ_CLASS[] =
-        { SchemaConstants.TOP_OC, GROUP_OBJECT_CLASS_IMPL };
-    private static final String[] GROUP_ATRS =
-        {
-            SchemaConstants.CN_AT,
-            SchemaConstants.DESCRIPTION_AT,
-            GROUP_PROTOCOL_ATTR_IMPL,
-            GROUP_PROPERTY_ATTR_IMPL,
-            SchemaConstants.MEMBER_AT };
-
+    private String GROUP_PROPERTY_ATTR_IMPL;
+    private String[] GROUP_OBJ_CLASS;
+    private String[] GROUP_ATRS;
 
     /**
      * Package private default constructor.
      */
     GroupDAO()
     {
+        super();
+        GROUP_OBJECT_CLASS_IMPL = Config.getInstance().getProperty( GROUP_OBJECT_CLASS );
+        GROUP_PROTOCOL_ATTR_IMPL = Config.getInstance().getProperty( GROUP_PROTOCOL_ATTR );
+        GROUP_PROPERTY_ATTR_IMPL = Config.getInstance().getProperty( GROUP_PROPERTY_ATTR );
+        
+        GROUP_OBJ_CLASS = new String[]{SchemaConstants.TOP_OC, GROUP_OBJECT_CLASS_IMPL };
+        
+        GROUP_ATRS = new String[]
+            {
+                SchemaConstants.CN_AT,
+                SchemaConstants.DESCRIPTION_AT,
+                GROUP_PROTOCOL_ATTR_IMPL,
+                GROUP_PROPERTY_ATTR_IMPL,
+                SchemaConstants.MEMBER_AT };
     }
 
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/GroupMgrImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/GroupMgrImpl.java b/src/main/java/org/apache/directory/fortress/core/impl/GroupMgrImpl.java
index dce47e2..acd2e67 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/GroupMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/GroupMgrImpl.java
@@ -44,8 +44,12 @@ import org.apache.directory.fortress.core.model.User;
 public class GroupMgrImpl extends Manageable implements GroupMgr, Serializable
 {
     private static final String CLS_NM = GroupMgrImpl.class.getName();
-    private static final GroupP GROUP_P = new GroupP();
+    private GroupP GROUP_P;
 
+    public GroupMgrImpl() {
+    	GROUP_P = new GroupP();
+	}
+    
     /**
      * {@inheritDoc}
      */

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/GroupP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/GroupP.java b/src/main/java/org/apache/directory/fortress/core/impl/GroupP.java
index 680c06d..856d201 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/GroupP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/GroupP.java
@@ -20,18 +20,18 @@
 package org.apache.directory.fortress.core.impl;
 
 
+import java.util.List;
+
 import org.apache.directory.api.util.Strings;
+import org.apache.directory.fortress.core.GlobalErrIds;
+import org.apache.directory.fortress.core.GlobalIds;
+import org.apache.directory.fortress.core.SecurityException;
 import org.apache.directory.fortress.core.ValidationException;
 import org.apache.directory.fortress.core.model.Group;
 import org.apache.directory.fortress.core.model.User;
+import org.apache.directory.fortress.core.util.VUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.directory.fortress.core.GlobalErrIds;
-import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.SecurityException;
-import org.apache.directory.fortress.core.util.VUtil;
-
-import java.util.List;
 
 
 /**
@@ -44,9 +44,12 @@ final class GroupP
 {
     private static final String CLS_NM = GroupP.class.getName();
     private static final Logger LOG = LoggerFactory.getLogger( CLS_NM );
-    private static GroupDAO gDao = new GroupDAO();
-
+    private GroupDAO gDao;
 
+    public GroupP(){
+    	gDao = new GroupDAO();
+    }
+    
     /**
      * Add a group node to the Directory Information Tree (DIT).
      *

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitDAO.java
index 1ae4ccb..c1e4dc1 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitDAO.java
@@ -40,19 +40,19 @@ import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.Strings;
-import org.apache.directory.fortress.core.model.Graphable;
-import org.apache.directory.fortress.core.model.OrgUnit;
-import org.apache.directory.ldap.client.api.LdapConnection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.directory.fortress.core.CreateException;
 import org.apache.directory.fortress.core.FinderException;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.RemoveException;
 import org.apache.directory.fortress.core.UpdateException;
 import org.apache.directory.fortress.core.ldap.LdapDataProvider;
+import org.apache.directory.fortress.core.model.Graphable;
+import org.apache.directory.fortress.core.model.ObjectFactory;
+import org.apache.directory.fortress.core.model.OrgUnit;
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -123,7 +123,10 @@ final class OrgUnitDAO extends LdapDataProvider
             SchemaConstants.OU_AT
     };
 
-
+    public OrgUnitDAO(){
+    	super();
+    }
+    
     /**
      * @param entity
      * @return
@@ -706,13 +709,13 @@ final class OrgUnitDAO extends LdapDataProvider
         {
             entity.setType( OrgUnit.Type.PERM );
             //entity.setParents(PsoUtil.getParents(entity.getName().toUpperCase(), contextId));
-            entity.setChildren( PsoUtil.getChildren( entity.getName().toUpperCase(), contextId ) );
+            entity.setChildren( PsoUtil.getInstance().getChildren( entity.getName().toUpperCase(), contextId ) );
         }
         else if ( dn.contains( getRootDn( contextId, GlobalIds.OSU_ROOT ) ) )
         {
             entity.setType( OrgUnit.Type.USER );
             //entity.setParents(UsoUtil.getParents(entity.getName().toUpperCase(), contextId));
-            entity.setChildren( UsoUtil.getChildren( entity.getName().toUpperCase(), contextId ) );
+            entity.setChildren( UsoUtil.getInstance().getChildren( entity.getName().toUpperCase(), contextId ) );
         }
 
         entity.setParents( getAttributeSet( le, GlobalIds.PARENT_NODES ) );

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitP.java b/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitP.java
index 3c87d7d..4f96316 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/OrgUnitP.java
@@ -26,16 +26,16 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.directory.fortress.core.model.Graphable;
-import org.apache.directory.fortress.core.model.OrgUnit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
 import org.apache.directory.fortress.core.SecurityException;
+import org.apache.directory.fortress.core.model.Graphable;
+import org.apache.directory.fortress.core.model.OrgUnit;
 import org.apache.directory.fortress.core.util.VUtil;
 import org.apache.directory.fortress.core.util.cache.Cache;
 import org.apache.directory.fortress.core.util.cache.CacheMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -70,13 +70,15 @@ public final class OrgUnitP
     private static Cache ouCache;
 
     // DAO class for OU data sets must be initializer before the other statics:
-    private static final OrgUnitDAO oDao = new OrgUnitDAO();
+    private OrgUnitDAO oDao;
     private static final String USER_OUS = "user.ous";
     private static final String PERM_OUS = "perm.ous";
     private static final String FORTRESS_OUS = "fortress.ous";
 
-    static
+    public void init()
     {
+        oDao = new OrgUnitDAO();
+    	
         CacheMgr cacheMgr = CacheMgr.getInstance();
         OrgUnitP.ouCache = cacheMgr.getCache( FORTRESS_OUS );
     }
@@ -87,6 +89,7 @@ public final class OrgUnitP
      */
     OrgUnitP()
     {
+    	init();
     }
 
 
@@ -143,7 +146,7 @@ public final class OrgUnitP
      * @param orgUnit The orgUnit
      * @return The set of associated User
      */
-    private static Set<String> loadUserSet( OrgUnit orgUnit )
+    private Set<String> loadUserSet( OrgUnit orgUnit )
     {
         Set<String> ouUserSet = null;
 
@@ -168,7 +171,7 @@ public final class OrgUnitP
      * @param orgUnit The orgUnit
      * @return The set of associated Perms
      */
-    private static Set<String> loadPermSet( OrgUnit orgUnit )
+    private Set<String> loadPermSet( OrgUnit orgUnit )
     {
         Set<String> ouPermSet = null;
 
@@ -193,7 +196,7 @@ public final class OrgUnitP
      * @param orgUnit will be a Perm OU.
      * @return Set containing the OU mapping to a Perm type and tenant.
      */
-    private static Set<String> getPermSet( OrgUnit orgUnit )
+    private Set<String> getPermSet( OrgUnit orgUnit )
     {
         @SuppressWarnings("unchecked")
         Set<String> permSet = ( Set<String> ) ouCache.get( getKey( PERM_OUS, orgUnit.getContextId() ) );
@@ -212,7 +215,7 @@ public final class OrgUnitP
      * @param orgUnit will be a User OU
      * @return Set containing the OU mapping to the user type and tenant.
      */
-    private static Set<String> getUserSet( OrgUnit orgUnit )
+    private Set<String> getUserSet( OrgUnit orgUnit )
     {
         @SuppressWarnings("unchecked")
         Set<String> userSet = ( Set<String> ) ouCache.get( getKey( USER_OUS, orgUnit.getContextId() ) );

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/OrganizationalUnitDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/OrganizationalUnitDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/OrganizationalUnitDAO.java
index e6bf4ca..7e53530 100644
--- a/src/main/java/org/apache/directory/fortress/core/impl/OrganizationalUnitDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/OrganizationalUnitDAO.java
@@ -27,14 +27,14 @@ import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.fortress.core.CreateException;
+import org.apache.directory.fortress.core.GlobalErrIds;
+import org.apache.directory.fortress.core.GlobalIds;
 import org.apache.directory.fortress.core.RemoveException;
+import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 import org.apache.directory.fortress.core.model.OrganizationalUnit;
 import org.apache.directory.ldap.client.api.LdapConnection;
-import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.directory.fortress.core.GlobalErrIds;
-import org.apache.directory.fortress.core.GlobalIds;
 
 
 /**
@@ -75,6 +75,7 @@ final class OrganizationalUnitDAO extends LdapDataProvider
      */
     OrganizationalUnitDAO()
     {
+    	super();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/PermDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/PermDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/PermDAO.java
index a461aac..bcf7718 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/PermDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/PermDAO.java
@@ -42,23 +42,23 @@ import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueEx
 import org.apache.directory.api.ldap.model.exception.LdapNoSuchAttributeException;
 import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.SearchScope;
+import org.apache.directory.fortress.core.CreateException;
+import org.apache.directory.fortress.core.FinderException;
+import org.apache.directory.fortress.core.GlobalErrIds;
+import org.apache.directory.fortress.core.GlobalIds;
+import org.apache.directory.fortress.core.RemoveException;
+import org.apache.directory.fortress.core.UpdateException;
+import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 import org.apache.directory.fortress.core.model.AdminRole;
+import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.model.OrgUnit;
 import org.apache.directory.fortress.core.model.PermObj;
 import org.apache.directory.fortress.core.model.Permission;
+import org.apache.directory.fortress.core.model.PropUtil;
 import org.apache.directory.fortress.core.model.Role;
 import org.apache.directory.fortress.core.model.Session;
 import org.apache.directory.fortress.core.model.User;
-import org.apache.directory.fortress.core.model.PropUtil;
 import org.apache.directory.ldap.client.api.LdapConnection;
-import org.apache.directory.fortress.core.CreateException;
-import org.apache.directory.fortress.core.FinderException;
-import org.apache.directory.fortress.core.GlobalErrIds;
-import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.model.ObjectFactory;
-import org.apache.directory.fortress.core.RemoveException;
-import org.apache.directory.fortress.core.UpdateException;
-import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 
 
 /**
@@ -203,7 +203,10 @@ final class PermDAO extends LdapDataProvider
             GlobalIds.PROPS
     };
 
-
+    public PermDAO(){
+        super();
+    }
+    
     /**
      * @param entity
      * @return
@@ -917,7 +920,7 @@ final class PermDAO extends LdapDataProvider
         throws FinderException
     {
         // Audit can be turned off here with fortress config param: 'disable.audit=true'
-        if ( GlobalIds.IS_OPENLDAP && ! GlobalIds.IS_AUDIT_DISABLED )
+        if ( GlobalIds.getInstance().IS_OPENLDAP && ! GlobalIds.getInstance().IS_AUDIT_DISABLED )
         {
             try
             {
@@ -985,7 +988,7 @@ final class PermDAO extends LdapDataProvider
             else
             {
                 // RBAC Permission check include's User's inherited roles:
-                Set<String> activatedRoles = RoleUtil.getInheritedRoles( session.getRoles(), permission.getContextId() );
+                Set<String> activatedRoles = RoleUtil.getInstance().getInheritedRoles( session.getRoles(), permission.getContextId() );
 
                 for ( String role : roles )
                 {
@@ -1385,7 +1388,7 @@ final class PermDAO extends LdapDataProvider
                 }
                 else
                 {
-                    roles = RoleUtil.getAscendants( role.getName(), role.getContextId() );
+                    roles = RoleUtil.getInstance().getAscendants( role.getName(), role.getContextId() );
                 }
             }
             if ( CollectionUtils.isNotEmpty( roles ) )
@@ -1461,7 +1464,7 @@ final class PermDAO extends LdapDataProvider
             filterbuf.append( GlobalIds.FILTER_PREFIX );
             filterbuf.append( PERM_OP_OBJECT_CLASS_NAME );
             filterbuf.append( ")(|" );
-            Set<String> roles = RoleUtil.getInheritedRoles( user.getRoles(), user.getContextId() );
+            Set<String> roles = RoleUtil.getInstance().getInheritedRoles( user.getRoles(), user.getContextId() );
 
             if ( CollectionUtils.isNotEmpty( roles ) )
             {
@@ -1594,7 +1597,7 @@ final class PermDAO extends LdapDataProvider
             }
             else
             {
-                roles = RoleUtil.getInheritedRoles( session.getRoles(), session.getContextId() );
+                roles = RoleUtil.getInstance().getInheritedRoles( session.getRoles(), session.getContextId() );
             }
             if ( CollectionUtils.isNotEmpty( roles ) )
             {

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/PermP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/PermP.java b/src/main/java/org/apache/directory/fortress/core/impl/PermP.java
index d806b60..fa39098 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/PermP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/PermP.java
@@ -62,8 +62,8 @@ final class PermP
     /**
      * Description of the Field
      */
-    private static final PermDAO pDao = new PermDAO();
-    private final OrgUnitP orgUnitP = new OrgUnitP();
+    private PermDAO pDao;
+    private OrgUnitP orgUnitP;
 
 
     /**
@@ -71,6 +71,8 @@ final class PermP
      */
     PermP()
     {
+        pDao = new PermDAO();
+        orgUnitP = new OrgUnitP();
     }
 
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/PolicyDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/PolicyDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/PolicyDAO.java
index 2e4c15d..c58c4a5 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/PolicyDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/PolicyDAO.java
@@ -38,16 +38,16 @@ import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.SearchScope;
-import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.fortress.core.CreateException;
 import org.apache.directory.fortress.core.FinderException;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.RemoveException;
 import org.apache.directory.fortress.core.UpdateException;
 import org.apache.directory.fortress.core.ldap.LdapDataProvider;
+import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.model.PwPolicy;
+import org.apache.directory.ldap.client.api.LdapConnection;
 
 
 /**
@@ -143,6 +143,9 @@ final class PolicyDAO extends LdapDataProvider
             SchemaConstants.CN_AT
     };
 
+    public PolicyDAO(){
+        super();
+    }
 
     /**
      * @param entity

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/PolicyP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/PolicyP.java b/src/main/java/org/apache/directory/fortress/core/impl/PolicyP.java
index 827e758..83e82f6 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/PolicyP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/PolicyP.java
@@ -26,15 +26,15 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.directory.fortress.core.model.PwPolicy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
 import org.apache.directory.fortress.core.SecurityException;
 import org.apache.directory.fortress.core.ValidationException;
+import org.apache.directory.fortress.core.model.PwPolicy;
 import org.apache.directory.fortress.core.util.cache.Cache;
 import org.apache.directory.fortress.core.util.cache.CacheMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -63,7 +63,7 @@ final class PolicyP
     private static final int MAX_AGE = 157680000;
 
     // DAO class for ol pw policy data sets must be initialized before the other statics:
-    private static final PolicyDAO olDao = new PolicyDAO();
+    private PolicyDAO olDao;
     // this field is used to synchronize access to the above static data set:
     private static final ReadWriteLock policySetLock = new ReentrantReadWriteLock();
     // static field holds the list of names for all valid pw policies in effect:
@@ -75,8 +75,10 @@ final class PolicyP
     private static final String POLICIES = "policies";
     private static final String FORTRESS_POLICIES = "fortress.policies";
 
-    static
+    private void init()
     {
+    	olDao = new PolicyDAO();
+    	
         CacheMgr cacheMgr = CacheMgr.getInstance();
         PolicyP.policyCache = cacheMgr.getCache( FORTRESS_POLICIES );
     }
@@ -87,6 +89,7 @@ final class PolicyP
      */
     PolicyP()
     {
+    	init();
     }
 
 
@@ -371,7 +374,7 @@ final class PolicyP
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of unique names.
      */
-    private static Set<String> loadPolicySet( String contextId )
+    private Set<String> loadPolicySet( String contextId )
     {
         Set<String> policySet = null;
 
@@ -396,7 +399,7 @@ final class PolicyP
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return set containing list of policy names active.
      */
-    private static Set<String> getPolicySet( String contextId )
+    private Set<String> getPolicySet( String contextId )
     {
         try
         {

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/PsoUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/PsoUtil.java b/src/main/java/org/apache/directory/fortress/core/impl/PsoUtil.java
index 6145818..6c4618b 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/PsoUtil.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/PsoUtil.java
@@ -63,19 +63,38 @@ import org.slf4j.LoggerFactory;
  */
 final class PsoUtil
 {
-    private static final Cache psoCache;
-    private static OrgUnitP orgUnitP = new OrgUnitP();
+    private Cache psoCache;
+    private OrgUnitP orgUnitP;
     private static final String CLS_NM = PsoUtil.class.getName();
     private static final Logger LOG = LoggerFactory.getLogger( CLS_NM );
 
+    private static volatile PsoUtil INSTANCE = null; 
+
+    public static PsoUtil getInstance() {
+        if(INSTANCE == null) {
+            synchronized (PsoUtil.class) {
+                if(INSTANCE == null){
+        	        INSTANCE = new PsoUtil();
+                }
+            }
+        }
+        return INSTANCE;
+    }
+    
+    public PsoUtil(){
+        init();
+    }
+    
     /**
      * Initialize the Perm OU hierarchies.  This will read the {@link org.apache.directory.fortress.core.model.Hier} data set from ldap and load into
      * the JGraphT simple digraph that referenced statically within this class.
      */
-    static
+    private void init()
     {
+        orgUnitP = new OrgUnitP();
+    	
         CacheMgr cacheMgr = CacheMgr.getInstance();
-        psoCache = cacheMgr.getCache( "fortress.pso" );
+        psoCache = cacheMgr.getCache( "fortress.pso" );                
     }
 
 
@@ -86,7 +105,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of names of descendants {@link org.apache.directory.fortress.core.model.OrgUnit}s of given parent.
      */
-    static Set<String> getDescendants( String name, String contextId )
+    Set<String> getDescendants( String name, String contextId )
     {
         return HierUtil.getDescendants( name, getGraph( contextId ) );
     }
@@ -99,7 +118,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of ou names that are ascendants of given child.
      */
-    static Set<String> getAscendants( String name, String contextId )
+    Set<String> getAscendants( String name, String contextId )
     {
         return HierUtil.getAscendants( name, getGraph( contextId ) );
     }
@@ -112,7 +131,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of names of children {@link org.apache.directory.fortress.core.model.OrgUnit}s of given parent.
      */
-    public static Set<String> getChildren( String name, String contextId )
+    public Set<String> getChildren( String name, String contextId )
     {
         return HierUtil.getChildren( name, getGraph( contextId ) );
     }
@@ -125,7 +144,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of ou names that are parents of given child.
      */
-    static Set<String> getParents( String name, String contextId )
+    Set<String> getParents( String name, String contextId )
     {
         return HierUtil.getParents( name, getGraph( contextId ) );
     }
@@ -138,7 +157,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return int value contains the number of children of a given parent ou.
      */
-    static int numChildren( String name, String contextId )
+    int numChildren( String name, String contextId )
     {
         return HierUtil.numChildren( name, getGraph( contextId ) );
     }
@@ -151,7 +170,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return contains Set of all descendants.
      */
-    static Set<String> getInherited( List<OrgUnit> ous, String contextId )
+    Set<String> getInherited( List<OrgUnit> ous, String contextId )
     {
         // create Set with case insensitive comparator:
         Set<String> iOUs = new TreeSet<>( String.CASE_INSENSITIVE_ORDER );
@@ -190,7 +209,7 @@ final class PsoUtil
      * @throws org.apache.directory.fortress.core.ValidationException
      *          in the event it fails one of the 3 checks.
      */
-    static void validateRelationship( OrgUnit child, OrgUnit parent, boolean mustExist )
+    void validateRelationship( OrgUnit child, OrgUnit parent, boolean mustExist )
         throws ValidationException
     {
         HierUtil.validateRelationship( getGraph( child.getContextId() ), child.getName(), parent.getName(), mustExist );
@@ -206,7 +225,7 @@ final class PsoUtil
      * @param op   used to pass the ldap op {@link org.apache.directory.fortress.core.model.Hier.Op#ADD}, {@link org.apache.directory.fortress.core.model.Hier.Op#MOD}, {@link org.apache.directory.fortress.core.model.Hier.Op#REM}
      * @throws org.apache.directory.fortress.core.SecurityException in the event of a system error.
      */
-    static void updateHier( String contextId, Relationship relationship, Hier.Op op ) throws SecurityException
+    void updateHier( String contextId, Relationship relationship, Hier.Op op ) throws SecurityException
     {
         HierUtil.updateHier( getGraph( contextId ), relationship, op );
     }
@@ -219,7 +238,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return handle to simple digraph containing perm ou hierarchies.
      */
-    private static synchronized SimpleDirectedGraph<String, Relationship> loadGraph( String contextId )
+    private synchronized SimpleDirectedGraph<String, Relationship> loadGraph( String contextId )
     {
         Hier inHier = new Hier( Hier.Type.ROLE );
         inHier.setContextId( contextId );
@@ -252,7 +271,7 @@ final class PsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return handle to simple digraph containing perm ou hierarchies.
      */
-    private static SimpleDirectedGraph<String, Relationship> getGraph( String contextId )
+    private SimpleDirectedGraph<String, Relationship> getGraph( String contextId )
     {
         String key = getKey( contextId );        
         LOG.debug("Getting graph for key " + contextId);

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/PwPolicyMgrImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/PwPolicyMgrImpl.java b/src/main/java/org/apache/directory/fortress/core/impl/PwPolicyMgrImpl.java
index 0c7746a..b936a7a 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/PwPolicyMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/PwPolicyMgrImpl.java
@@ -19,6 +19,8 @@
  */
 package org.apache.directory.fortress.core.impl;
 
+import java.util.List;
+
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.PwPolicyMgr;
 import org.apache.directory.fortress.core.SecurityException;
@@ -26,8 +28,6 @@ import org.apache.directory.fortress.core.model.PwPolicy;
 import org.apache.directory.fortress.core.model.User;
 import org.apache.directory.fortress.core.util.VUtil;
 
-import java.util.List;
-
 /**
  * This class is used to perform administrative and review functions on the PWPOLICIES and USERS data sets.
  * <h3></h3>
@@ -66,9 +66,14 @@ import java.util.List;
 public class PwPolicyMgrImpl  extends Manageable implements PwPolicyMgr
 {
     private static final String CLS_NM = PwPolicyMgrImpl.class.getName();
-    private static final PolicyP policyP = new PolicyP();
-    private static final UserP userP = new UserP();
-
+    private PolicyP policyP;
+    private UserP userP;
+
+    public PwPolicyMgrImpl() {
+    	policyP = new PolicyP();
+    	userP = new UserP();
+	}
+    
     /**
      * {@inheritDoc}
      */

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/ReviewMgrImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/ReviewMgrImpl.java b/src/main/java/org/apache/directory/fortress/core/impl/ReviewMgrImpl.java
index 88882e6..1600d17 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/ReviewMgrImpl.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/ReviewMgrImpl.java
@@ -80,11 +80,18 @@ import org.apache.directory.fortress.core.util.VUtil;
 public class ReviewMgrImpl extends Manageable implements ReviewMgr, Serializable
 {
     private static final String CLS_NM = ReviewMgrImpl.class.getName();
-    private static final UserP userP = new UserP();
-    private static final RoleP roleP = new RoleP();
-    private static final PermP permP = new PermP();
-    private static final SdP ssdP = new SdP();
-
+    private UserP userP = new UserP();
+    private RoleP roleP = new RoleP();
+    private PermP permP = new PermP();
+    private SdP ssdP = new SdP();
+
+    public ReviewMgrImpl() {
+        userP = new UserP();
+        roleP = new RoleP();
+        permP = new PermP();
+        ssdP = new SdP();
+	}
+    
     /**
      * {@inheritDoc}
      */
@@ -376,7 +383,7 @@ public class ReviewMgrImpl extends Manageable implements ReviewMgr, Serializable
         Set<String> iRoles = null;
         if (CollectionUtils.isNotEmpty( roles ))
         {
-            iRoles = RoleUtil.getInheritedRoles( roles, this.contextId );
+            iRoles = RoleUtil.getInstance().getInheritedRoles( roles, this.contextId );
         }
         return iRoles;
     }
@@ -529,7 +536,7 @@ public class ReviewMgrImpl extends Manageable implements ReviewMgr, Serializable
         if (assignedRoles != null)
         {
             // Get the descendant roles of all assigned roles from jgrapht hierarchical roles data set:
-            authorizedRoles = RoleUtil.getDescendantRoles(assignedRoles, this.contextId);
+            authorizedRoles = RoleUtil.getInstance().getDescendantRoles(assignedRoles, this.contextId);
         }
         return authorizedRoles;
     }

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/RoleDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/RoleDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/RoleDAO.java
index d942ad5..e21e916 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/RoleDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/RoleDAO.java
@@ -36,18 +36,18 @@ import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.SearchScope;
-import org.apache.directory.fortress.core.model.ConstraintUtil;
-import org.apache.directory.fortress.core.model.Graphable;
-import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.fortress.core.CreateException;
 import org.apache.directory.fortress.core.FinderException;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.RemoveException;
 import org.apache.directory.fortress.core.UpdateException;
 import org.apache.directory.fortress.core.ldap.LdapDataProvider;
+import org.apache.directory.fortress.core.model.ConstraintUtil;
+import org.apache.directory.fortress.core.model.Graphable;
+import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.model.Role;
+import org.apache.directory.ldap.client.api.LdapConnection;
 
 
 /**
@@ -130,7 +130,10 @@ final class RoleDAO extends LdapDataProvider
             GlobalIds.FT_MODIFIER_AUX_OBJECT_CLASS_NAME
     };
 
-
+    public RoleDAO() {
+        super();
+	}
+    
     /**
      * @param entity
      * @return
@@ -648,7 +651,7 @@ final class RoleDAO extends LdapDataProvider
         entity.setDescription( getAttribute( le, SchemaConstants.DESCRIPTION_AT ) );
         entity.setOccupants( getAttributes( le, SchemaConstants.ROLE_OCCUPANT_AT ) );
         //entity.setParents(RoleUtil.getParents(entity.getName().toUpperCase(), contextId));
-        entity.setChildren( RoleUtil.getChildren( entity.getName().toUpperCase(), contextId ) );
+        entity.setChildren( RoleUtil.getInstance().getChildren( entity.getName().toUpperCase(), contextId ) );
         entity.setParents( getAttributeSet( le, GlobalIds.PARENT_NODES ) );
         unloadTemporal( le, entity );
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/RoleP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/RoleP.java b/src/main/java/org/apache/directory/fortress/core/impl/RoleP.java
index fccc075..da01dbb 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/RoleP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/RoleP.java
@@ -56,7 +56,7 @@ import org.apache.directory.fortress.core.util.VUtil;
  */
 final class RoleP
 {
-    private static RoleDAO rDao = new RoleDAO();
+    private RoleDAO rDao;
     private static final ConstraintValidator constraintValidator = VUtil.getConstraintValidator();
 
 
@@ -65,6 +65,7 @@ final class RoleP
      */
     RoleP()
     {
+    	rDao = new RoleDAO();
     }
 
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/RoleUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/RoleUtil.java b/src/main/java/org/apache/directory/fortress/core/impl/RoleUtil.java
index cf7052c..f966f3b 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/RoleUtil.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/RoleUtil.java
@@ -64,17 +64,36 @@ import org.slf4j.LoggerFactory;
  */
 final class RoleUtil implements ParentUtil
 {
-    private static final Cache roleCache;
-    private static final RoleP roleP = new RoleP();
+    private Cache roleCache;
+    private RoleP roleP = new RoleP();
     private static final String CLS_NM = RoleUtil.class.getName();
     private static final Logger LOG = LoggerFactory.getLogger( CLS_NM );
 
+    private static volatile RoleUtil INSTANCE = null; 
+
+    public static RoleUtil getInstance() {
+        if(INSTANCE == null) {
+            synchronized (RoleUtil.class) {
+                if(INSTANCE == null){
+        	        INSTANCE = new RoleUtil();
+                }
+            }
+        }
+        return INSTANCE;
+    }
+    
+    public RoleUtil(){
+        init();
+    }
+    
     /**
      * Initialize the Role hierarchies.  This will read the {@link org.apache.directory.fortress.core.model.Hier} data set from ldap and load into
      * the JGraphT simple digraph that referenced statically within this class.
      */
-    static
+    private void init()
     {
+    	roleP = new RoleP();
+    	
         CacheMgr cacheMgr = CacheMgr.getInstance();
         roleCache = cacheMgr.getCache( "fortress.roles" );
     }
@@ -97,7 +116,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return boolean result, 'true' indicates parent/child relationship exists.
      */
-    static boolean isParent( String child, String parent, String contextId )
+    boolean isParent( String child, String parent, String contextId )
     {
         boolean result = false;
         Set<String> parents = getAscendants( child, contextId );
@@ -116,7 +135,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of Role names are descendants {@link org.apache.directory.fortress.core.model.Role}s of given parent.
      */
-    static Set<String> getDescendants( String roleName, String contextId )
+    Set<String> getDescendants( String roleName, String contextId )
     {
         return HierUtil.getDescendants( roleName.toUpperCase(), getGraph( contextId ) );
     }
@@ -129,7 +148,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of Role names are children {@link org.apache.directory.fortress.core.model.Role}s of given parent.
      */
-    static Set<String> getChildren( String roleName, String contextId )
+    Set<String> getChildren( String roleName, String contextId )
     {
         return HierUtil.getChildren( roleName.toUpperCase(), getGraph( contextId ) );
     }
@@ -142,7 +161,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of Role names that are ascendants of given child.
      */
-    static Set<String> getAscendants( String roleName, String contextId )
+    Set<String> getAscendants( String roleName, String contextId )
     {
         return HierUtil.getAscendants( roleName.toUpperCase(), getGraph( contextId ) );
     }
@@ -155,7 +174,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of Role names that are parents of given child.
      */
-    static Set<String> getParents( String roleName, String contextId )
+    Set<String> getParents( String roleName, String contextId )
     {
         return HierUtil.getParents( roleName.toUpperCase(), getGraph( contextId ) );
     }
@@ -181,7 +200,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return int value contains the number of children of a given parent nRole.
      */
-    static int numChildren( String roleName, String contextId )
+    int numChildren( String roleName, String contextId )
     {
         return HierUtil.numChildren( roleName.toUpperCase(), getGraph( contextId ) );
     }
@@ -195,7 +214,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return contains Set of all authorized RBAC Roles for a given User.
      */
-    static Set<String> getInheritedRoles( List<UserRole> uRoles, String contextId )
+    Set<String> getInheritedRoles( List<UserRole> uRoles, String contextId )
     {
         // create Set with case insensitive comparator:
         Set<String> iRoles = new TreeSet<>( String.CASE_INSENSITIVE_ORDER );
@@ -222,7 +241,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return set of ascendant roles associated with this entry.
      */
-    static Set<String> getAscendantRoles( List<String> roles, String contextId )
+    Set<String> getAscendantRoles( List<String> roles, String contextId )
     {
         // create Set with case insensitive comparator:
         Set<String> iRoles = new TreeSet<>( String.CASE_INSENSITIVE_ORDER );
@@ -248,7 +267,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return set of descendant roles associated with this entry.
      */
-    static Set<String> getDescendantRoles( Set<String> roles, String contextId )
+    Set<String> getDescendantRoles( Set<String> roles, String contextId )
     {
         // create Set with case insensitive comparator:
         Set<String> iRoles = new TreeSet<>( String.CASE_INSENSITIVE_ORDER );
@@ -277,7 +296,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return Set of names that are parents of given child.
      */
-    static Set<String> getAscendants( String childName, String parentName, boolean isInclusive, String contextId )
+    Set<String> getAscendants( String childName, String parentName, boolean isInclusive, String contextId )
     {
         return HierUtil.getAscendants( childName, parentName, isInclusive, getGraph( contextId ) );
     }
@@ -300,7 +319,7 @@ final class RoleUtil implements ParentUtil
      * @throws org.apache.directory.fortress.core.ValidationException
      *          in the event it fails one of the 3 checks.
      */
-    static void validateRelationship( Role childRole, Role parentRole, boolean mustExist )
+    void validateRelationship( Role childRole, Role parentRole, boolean mustExist )
         throws ValidationException
     {
         HierUtil.validateRelationship( getGraph( childRole.getContextId() ), childRole.getName(), parentRole.getName(),
@@ -317,7 +336,7 @@ final class RoleUtil implements ParentUtil
      * @param op   used to pass the ldap op {@link org.apache.directory.fortress.core.model.Hier.Op#ADD}, {@link org.apache.directory.fortress.core.model.Hier.Op#MOD}, {@link org.apache.directory.fortress.core.model.Hier.Op#REM}
      * @throws org.apache.directory.fortress.core.SecurityException in the event of a system error.
      */
-    static void updateHier( String contextId, Relationship relationship, Hier.Op op ) throws SecurityException
+    void updateHier( String contextId, Relationship relationship, Hier.Op op ) throws SecurityException
     {
         HierUtil.updateHier( getGraph( contextId ), relationship, op );
     }
@@ -330,7 +349,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return handle to simple digraph containing role hierarchies.
      */
-    private static synchronized SimpleDirectedGraph<String, Relationship> loadGraph( String contextId )
+    private synchronized SimpleDirectedGraph<String, Relationship> loadGraph( String contextId )
     {
         Hier inHier = new Hier( Hier.Type.ROLE );
         inHier.setContextId( contextId );
@@ -361,7 +380,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return key to this tenant's cache entry.
      */
-    private static String getKey( String contextId )
+    private String getKey( String contextId )
     {
         String key = HierUtil.Type.ROLE.toString();
 
@@ -379,7 +398,7 @@ final class RoleUtil implements ParentUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return handle to simple digraph containing role hierarchies.
      */
-    private static SimpleDirectedGraph<String, Relationship> getGraph( String contextId )
+    private SimpleDirectedGraph<String, Relationship> getGraph( String contextId )
     {
         String key = getKey( contextId );        
         LOG.debug("Getting graph for key " + contextId);

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/SDUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/SDUtil.java b/src/main/java/org/apache/directory/fortress/core/impl/SDUtil.java
index 7986f68..635e62b 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/SDUtil.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/SDUtil.java
@@ -19,33 +19,33 @@
  */
 package org.apache.directory.fortress.core.impl;
 
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import net.sf.ehcache.search.Attribute;
+import net.sf.ehcache.search.Query;
+import net.sf.ehcache.search.Result;
+import net.sf.ehcache.search.Results;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
+import org.apache.directory.fortress.core.ReviewMgr;
 import org.apache.directory.fortress.core.ReviewMgrFactory;
 import org.apache.directory.fortress.core.SecurityException;
-import org.apache.directory.fortress.core.ReviewMgr;
-import org.apache.directory.fortress.core.util.Config;
+import org.apache.directory.fortress.core.model.Constraint;
 import org.apache.directory.fortress.core.model.Role;
 import org.apache.directory.fortress.core.model.SDSet;
 import org.apache.directory.fortress.core.model.Session;
 import org.apache.directory.fortress.core.model.User;
 import org.apache.directory.fortress.core.model.UserRole;
+import org.apache.directory.fortress.core.util.Config;
 import org.apache.directory.fortress.core.util.cache.Cache;
 import org.apache.directory.fortress.core.util.cache.CacheMgr;
 import org.apache.directory.fortress.core.util.cache.DsdCacheEntry;
-import org.apache.directory.fortress.core.model.Constraint;
-
-import net.sf.ehcache.search.Attribute;
-import net.sf.ehcache.search.Query;
-import net.sf.ehcache.search.Result;
-import net.sf.ehcache.search.Results;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
 /**
  * This utilty provides functionality necessary for SSD and DSD processing and cannot be called by components outside fortress.
@@ -58,18 +58,33 @@ import java.util.Set;
  */
 final class SDUtil
 {
-    private static final Cache m_dsdCache;
+    private Cache m_dsdCache;
     private static final String FORTRESS_DSDS = "fortress.dsd";
-    private static final Cache m_ssdCache;
+    private Cache m_ssdCache;
     private static final String FORTRESS_SSDS = "fortress.ssd";
-    private static final SdP sp = new SdP();
+    private SdP sp;
     private static final String IS_DSD_CACHE_DISABLED_PARM = "enable.dsd.cache";
     private static final String DSD_NAME = "name";
     private static final String EMPTY_ELEMENT = "empty";
     private static final String CONTEXT_ID = "contextId";
 
-    static
+    private static volatile SDUtil INSTANCE = null; 
+
+    public static SDUtil getInstance() {
+        if(INSTANCE == null) {
+            synchronized (SDUtil.class) {
+                if(INSTANCE == null){
+        	        INSTANCE = new SDUtil();
+                }
+            }
+        }
+        return INSTANCE;
+    }
+    
+    private void init()
     {
+        sp = new SdP();
+    	
         // Get a reference to the CacheManager Singleton object:
         CacheMgr cacheMgr = CacheMgr.getInstance();
         // This cache contains a wrapper entry for DSD and is searchable by both DSD and Role name:
@@ -82,8 +97,9 @@ final class SDUtil
      * Private constructor
      *
      */
-    private SDUtil()
+    private SDUtil()    
     {
+        init();
     }
 
     /**
@@ -94,7 +110,7 @@ final class SDUtil
      * @throws org.apache.directory.fortress.core.SecurityException
      *
      */
-    static void validateSSD(UserRole uRole)
+    void validateSSD(UserRole uRole)
         throws SecurityException
     {
         validateSSD(new User(uRole.getUserId()), new Role(uRole.getName()));
@@ -109,7 +125,7 @@ final class SDUtil
      * @throws org.apache.directory.fortress.core.SecurityException
      *
      */
-    static void validateSSD(User user, Role role)
+    void validateSSD(User user, Role role)
         throws SecurityException
     {
         int matchCount;
@@ -156,7 +172,7 @@ final class SDUtil
      * @throws org.apache.directory.fortress.core.SecurityException
      *
      */
-    static void validateDSD(Session session, Constraint role)
+    void validateDSD(Session session, Constraint role)
         throws SecurityException
     {
         // get all activated roles from user's session:
@@ -198,7 +214,7 @@ final class SDUtil
                 else // Check the parents of activated role for DSD match:
                 {
                     // Now pull the activated role's list of parents.
-                    Set<String> parentSet = RoleUtil.getAscendants(actRole.getName(), session.getContextId());
+                    Set<String> parentSet = RoleUtil.getInstance().getAscendants(actRole.getName(), session.getContextId());
 
                     // Iterate over the list of parent roles:
                     for (String parentRole : parentSet)
@@ -228,7 +244,7 @@ final class SDUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.     *
      * @throws SecurityException in the event of system or rule violation.
      */
-    static void clearDsdCacheEntry(String name, String contextId)
+    void clearDsdCacheEntry(String name, String contextId)
     {
         Attribute<String> context = m_dsdCache.getSearchAttribute(CONTEXT_ID);
         Attribute<String> dsdName = m_dsdCache.getSearchAttribute(DSD_NAME);
@@ -251,7 +267,7 @@ final class SDUtil
      * @return un-ordered set of matching DSD's.
      * @throws SecurityException in the event of system or rule violation.
      */
-    private static Set<SDSet> getDsdCache(String name, String contextId)
+    private Set<SDSet> getDsdCache(String name, String contextId)
         throws SecurityException
     {
         contextId = getContextId(contextId);
@@ -294,7 +310,7 @@ final class SDUtil
      * @return un-ordered set of matching DSD's.
      * @throws SecurityException in the event of system or rule violation.
      */
-    static Set<SDSet> getDsdCache(Set<String> authorizedRoleSet, String contextId)
+    Set<SDSet> getDsdCache(Set<String> authorizedRoleSet, String contextId)
         throws SecurityException
     {
         contextId = getContextId(contextId);
@@ -305,7 +321,7 @@ final class SDUtil
             return dsdRetSets;
         }
         // Was the DSD Cache switched off?
-        boolean isCacheDisabled = Config.getBoolean(IS_DSD_CACHE_DISABLED_PARM, false);
+        boolean isCacheDisabled = Config.getInstance().getBoolean(IS_DSD_CACHE_DISABLED_PARM, false);
         // If so, get DSD's from LDAP:
         if (isCacheDisabled)
         {
@@ -357,7 +373,7 @@ final class SDUtil
      * @return List of DSD's who have matching Role members.
      * @throws SecurityException in the event of system or rule violation.
      */
-    private static Set<SDSet> putDsdCache(Set<String> authorizedRoleSet, String contextId)
+    private Set<SDSet> putDsdCache(Set<String> authorizedRoleSet, String contextId)
         throws SecurityException
     {
         contextId = getContextId(contextId);
@@ -415,7 +431,7 @@ final class SDUtil
      * @return Set of DSD's who have matching Role member.
      * @throws SecurityException in the event of system or rule violation.
      */
-    private static Set<SDSet> putDsdCache(String roleName, String contextId)
+    private Set<SDSet> putDsdCache(String roleName, String contextId)
         throws SecurityException
     {
         contextId = getContextId(contextId);
@@ -465,7 +481,7 @@ final class SDUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @throws SecurityException in the event of system or rule violation.
      */
-    static void clearSsdCacheEntry(String name, String contextId)
+    void clearSsdCacheEntry(String name, String contextId)
     {
         contextId = getContextId(contextId);
         m_ssdCache.clear(getKey(name, contextId));
@@ -479,7 +495,7 @@ final class SDUtil
      * @return List of SSD's who have matching Role member.
      * @throws SecurityException in the event of system or rule violation.
      */
-    private static List<SDSet> putSsdCache(String name, String contextId)
+    private List<SDSet> putSsdCache(String name, String contextId)
         throws SecurityException
     {
         Role role = new Role(name);
@@ -497,7 +513,7 @@ final class SDUtil
      * @return List of SSD's who have matching Role member.
      * @throws SecurityException in the event of system or rule violation.
      */
-    private static List<SDSet> getSsdCache(String name, String contextId)
+    private List<SDSet> getSsdCache(String name, String contextId)
         throws SecurityException
     {
         List<SDSet> ssdSets = (List<SDSet>) m_ssdCache.get(getKey(name, contextId));

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java
index 53bb1a7..7ed5ad7 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java
@@ -39,17 +39,17 @@ import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.SearchScope;
-import org.apache.directory.fortress.core.model.SDSet;
-import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.fortress.core.CreateException;
 import org.apache.directory.fortress.core.FinderException;
 import org.apache.directory.fortress.core.GlobalErrIds;
 import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.RemoveException;
 import org.apache.directory.fortress.core.UpdateException;
 import org.apache.directory.fortress.core.ldap.LdapDataProvider;
+import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.model.Role;
+import org.apache.directory.fortress.core.model.SDSet;
+import org.apache.directory.ldap.client.api.LdapConnection;
 
 
 /**
@@ -137,6 +137,9 @@ final class SdDAO extends LdapDataProvider
             GlobalIds.FT_IID, SD_SET_NM, SchemaConstants.DESCRIPTION_AT, ROLES, SD_SET_CARDINALITY
     };
 
+    public SdDAO() {
+        super();
+	}
 
     /**
      * @param entity
@@ -448,7 +451,7 @@ final class SdDAO extends LdapDataProvider
             filterbuf.append( ")(" );
 
             // Include any parents target role may have:
-            Set<String> roles = RoleUtil.getAscendants( role.getName(), role.getContextId() );
+            Set<String> roles = RoleUtil.getInstance().getAscendants( role.getName(), role.getContextId() );
 
             if ( CollectionUtils.isNotEmpty( roles ) )
             {

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/SdP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/SdP.java b/src/main/java/org/apache/directory/fortress/core/impl/SdP.java
index e4362f0..594a1e0 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/SdP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/SdP.java
@@ -58,7 +58,7 @@ public final class SdP
     /**
      * Get the DAO created:
      */
-    private static final SdDAO sdDao = new SdDAO();
+    private SdDAO sdDao;
 
 
     /**
@@ -66,6 +66,7 @@ public final class SdP
      */
     SdP()
     {
+    	sdDao = new SdDAO();
     }
 
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/SuffixDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/SuffixDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/SuffixDAO.java
index d6f4ba8..5ddd3e5 100644
--- a/src/main/java/org/apache/directory/fortress/core/impl/SuffixDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/SuffixDAO.java
@@ -26,14 +26,14 @@ import org.apache.directory.api.ldap.model.cursor.CursorException;
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.fortress.core.CreateException;
+import org.apache.directory.fortress.core.GlobalErrIds;
+import org.apache.directory.fortress.core.RemoveException;
+import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 import org.apache.directory.fortress.core.model.Suffix;
 import org.apache.directory.ldap.client.api.LdapConnection;
-import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.directory.fortress.core.CreateException;
-import org.apache.directory.fortress.core.GlobalErrIds;
-import org.apache.directory.fortress.core.RemoveException;
 
 
 /**
@@ -80,6 +80,7 @@ final class SuffixDAO extends LdapDataProvider
      */
     SuffixDAO()
     {
+        super();
     }
 
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/UserDAO.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/UserDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/UserDAO.java
index eed8bb4..c547fc5 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/UserDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/UserDAO.java
@@ -49,10 +49,21 @@ import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
 import org.apache.directory.api.ldap.model.message.BindResponse;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.SearchScope;
+import org.apache.directory.fortress.core.CreateException;
+import org.apache.directory.fortress.core.FinderException;
+import org.apache.directory.fortress.core.GlobalErrIds;
+import org.apache.directory.fortress.core.GlobalIds;
+import org.apache.directory.fortress.core.PasswordException;
+import org.apache.directory.fortress.core.RemoveException;
+import org.apache.directory.fortress.core.SecurityException;
+import org.apache.directory.fortress.core.UpdateException;
+import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 import org.apache.directory.fortress.core.model.Address;
 import org.apache.directory.fortress.core.model.AdminRole;
 import org.apache.directory.fortress.core.model.ConstraintUtil;
+import org.apache.directory.fortress.core.model.ObjectFactory;
 import org.apache.directory.fortress.core.model.OrgUnit;
+import org.apache.directory.fortress.core.model.PropUtil;
 import org.apache.directory.fortress.core.model.PwMessage;
 import org.apache.directory.fortress.core.model.Role;
 import org.apache.directory.fortress.core.model.Session;
@@ -60,21 +71,10 @@ import org.apache.directory.fortress.core.model.User;
 import org.apache.directory.fortress.core.model.UserAdminRole;
 import org.apache.directory.fortress.core.model.UserRole;
 import org.apache.directory.fortress.core.model.Warning;
-import org.apache.directory.fortress.core.model.PropUtil;
+import org.apache.directory.fortress.core.util.Config;
 import org.apache.directory.ldap.client.api.LdapConnection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.directory.fortress.core.CreateException;
-import org.apache.directory.fortress.core.FinderException;
-import org.apache.directory.fortress.core.GlobalErrIds;
-import org.apache.directory.fortress.core.GlobalIds;
-import org.apache.directory.fortress.core.model.ObjectFactory;
-import org.apache.directory.fortress.core.PasswordException;
-import org.apache.directory.fortress.core.RemoveException;
-import org.apache.directory.fortress.core.SecurityException;
-import org.apache.directory.fortress.core.UpdateException;
-import org.apache.directory.fortress.core.util.Config;
-import org.apache.directory.fortress.core.ldap.LdapDataProvider;
 
 
 /**
@@ -163,14 +163,9 @@ final class UserDAO extends LdapDataProvider
 
     // The Fortress User entity attributes are stored within standard LDAP object classes along with custom auxiliary
     // object classes:
-    private static final String USER_OBJ_CLASS[] =
-        { SchemaConstants.TOP_OC, Config.getProperty( USER_OBJECT_CLASS ),
-            USERS_AUX_OBJECT_CLASS_NAME, GlobalIds.PROPS_AUX_OBJECT_CLASS_NAME, GlobalIds
-            .FT_MODIFIER_AUX_OBJECT_CLASS_NAME, USERS_EXTENSIBLE_OBJECT,
-        //            POSIX_ACCOUNT_OBJECT_CLASS_NAME
-    };
-
-    private static final String objectClassImpl = Config.getProperty( USER_OBJECT_CLASS );
+    private String[] USER_OBJ_CLASS;
+
+    private String objectClassImpl;
     private static final String SYSTEM_USER = "ftSystem";
 
     /**
@@ -222,14 +217,23 @@ final class UserDAO extends LdapDataProvider
     private static String[] authnAtrs = null;
     private static String[] defaultAtrs = null;
 
-    static
+    private void init()
     {
-        LOG.debug( "GlobalIds.IS_OPENLDAP: " + GlobalIds.IS_OPENLDAP );
-        LOG.debug( "GlobalIds.IS_OPENLDAP ? OPENLDAP_PW_RESET : null: " + ( GlobalIds.IS_OPENLDAP ? OPENLDAP_PW_RESET
+        objectClassImpl = Config.getInstance().getProperty( USER_OBJECT_CLASS );
+    	
+        USER_OBJ_CLASS = new String[]
+            { SchemaConstants.TOP_OC, Config.getInstance().getProperty( USER_OBJECT_CLASS ),
+                USERS_AUX_OBJECT_CLASS_NAME, GlobalIds.PROPS_AUX_OBJECT_CLASS_NAME, GlobalIds
+                .FT_MODIFIER_AUX_OBJECT_CLASS_NAME, USERS_EXTENSIBLE_OBJECT,
+            //            POSIX_ACCOUNT_OBJECT_CLASS_NAME
+        };
+    	
+        LOG.debug( "GlobalIds.IS_OPENLDAP: " + GlobalIds.getInstance().IS_OPENLDAP );
+        LOG.debug( "GlobalIds.IS_OPENLDAP ? OPENLDAP_PW_RESET : null: " + ( GlobalIds.getInstance().IS_OPENLDAP ? OPENLDAP_PW_RESET
             : null ) );
-        LOG.debug( "GlobalIds.IS_OPENLDAP: " + GlobalIds.IS_OPENLDAP );
+        LOG.debug( "GlobalIds.IS_OPENLDAP: " + GlobalIds.getInstance().IS_OPENLDAP );
 
-        if ( GlobalIds.IS_OPENLDAP )
+        if ( GlobalIds.getInstance().IS_OPENLDAP )
         {
             // This default set of attributes contains all and is used for search operations.
             defaultAtrs = new String[]
@@ -395,6 +399,11 @@ final class UserDAO extends LdapDataProvider
         { GlobalIds.USER_ADMINROLE_DATA };
 
 
+    public UserDAO() {
+        super();
+        init();
+	}
+    
     /**
      * @param entity
      * @return
@@ -488,7 +497,7 @@ final class UserDAO extends LdapDataProvider
                 myEntry.add( SYSTEM_USER, entity.isSystem().toString().toUpperCase() );
             }
 
-            if ( GlobalIds.IS_OPENLDAP && StringUtils.isNotEmpty( entity.getPwPolicy() ) )
+            if ( GlobalIds.getInstance().IS_OPENLDAP && StringUtils.isNotEmpty( entity.getPwPolicy() ) )
             {
                 String pwdPolicyDn = GlobalIds.POLICY_NODE_TYPE + "=" + entity.getPwPolicy() + "," + getRootDn(
                     entity.getContextId(), GlobalIds.PPOLICY_ROOT );
@@ -593,7 +602,7 @@ final class UserDAO extends LdapDataProvider
                     entity.getTitle() ) );
             }
 
-            if ( GlobalIds.IS_OPENLDAP && StringUtils.isNotEmpty( entity.getPwPolicy() ) )
+            if ( GlobalIds.getInstance().IS_OPENLDAP && StringUtils.isNotEmpty( entity.getPwPolicy() ) )
             {
                 String szDn = GlobalIds.POLICY_NODE_TYPE + "=" + entity.getPwPolicy() + "," + getRootDn( entity
                     .getContextId(), GlobalIds.PPOLICY_ROOT );
@@ -1047,7 +1056,7 @@ final class UserDAO extends LdapDataProvider
                             case CHANGE_AFTER_RESET:
                                 // Don't throw exception if authenticating in J2EE Realm - The Web application must
                                 // give user a chance to modify their password.
-                                if ( !GlobalIds.IS_REALM )
+                                if ( !GlobalIds.getInstance().IS_REALM )
                                 {
                                     errMsg = msgHdr + "PASSWORD HAS BEEN RESET BY LDAP_ADMIN_POOL_UID";
                                     rc = GlobalErrIds.USER_PW_RESET;
@@ -1271,7 +1280,7 @@ final class UserDAO extends LdapDataProvider
             filterbuf.append( USERS_AUX_OBJECT_CLASS_NAME );
             filterbuf.append( ")(" );
 
-            Set<String> roles = RoleUtil.getDescendants( role.getName(), role.getContextId() );
+            Set<String> roles = RoleUtil.getInstance().getDescendants( role.getName(), role.getContextId() );
 
             if ( CollectionUtils.isNotEmpty( roles ) )
             {
@@ -1703,7 +1712,7 @@ final class UserDAO extends LdapDataProvider
             modify( ld, userDn, mods );
 
             // This modify update audit attributes on the User entry (if enabled):
-            if ( GlobalIds.IS_OPENLDAP && ! GlobalIds.IS_AUDIT_DISABLED )
+            if ( GlobalIds.getInstance().IS_OPENLDAP && ! GlobalIds.getInstance().IS_AUDIT_DISABLED )
             {
                 mods = new ArrayList<>();
                 modify( ld, userDn, mods, entity );
@@ -2079,7 +2088,7 @@ final class UserDAO extends LdapDataProvider
 
         entity.addProperties( PropUtil.getProperties( getAttributes( entry, GlobalIds.PROPS ) ) );
 
-        if ( GlobalIds.IS_OPENLDAP )
+        if ( GlobalIds.getInstance().IS_OPENLDAP )
         {
             szBoolean = getAttribute( entry, OPENLDAP_PW_RESET );
             if ( szBoolean != null && szBoolean.equalsIgnoreCase( "true" ) )

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/UserP.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/UserP.java b/src/main/java/org/apache/directory/fortress/core/impl/UserP.java
index f5be195..f089540 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/UserP.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/UserP.java
@@ -390,7 +390,7 @@ final class UserP
             throw new PasswordException( session.getErrorId(), info );
         }
 
-        VUtil.validateConstraints( session, VUtil.ConstraintType.USER, false );
+        VUtil.getInstance().validateConstraints( session, VUtil.ConstraintType.USER, false );
 
         return session;
     }
@@ -453,7 +453,7 @@ final class UserP
             // Create the impl session without authentication of password.
             session = createSessionTrusted( user );
             // Check user temporal constraints.  This op usually performed during authentication.
-            VUtil.validateConstraints( session, VUtil.ConstraintType.USER, false );
+            VUtil.getInstance().validateConstraints( session, VUtil.ConstraintType.USER, false );
         }
         else
         {
@@ -480,7 +480,7 @@ final class UserP
             }
         }
         // Check role temporal constraints + activate roles:
-        VUtil.validateConstraints( session, VUtil.ConstraintType.ROLE, true );
+        VUtil.getInstance().validateConstraints( session, VUtil.ConstraintType.ROLE, true );
         return session;
     }
 

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/908a0734/src/main/java/org/apache/directory/fortress/core/impl/UsoUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/UsoUtil.java b/src/main/java/org/apache/directory/fortress/core/impl/UsoUtil.java
index 6bec8f1..93939ee 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/UsoUtil.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/UsoUtil.java
@@ -62,17 +62,33 @@ import org.slf4j.LoggerFactory;
  */
 final class UsoUtil
 {
-    private static final Cache usoCache;
-    private static final OrgUnitP orgUnitP = new OrgUnitP();
+    private Cache usoCache;
+    private OrgUnitP orgUnitP;
     private static final String CLS_NM = UsoUtil.class.getName();
     private static final Logger LOG = LoggerFactory.getLogger( CLS_NM );
 
+    private static volatile UsoUtil INSTANCE = null; 
+
+    public static UsoUtil getInstance() {
+        if(INSTANCE == null) {
+            synchronized (UsoUtil.class) {
+                if(INSTANCE == null){
+        	        INSTANCE = new UsoUtil();
+                }
+            }
+        }
+        return INSTANCE;
+    }
+    
+    
     /**
      * Initialize the User OU hierarchies.  This will read the {@link org.apache.directory.fortress.core.model.Hier} data set from ldap and load into
      * the JGraphT simple digraph that referenced statically within this class.
      */
-    static
+    private void init()
     {
+        orgUnitP = new OrgUnitP();
+    	
         CacheMgr cacheMgr = CacheMgr.getInstance();
         usoCache = cacheMgr.getCache( "fortress.uso" );
     }
@@ -83,6 +99,7 @@ final class UsoUtil
      */
     private UsoUtil()
     {
+        init();
     }
 
     /**
@@ -91,7 +108,7 @@ final class UsoUtil
      * @param name {@link org.apache.directory.fortress.core.model.OrgUnit#name} on 'ftOrgUnit' object class.
      * @return Set of names of descendants {@link org.apache.directory.fortress.core.model.OrgUnit}s of given parent.
      */
-    static Set<String> getDescendants( String name, String contextId )
+    Set<String> getDescendants( String name, String contextId )
     {
         return HierUtil.getDescendants( name, getGraph( contextId ) );
     }
@@ -103,7 +120,7 @@ final class UsoUtil
      * @param name maps to logical {@link org.apache.directory.fortress.core.model.OrgUnit#name} on 'ftOrgUnit' object class.
      * @return Set of ou names that are ascendants of given child.
      */
-    static Set<String> getAscendants( String name, String contextId )
+    Set<String> getAscendants( String name, String contextId )
     {
         return HierUtil.getAscendants( name, getGraph( contextId ) );
     }
@@ -115,7 +132,7 @@ final class UsoUtil
      * @param name {@link org.apache.directory.fortress.core.model.OrgUnit#name} maps on 'ftOrgUnit' object class.
      * @return Set of names of children {@link org.apache.directory.fortress.core.model.OrgUnit}s of given parent.
      */
-    public static Set<String> getChildren( String name, String contextId )
+    public Set<String> getChildren( String name, String contextId )
     {
         return HierUtil.getChildren( name, getGraph( contextId ) );
     }
@@ -127,7 +144,7 @@ final class UsoUtil
      * @param name maps to logical {@link org.apache.directory.fortress.core.model.OrgUnit#name} on 'ftOrgUnit' object class.
      * @return Set of ou names that are parents of given child.
      */
-    static Set<String> getParents( String name, String contextId )
+    Set<String> getParents( String name, String contextId )
     {
         return HierUtil.getParents( name, getGraph( contextId ) );
     }
@@ -139,7 +156,7 @@ final class UsoUtil
      * @param name maps to logical {@link org.apache.directory.fortress.core.model.OrgUnit#name} on 'ftOrgUnit' object class.
      * @return int value contains the number of children of a given parent ou.
      */
-    static int numChildren( String name, String contextId )
+    int numChildren( String name, String contextId )
     {
         return HierUtil.numChildren( name, getGraph( contextId ) );
     }
@@ -151,7 +168,7 @@ final class UsoUtil
      * @param ous contains list of {@link org.apache.directory.fortress.core.model.OrgUnit}s.
      * @return contains Set of all descendants.
      */
-    static Set<String> getInherited( List<OrgUnit> ous, String contextId )
+    Set<String> getInherited( List<OrgUnit> ous, String contextId )
     {
         // create Set with case insensitive comparator:
         Set<String> iOUs = new TreeSet<>( String.CASE_INSENSITIVE_ORDER );
@@ -192,7 +209,7 @@ final class UsoUtil
      * @throws org.apache.directory.fortress.core.ValidationException
      *          in the event it fails one of the 3 checks.
      */
-    static void validateRelationship( OrgUnit child, OrgUnit parent, boolean mustExist )
+    void validateRelationship( OrgUnit child, OrgUnit parent, boolean mustExist )
         throws ValidationException
     {
         HierUtil.validateRelationship( getGraph( child.getContextId() ), child.getName(), parent.getName(), mustExist );
@@ -208,7 +225,7 @@ final class UsoUtil
      * @param op   used to pass the ldap op {@link org.apache.directory.fortress.core.model.Hier.Op#ADD}, {@link org.apache.directory.fortress.core.model.Hier.Op#MOD}, {@link org.apache.directory.fortress.core.model.Hier.Op#REM}
      * @throws org.apache.directory.fortress.core.SecurityException in the event of a system error.
      */
-    static void updateHier( String contextId, Relationship relationship, Hier.Op op ) throws SecurityException
+    void updateHier( String contextId, Relationship relationship, Hier.Op op ) throws SecurityException
     {
         HierUtil.updateHier( getGraph( contextId ), relationship, op );
     }
@@ -221,7 +238,7 @@ final class UsoUtil
      * @param contextId maps to sub-tree in DIT, for example ou=contextId, dc=jts, dc = com.
      * @return handle to simple digraph containing user ou hierarchies.
      */
-    private static synchronized SimpleDirectedGraph<String, Relationship> loadGraph( String contextId )
+    private synchronized SimpleDirectedGraph<String, Relationship> loadGraph( String contextId )
     {
         Hier inHier = new Hier( Hier.Type.ROLE );
         inHier.setContextId( contextId );
@@ -254,7 +271,7 @@ final class UsoUtil
      *
      * @return handle to simple digraph containing user ou hierarchies.
      */
-    private static SimpleDirectedGraph<String, Relationship> getGraph( String contextId )
+    private SimpleDirectedGraph<String, Relationship> getGraph( String contextId )
     {
         String key = getKey( contextId );        
         LOG.debug("Getting graph for key " + contextId);
@@ -273,7 +290,7 @@ final class UsoUtil
     }
 
 
-    private static String getKey( String contextId )
+    private String getKey( String contextId )
     {
         String key = HierUtil.Type.USO.toString();
         if ( StringUtils.isNotEmpty( contextId ) && !contextId.equalsIgnoreCase( GlobalIds.NULL ) )