Author: mcardle
Date: Mon Aug 14 08:28:12 2006
New Revision: 14891
URL: https://svndev.jahia.net/websvn/listing.php?sc=1&rev=14891&repname=jahia
Log:
* (Continued) support for aclGroup template sharing and other things
Modified:
trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java
trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java
trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton
trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld
trunk/core/src/webapp/WEB-INF/var/shared_templates/corporate_portal_templates_v2.jar
Modified:
trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java
(original)
+++ trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java
Mon Aug 14 08:28:12 2006
@@ -55,38 +55,50 @@
if (session == null) {
//throw new JahiaSessionExpirationException();
errorDetected = true;
- logger.error("JahiaSessionExpirationException for request : "
+ request.getRequestURL().toString());
+ logger.info("no user session for request : " +
request.getRequestURL().toString());
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
}
+
+ String userName=null;
+ String aclGroupKeyForUser = null;
+
JahiaUser jahiaUser = (JahiaUser)
session.getAttribute(ParamBean.SESSION_USER);
if (jahiaUser == null ) {
logger.error("User is not logged in for request : " +
request.getRequestURL().toString());
errorDetected = true;
}
+ else {
- //TODO: make sure its a UTF RESPONSE
- //TODO: make sure its all URLEncoded
-
- String userName=null;
- String aclGroupKeyForUser = null;
- if ( !jahiaUser.getUsername().equals("guest") ) {
- try {
- aclGroupKeyForUser = URLEncoder.encode(
getAclGroupKeyForUser(jahiaUser),"UTF-8");
- userName = URLEncoder.encode(jahiaUser.getUsername()+":"+
jahiaUser.getSiteID(),"UTF-8");
- } catch (UnsupportedEncodingException ex) {
- logger.error("[esi]: bad encoding scheme");
+ if ( !jahiaUser.getUsername().equals("guest") ) {
+ try {
+ aclGroupKeyForUser = getAclGroupKeyForUser(jahiaUser);
+ userName =
URLEncoder.encode(jahiaUser.getUsername()+":"+ jahiaUser.getSiteID(),"UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+ logger.error("[esi]: bad encoding scheme");
+ errorDetected = true;
+ }
}
}
- response.setContentType("text/plain");
- response.addHeader("Expires" , "Mon, 26 Jul 1997 05:00:00 GMT" );
- response.addHeader("Cache-Control" , "no-store, no-cache,
must-revalidate" );
- response.addHeader("Pragma" , "no-cache" );
-
- PrintWriter out = response.getWriter();
- String responseStr =
userName+JesiConst.ACLGROUP_TEMPLATE_REPONSE_SEPARATOR+aclGroupKeyForUser;
- out.println(responseStr);
- if (logger.isDebugEnabled())
- logger.debug("Response : "+responseStr);
+ if (errorDetected)
+
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ else {
+
+ response.setStatus(HttpServletResponse.SC_OK);
+
+ response.setContentType("text/plain");
+ response.addHeader("Expires" , "Mon, 26 Jul 1997 05:00:00 GMT"
);
+ response.addHeader("Cache-Control" , "no-store, no-cache,
must-revalidate" );
+ response.addHeader("Pragma" , "no-cache" );
+
+ PrintWriter out = response.getWriter();
+ String responseStr =
userName+JesiConst.ACLGROUP_TEMPLATE_REPONSE_SEPARATOR+aclGroupKeyForUser;
+ out.println(responseStr);
+
+ if (logger.isDebugEnabled())
+ logger.debug("Response : "+responseStr);
+ }
}
else
logger.error("You need to activate esiEnableTemplateCaching in
jahia.properties.");
@@ -95,7 +107,7 @@
public String getAclGroupKeyForUser(JahiaUser jahiaUser) {
- EsiService esiService = ServicesRegistry.getInstance().getEsiService();
+ //EsiService esiService =
ServicesRegistry.getInstance().getEsiService();
StringBuffer aclGroupParamVal = new StringBuffer();
Modified:
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java&rev=14891&repname=jahia
==============================================================================
---
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
(original)
+++
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
Mon Aug 14 08:28:12 2006
@@ -90,7 +90,7 @@
*/
public class CMSSlideContentListener extends JahiaEventListener implements
ContentListener, MacroListener,
- WebdavListener {
+ WebdavListener {
private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(CMSSlideContentListener.class);
Modified: trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java (original)
+++ trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java Mon Aug 14
08:28:12 2006
@@ -17,33 +17,32 @@
*/package org.jahia.taglibs.esi;
-import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
-import org.apache.commons.lang.RandomStringUtils;
-import org.jahia.bin.Jahia;
-import org.jahia.params.ParamBean;
-import org.jahia.params.SessionState;
-import org.jahia.registries.ServicesRegistry;
-import org.jahia.resourcebundle.JahiaResourceBundle;
-import org.jahia.services.acl.JahiaACLManagerService;
-import org.jahia.services.esi.EsiInvalidationWriterService;
-import org.jahia.services.esi.EsiService;
-import org.jahia.services.esi.tagstack.Fragment;
-import org.jahia.services.usermanager.JahiaGroupManagerService;
-import org.jahia.services.usermanager.JahiaUser;
-
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
-import java.net.URL;
+import org.jahia.registries.ServicesRegistry;
+import org.jahia.bin.Jahia;
import java.text.DateFormat;
import java.util.Date;
-import java.util.Enumeration;
import java.util.Vector;
+import java.util.Enumeration;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import org.jahia.resourcebundle.JahiaResourceBundle;
+import org.jahia.services.esi.EsiService;
+import org.jahia.services.esi.EsiInvalidationWriterService;
+import org.jahia.services.esi.tagstack.Fragment;
+import org.jahia.services.usermanager.*;
+import org.jahia.services.acl.JahiaACLManagerService;
+import org.jahia.params.ParamBean;
+import org.jahia.params.SessionState;
+import org.apache.commons.lang.RandomStringUtils;
+import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
public class JesiFragmentTag extends JesiBodyTag {
@@ -402,7 +401,8 @@
//if the parent template is aclGrouped, then we must use put a
special marker in the fragment link,
// and not the unique user=JahiaUsername identifier so that we can
share the same identical template with
//users with same acl group memberships
- if (!JesiConst.UNSET.equals(parentTemplate.aclGroup)) {
+ if (Jahia.getSettings().isEsiEnableTemplateCaching()
+ &&!JesiConst.UNSET.equals(parentTemplate.aclGroup)) {
userPart =
"&"+JesiConst.USER+"="+JesiConst.ACLGROUP_TEMPLATE_USER_MARKER;
}
//otherwise, just revert back to default behaviour for
non-aclGrouped Templates, which
Modified: trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java (original)
+++ trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java Mon Aug 14
08:28:12 2006
@@ -36,7 +36,7 @@
import org.jahia.services.esi.EsiService;
import org.jahia.params.ParamBean;
import org.jahia.params.ProcessingContext;
-
+import org.jboss.cache.CacheException;
public class JesiTemplateTag extends JesiBodyTag
{
@@ -48,9 +48,17 @@
String requestedFragmentBody;
boolean controlSet;
String URL;
+ boolean requestFromSurrogate_10;
+ boolean firstExecute;
+ Template tpl;
+ boolean aclGroupedTemplate = false;
public JesiTemplateTag()
{
+ aclGroupedTemplate = false;
+ tpl = null;
+ firstExecute= false;
+ requestFromSurrogate_10 = false;
fragmentCount = 0;
requestedFragment = JesiConst.NO_FRAGMENTS;
requestedFragmentBody = null;
@@ -100,12 +108,13 @@
//we want to do this even when ESI isn't supported for this request,
so that all compiled
//pages register their templates with the ESI cache, since future
requests with ESI-support
//will need this information.
- Template tpl =
ServicesRegistry.getInstance().getEsiService().addTemplate
(Jahia.getThreadParamBean().getSiteID(),
+ this.tpl = ServicesRegistry.getInstance().getEsiService().addTemplate
(Jahia.getThreadParamBean().getSiteID(),
Jahia.getThreadParamBean().getPageID(), this.URL);
if (logger.isDebugEnabled())
logger.debug("[esi]: Inside Template on
page:"+Jahia.getThreadParamBean().getPageID() +" for request url:" + URL);
//System.err.println("wwww Template.URL : "+this.URL);
+ requestFromSurrogate_10 = JesiTag.requestFromSurrogate_10(req);
//If no support for ESI, then skip this tag and just return its body
if(!JesiTag.requestFromSurrogate_10(req))
@@ -118,25 +127,26 @@
try
{
//Yes
- requestedFragment =
Integer.parseInt(req.getParameter(JesiConst.FRAGMENT_URL_MARKER));
+ this.requestedFragment =
Integer.parseInt(req.getParameter(JesiConst.FRAGMENT_URL_MARKER));
//save request debug info
req.setAttribute(JesiConst.ESI_REQUEST_TYPE_INFO,"Fragment#"+requestedFragment);
}
catch(NumberFormatException ex)
{
//No
- requestedFragment = JesiConst.NO_FRAGMENTS;//-1
+ this.requestedFragment = JesiConst.NO_FRAGMENTS;//-1
//save request debug info
req.setAttribute(JesiConst.ESI_REQUEST_TYPE_INFO,"Skeleton");
//tag this response with the appropriate Template header
httpResponse.setHeader(JesiConst.ESI_TEMPLATE_HEADER, "yes");
- if (!JesiConst.UNSET.equals(this.aclGroup)) {
+ if (Jahia.getSettings().isEsiEnableTemplateCaching()
+ && !JesiConst.UNSET.equals(this.aclGroup)) {
if (logger.isDebugEnabled()) {
logger.debug("aclGrouped Template detected");
}
-
httpResponse.setHeader(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER, "yes");
+ aclGroupedTemplate= true;
if (!"true".equals(this.aclGroup)) {
logger.warn("aclGroup='true' is only supported argument,
not current aclGroup="+this.aclGroup);
}
@@ -145,6 +155,47 @@
ServicesRegistry.getInstance().getEsiService().emptyCurrentTemplateIfInEditMode
(
Jahia.getThreadParamBean().getSiteID(),
Jahia.getThreadParamBean().getPageID());
+
+
+ //this should really be in doEndTag() but response is committed by
then, so have to do it here.
+ //(the disavantage is that we cannot cache first run of this
template)
+ if(this.requestFromSurrogate_10 && aclGroupedTemplate) {
+ //if this is an aclGroup-shared template, then set the
appropriate userACL header
+ //which shows if there are any specific user acls on this page.
+ try {
+ this.firstExecute =
this.tpl.isFirstExecute(pc.getOperationMode());
+ } catch(CacheException e) {
+ logger.error("Could not get firstExecute ",e);
+ }
+
+ if (Jahia.getSettings().isEsiEnableTemplateCaching()
+ && !this.firstExecute) { //if this is the first time
we execute this template, we don't know the user ACLs yet, so just don't set
the header just yet
+
+ String headerVal=null;
+ //are there any User ACLs specifically assigned to this
page?
+ Map aclUsernames = tpl.getAclUserNames();
+ if (aclUsernames!=null && !aclUsernames.isEmpty()) {
+ StringBuffer sb = new StringBuffer();
+ Iterator usersIt = aclUsernames.keySet().iterator();
+ while (usersIt.hasNext()) {
+ String userName = (String) usersIt.next();
+
sb.append(userName).append(JesiConst.ACLGROUP_TEMPLATE_USERACLS_SEPARATOR);
+ }
+ headerVal = sb.toString();
+ }
+ else
+ headerVal =
JesiConst.ACLGROUP_TEMPLATE_NO_USERACLS_DETECTED;
+
+
httpResponse.setHeader(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER,headerVal);
+
+ if (httpResponse.isCommitted())
+ logger.warn("Could not add
"+JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER+" because request was committed
already.");
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Set " +
JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER+" header : "+headerVal);
+ }
+ }
+ }
}
//If it's not requesting a fragment and Control tag isn't present,
then set HTTP ESI headers
if(requestedFragment == JesiConst.NO_FRAGMENTS
@@ -171,6 +222,8 @@
return javax.servlet.jsp.tagext.Tag.EVAL_PAGE;//6;
}
+ ProcessingContext pc = Jahia.getThreadParamBean();
+
//Check that the total number of Fragments on this Template reflects
same the total number
//of Fragments stored in the "Fragments" HashMap, if not delete any
excess Fragment entries
ServicesRegistry.getInstance().getEsiService().deleteOldFragments (
@@ -182,7 +235,7 @@
HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
//If ESI supported and it's requesting a fragment, then output the
Fragment body
- if(JesiTag.requestFromSurrogate_10(req) && requestedFragment !=
JesiConst.NO_FRAGMENTS)
+ if(requestFromSurrogate_10 && requestedFragment !=
JesiConst.NO_FRAGMENTS) {
try
{
getBodyContent().getEnclosingWriter().print(requestedFragmentBody);
@@ -192,13 +245,14 @@
{
throw new JspTagException(ioexception.toString());
}
- if(JesiTag.requestFromSurrogate_10(req) && requestedFragment ==
JesiConst.NO_FRAGMENTS) {
+ }
+
+ if(requestFromSurrogate_10 && requestedFragment ==
JesiConst.NO_FRAGMENTS) {
if (Jahia.getSettings().getEsiDisplayFragmentDelimiters()) {
//For debug purposes only
String ctIDs = "";
if (Jahia.getSettings().getEsiDisplayContentIDs()) {
- Template tpl =
ServicesRegistry.getInstance().getEsiService().getTemplate();
StringBuffer contentIDs = new StringBuffer();
contentIDs.append("<p>Referenced Content : ");
contentIDs.append("<br>ctnListID0s:
");contentIDs.append(EsiService.printDetailedContents(tpl.getContainerListID0s()));
@@ -229,46 +283,21 @@
//logger.error("[esi]: [esi]: IO exception while trying
to display ESI Template tag " + ioe);
}
}
+ //reset first execute
+ if (this.firstExecute)
+ try {
+ this.tpl.setFirstExecute(false , pc.getOperationMode());
+ } catch(CacheException e) {
+ logger.error("Could not set firstExecute ",e);
+ }
}
//We are now outside the scope of this enclosing JesiTemplateTag
//so we are removing it from the current tagStack
//From now on, any content access (i.e. getContainer() ) will add
itself
//to the previous tag in the tagStack.
- JesiObject jesiObj =
ServicesRegistry.getInstance().getEsiService().getTackStack().pop("Template",
Jahia.getThreadParamBean().getPageID());
-
- if (Jahia.getSettings().isEsiEnableTemplateCaching()) {
- if (requestedFragment == JesiConst.NO_FRAGMENTS) {
- if (jesiObj instanceof Template) {
-
- HttpServletResponse httpResponse = ((HttpServletResponse)
pageContext.getResponse());
- String headerVal=null;
- Map aclUsernames = jesiObj.getAclUserNames();
- if (aclUsernames!=null && !aclUsernames.isEmpty()) {
- StringBuffer sb = new StringBuffer();
- Iterator usersIt = aclUsernames.keySet().iterator();
- while (usersIt.hasNext()) {
- String userName = (String) usersIt.next();
-
sb.append(userName).append(JesiConst.ACLGROUP_TEMPLATE_USERACLS_SEPARATOR);
- }
- headerVal = sb.toString();
- }
- else
- headerVal =
JesiConst.ACLGROUP_TEMPLATE_NO_USERACLS_DETECTED;
-
- if (logger.isDebugEnabled()) {
-
logger.debug(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER+" header :
"+headerVal);
- }
-
-
httpResponse.setHeader(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER,headerVal);
- }
- else {
- logger.warn("Could not add user acls in response header
because tagstack head is not a Template : "+jesiObj);
- }
- }
- }
-
+ JesiObject jesiObj =
ServicesRegistry.getInstance().getEsiService().getTackStack().pop("Template",
pc.getPageID());
if
(!ServicesRegistry.getInstance().getEsiService().getTackStack().isEmpty()) {
logger.info("tagStack isn't empty when it should. Clearing
manually. "+ServicesRegistry.getInstance().getEsiService().getTackStack());
@@ -284,6 +313,9 @@
public void release()
{
+ aclGroupedTemplate = false;
+ firstExecute= false;
+ requestFromSurrogate_10 = false;
fragmentCount = 0;
requestedFragment = JesiConst.NO_FRAGMENTS;//-1
controlSet = false;
Modified: trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton (original)
+++ trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton Mon Aug 14 08:28:12
2006
@@ -293,10 +293,10 @@
# that invalidation messages will be queued up and sent all together with the
next request
# to Jahia (meaning the cached pages won't be updated until a direct request
to Jahia
# -not the ESI server- is made).
-# esiEachTimePublishingEventCausesSOAPInvalidation = false
+esiEachTimePublishingEventCausesSOAPInvalidation = true
# Enable template caching of aclGrouped template
-# esiEnableTemplateCaching = true
+esiEnableTemplateCaching = false
######################################################################
### JMS Cache Settings ###############################################
Modified: trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld (original)
+++ trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld Mon Aug 14 08:28:12 2006
@@ -94,6 +94,10 @@
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
+ <name>aclGroup</name>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
<name>user</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
Modified:
trunk/core/src/webapp/WEB-INF/var/shared_templates/corporate_portal_templates_v2.jar
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/WEB-INF/var/shared_templates/corporate_portal_templates_v2.jar&rev=14891&repname=jahia
==============================================================================
Binary files - no diff available.