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