Author: bpapez
Date: Thu Jan 17 23:53:36 2008
New Revision: 19536

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19536&repname=
=3Djahia
Log:
CONE-60: implement lazy loading of DB group members

Modified:
    trunk/core/src/java/org/jahia/hibernate/manager/JahiaGroupManager.java
    trunk/core/src/java/org/jahia/services/usermanager/GuestGroup.java
    trunk/core/src/java/org/jahia/services/usermanager/JahiaDBGroup.java
    trunk/core/src/java/org/jahia/services/usermanager/JahiaGroupManagerDBP=
rovider.java
    trunk/core/src/java/org/jahia/services/usermanager/UsersGroup.java
    trunk/core/src/java/org/jahia/settings/SettingsBean.java
    trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton

Modified: trunk/core/src/java/org/jahia/hibernate/manager/JahiaGroupManager=
.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/manager/JahiaGroupManager.java&rev=3D19536&repname=3Djah=
ia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/hibernate/manager/JahiaGroupManager.java =
(original)
+++ trunk/core/src/java/org/jahia/hibernate/manager/JahiaGroupManager.java =
Thu Jan 17 23:53:36 2008
@@ -21,6 +21,7 @@
 =

 import org.apache.commons.collections.FastHashMap;
 import org.apache.log4j.Logger;
+import org.jahia.bin.Jahia;
 import org.jahia.exceptions.JahiaInitializationException;
 import org.jahia.hibernate.dao.JahiaGroupAccessDAO;
 import org.jahia.hibernate.dao.JahiaGroupDAO;
@@ -194,14 +195,20 @@
             }
 =

             if (jahiaGrp !=3D null) {
+                // Find Members                =

+                Map members =3D null;
+                if (Jahia.getSettings().isPreloadDBGroupMembersActivated()=
) {
+                    members =3D getGroupMembers(jahiaGrp);
+                } else {
+                    members =3D new FastHashMap();
+                }
 =

-                // Find Members
-                Map members =3D getGroupMembers(jahiaGrp);
                 // Load Properties
                 Properties properties =3D dao.loadProperties(jahiaGrp.getI=
d(), jahiaGrp.getKey(),
                                                            JahiaGroupManag=
erDBProvider.PROVIDER_NAME);
 =

-                group =3D getJahiaGroup(jahiaGrp, siteID, members, propert=
ies);
+                group =3D getJahiaGroup(jahiaGrp, siteID, members, propert=
ies, Jahia.getSettings()
+                        .isPreloadDBGroupMembersActivated());
                 if (cache !=3D null) {
                     cache.put(CacheAdvice.toGroupCacheKey(new Object[]{CAC=
HE_KEY_GROUPPREFIX + name + ":" + siteID,
                                                                        CAC=
HE_KEY_SITEPREFIX + siteID}), group);
@@ -233,8 +240,13 @@
         if (group =3D=3D null) {
             JahiaGrp jahiaGrp =3D dao.loadJahiaGroupByGroupKey(groupKey);
             if (jahiaGrp !=3D null) {
-                // Find Members
-                Map members =3D getGroupMembers(jahiaGrp);
+                // Find Members                =

+                Map members =3D null;
+                if (Jahia.getSettings().isPreloadDBGroupMembersActivated()=
) {
+                    members =3D getGroupMembers(jahiaGrp);
+                } else {
+                    members =3D new FastHashMap();
+                }
                 // Load Properties
                 Properties properties =3D dao.loadProperties(jahiaGrp.getI=
d(), jahiaGrp.getKey(),
                                                            JahiaGroupManag=
erDBProvider.PROVIDER_NAME);
@@ -242,7 +254,8 @@
                 if (jahiaGrp.getSite() !=3D null) {
                     siteID =3D jahiaGrp.getSite().getId().intValue();
                 }
-                group =3D getJahiaGroup(jahiaGrp, siteID, members, propert=
ies);
+                group =3D getJahiaGroup(jahiaGrp, siteID, members, propert=
ies, Jahia.getSettings()
+                        .isPreloadDBGroupMembersActivated());
                 if (cache !=3D null) {
                     cache.put(entryKey, group);
                 }
@@ -251,7 +264,7 @@
         return group;
     }
 =

-    private JahiaGroup getJahiaGroup(JahiaGrp jahiaGrp, int siteID, Map me=
mbers, Properties properties) {
+    private JahiaGroup getJahiaGroup(JahiaGrp jahiaGrp, int siteID, Map me=
mbers, Properties properties, boolean preloadedGroups) {
         JahiaGroup group;
         if (JahiaGroupManagerDBProvider.GUEST_GROUPNAME.equals(jahiaGrp.ge=
tName())) {
             group =3D new GuestGroup(jahiaGrp.getId().intValue(), siteID, =
properties);
@@ -259,7 +272,7 @@
             group =3D new UsersGroup(jahiaGrp.getId().intValue(), siteID, =
properties);
         } else {
             group =3D new JahiaDBGroup(jahiaGrp.getId().intValue(), jahiaG=
rp.getName(), jahiaGrp.getKey(),
-                                     siteID, members, properties);
+                                     siteID, members, properties, preloade=
dGroups);
         }
         return group;
     }

Modified: trunk/core/src/java/org/jahia/services/usermanager/GuestGroup.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/usermanager/GuestGroup.java&rev=3D19536&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/usermanager/GuestGroup.java (ori=
ginal)
+++ trunk/core/src/java/org/jahia/services/usermanager/GuestGroup.java Thu =
Jan 17 23:53:36 2008
@@ -35,7 +35,7 @@
 =

     public GuestGroup(int id, int siteId, Properties properties) {
         super(id, JahiaGroupManagerDBProvider.GUEST_GROUPNAME,
-                JahiaGroupManagerDBProvider.GUEST_GROUPNAME+":"+siteId, si=
teId, new HashMap(), properties);
+                JahiaGroupManagerDBProvider.GUEST_GROUPNAME+":"+siteId, si=
teId, new HashMap(), properties, false);
     }
 =

 =


Modified: trunk/core/src/java/org/jahia/services/usermanager/JahiaDBGroup.j=
ava
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/usermanager/JahiaDBGroup.java&rev=3D19536&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/usermanager/JahiaDBGroup.java (o=
riginal)
+++ trunk/core/src/java/org/jahia/services/usermanager/JahiaDBGroup.java Th=
u Jan 17 23:53:36 2008
@@ -34,9 +34,11 @@
 import java.security.Principal;
 import java.security.acl.Group;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 =

 /**
  * This class represents the Jahia native database based user group.
@@ -60,6 +62,10 @@
     /** Group additional parameters. */
     private Properties mProperties =3D new Properties ();
 =

+    private boolean preloadedGroups;
+
+    private Set notMembers =3D new HashSet();    =

+    =

     //--------------------------------------------------------------------=
-----
     /**
      * Instanciate a new JahiaDBGroup object.
@@ -74,7 +80,7 @@
      * @param  siteID The site id
      */
     public JahiaDBGroup (int id, String groupname, String groupKey, int si=
teID,
-                            Map members, Properties properties) {
+                            Map members, Properties properties, boolean pr=
eloadedGroups) {
 =

         mID =3D id;
         mGroupname =3D groupname;
@@ -88,7 +94,7 @@
         if (properties !=3D null) {
             mProperties =3D properties;
         }
-
+        this.preloadedGroups =3D preloadedGroups;
     }
 =

 =

@@ -318,4 +324,22 @@
         return JahiaGroupManagerDBProvider.PROVIDER_NAME;
     }
 =

+    public boolean isMember(Principal principal) {
+        if (super.isMember(principal)) {
+            return true;
+        }
+        if (!preloadedGroups && principal instanceof JahiaUser) {
+            if (notMembers.contains(principal.getName())) {
+                return false;
+            }
+            if (JahiaGroupManagerDBProvider.getInstance().getUserMembershi=
p((JahiaUser)principal).contains(getGroupKey())) {
+                mMembers.put(principal.getName(), principal);
+                return true;
+            } else {
+                notMembers.add(principal.getName());
+            }
+        }
+        return false;
+    }    =

+    =

 }

Modified: trunk/core/src/java/org/jahia/services/usermanager/JahiaGroupMana=
gerDBProvider.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/usermanager/JahiaGroupManagerDBProvider.java&rev=3D19536&=
repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/usermanager/JahiaGroupManagerDBP=
rovider.java (original)
+++ trunk/core/src/java/org/jahia/services/usermanager/JahiaGroupManagerDBP=
rovider.java Thu Jan 17 23:53:36 2008
@@ -136,7 +136,7 @@
         // Create the group
         JahiaDBGroup group =3D null;
         String groupKey =3D name + ":" + String.valueOf(siteID);
-        group =3D new JahiaDBGroup(0, name, groupKey, siteID, null, proper=
ties);
+        group =3D new JahiaDBGroup(0, name, groupKey, siteID, null, proper=
ties, false);
 =

         groupManager.createGroup(group);
         group =3D (JahiaDBGroup) groupManager.findGroupBySiteAndName(siteI=
D, name);

Modified: trunk/core/src/java/org/jahia/services/usermanager/UsersGroup.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/usermanager/UsersGroup.java&rev=3D19536&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/usermanager/UsersGroup.java (ori=
ginal)
+++ trunk/core/src/java/org/jahia/services/usermanager/UsersGroup.java Thu =
Jan 17 23:53:36 2008
@@ -35,7 +35,7 @@
 =

     public UsersGroup(int id, int siteId, Properties properties) {
         super(id, JahiaGroupManagerDBProvider.USERS_GROUPNAME,
-                JahiaGroupManagerDBProvider.USERS_GROUPNAME+":"+siteId, si=
teId, new HashMap(), properties);
+                JahiaGroupManagerDBProvider.USERS_GROUPNAME+":"+siteId, si=
teId, new HashMap(), properties, false);
     }
 =

 =


Modified: trunk/core/src/java/org/jahia/settings/SettingsBean.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/settings/SettingsBean.java&rev=3D19536&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/settings/SettingsBean.java (original)
+++ trunk/core/src/java/org/jahia/settings/SettingsBean.java Thu Jan 17 23:=
53:36 2008
@@ -369,6 +369,10 @@
     private int suggestedRetryTimeAfterTimeout =3D 60; // in seconds
     private int suggestedRetryTimeAfterTimeoutOnStartup =3D 15; // in seco=
nds
 =

+    // Preload group members when loading user groups from DB =

+    final public static String PRELOAD_DBGROUP_MEMBERS_ACTIVATED =3D "prel=
oadDBGroupMembersActivated";
+    private boolean preloadDBGroupMembersActivated =3D true;
+    =

     private int editModeSessionTimeout =3D 2*60*60; // 2 hours
     =

     // The db max elements for SQL IN clause
@@ -817,9 +821,10 @@
             =

             editModeSessionTimeout =3D getInt("editModeSessionTimeout", 2*=
60*60);
 =

-
             dBMaxElementsForInClause =3D getInt("db_max_elements_for_in_cl=
ause", dBMaxElementsForInClause);
 =

+            preloadDBGroupMembersActivated =3D getBoolean(PRELOAD_DBGROUP_=
MEMBERS_ACTIVATED, true);
+            =

             try {
                 DatabaseScripts scriptsManager =3D new DatabaseScripts();
                 Vector scriptsInfos =3D scriptsManager.getDatabaseScriptsI=
nfos (
@@ -2184,4 +2189,8 @@
     public int getDBMaxElementsForInClause() {
         return dBMaxElementsForInClause;
     }
+    =

+    public boolean isPreloadDBGroupMembersActivated() {
+        return preloadDBGroupMembersActivated;
+    }
 }

Modified: trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/webapp=
/WEB-INF/etc/config/jahia.skeleton&rev=3D19536&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton (original)
+++ trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton Thu Jan 17 23:5=
3:36 2008
@@ -415,6 +415,10 @@
 # Specifies whether we should preload ACLs from database on startup.
 org.jahia.acl.preload_active                           =3D   true
 =

+# This variable controls whether all the members of a user group (in Jahia=
 DB
+# not LDAP) are preloaded, when the group is loaded.
+preloadDBGroupMembersActivated                         =3D true
+
 ######################################################################
 ### Page properties ##################################################
 ######################################################################

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to