Ok !
I've done that and everything goes well ! For your interest, the following codes are the solution I've use (in order templates adding code / patch on jahia / apache conf).
I've put the new HtmlCacheEntry in webapps/jahia/WEB-INF/classes directory, modify the jahia.properties to add the property "readonlyserver" and restart the server.
TEMPLATES
Here is the code I had in header.inc (after the include of declarations.inc) :
<%
//
// Si on est en anonyme ou que le serveur est utilisé en lecture uniquement --> utilisation du cache Apache
if (!jData.gui().isLogged() || bIsReadonlyServer)
{
int iCacheMaxExpire = 24*3600; // 24 heures max pour cache Apache
// Get the language code
String curLanguageCode = LanguageCodeConverters.localeToLanguageTag(jParams.getLocale());
// Extract the workflow state out of the parameters bean
int workflowState = jParams.getEntryLoadRequest().getWorkflowState();
// Get the HTML cache instance
HtmlCache htmlCache = CacheFactory.getHtmlCache();
// Get the CacheEntry
String entryKey = htmlCache.computeEntryKey(Integer.toString(jParams.getPageID()),
jParams.getUser().getUsername(), curLanguageCode, workflowState, jParams.getUserAgent());
Date dLastModifiedCacheDate = new Date();
try {
CacheEntry cacheEntry = (CacheEntry)htmlCache.getCacheEntry(entryKey);
HtmlCacheEntry htmlEntry = (HtmlCacheEntry) cacheEntry.getObject();
dLastModifiedCacheDate.setTime(htmlEntry.getContentTimestamp());
} catch(Exception e) {}
Date dExpires = new Date();
dExpires.setTime(dLastModifiedCacheDate.getTime() + iCacheMaxExpire);
logger.debug("Header Expires = " + getDateAsRFC822String(dExpires));
logger.debug("Header Last-Modified = " + getDateAsRFC822String(dLastModifiedCacheDate));
logger.debug("Header Cache-Control = " + "max-age=" + iCacheMaxExpire + ", must-revalidate");
response.addHeader("Expires", getDateAsRFC822String(dExpires));
response.addHeader("Last-Modified", getDateAsRFC822String(dLastModifiedCacheDate));
response.addHeader("Cache-Control", "max-age=" + iCacheMaxExpire + ", must-revalidate");
}
// Autrement --> pas de cache Apache
else
{
Date dExpiresAbsolute = new Date();
dExpiresAbsolute.setTime(dExpiresAbsolute.getTime() + 24*3600);
logger.debug("Header Cache-Control = no-cache");
logger.debug("Header Pragma = No-Cache");
logger.debug("Header ExpiresAbsolute = " + getDateAsRFC822String(dExpiresAbsolute));
logger.debug("Header Expires = -1");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Pragma", "No-Cache");
response.addHeader("ExpiresAbsolute", getDateAsRFC822String(dExpiresAbsolute));
response.addHeader("Expires", "-1");
}
%>
Here is the code I had in declarations.inc :
private static PropertiesManager properties = new PropertiesManager(Jahia.getJahiaPropertiesFileName ());
private boolean bIsReadonlyServer = "true".equals(properties.getProperty("readonlyserver"));
private boolean bIsReadonlyServer = "true".equals(properties.getProperty("readonlyserver"));
public static SimpleDateFormat RFC822DATEFORMAT = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US);
public static String getDateAsRFC822String(Date date)
{
return RFC822DATEFORMAT.format(date);
}
PATCH JAHIA 4.0.6
Here is my personnal org.jahia.services.cache.HtmlCacheEntry (in red the code I've had) :
public class HtmlCacheEntry implements Serializable {
/** the HTML body content. */
private String contentBody = "";
private String contentBody = "";
/** the HTML content type. */
private String contentType = "";
private String contentType = "";
/** the date of HTMLCacheEntry creation / update **/
private long contentTimestamp = -1;
private long contentTimestamp = -1;
public HtmlCacheEntry (String contentBody) {
init (contentBody, null, new Date().getTime());
}
public HtmlCacheEntry (String contentBody, String contentType) {
init (contentBody, contentType, new Date().getTime());
}
private void init (String contentBody, String contentType, long contentTimestamp) {
if (contentBody != null)
this.contentBody = contentBody;
if (contentBody != null)
this.contentBody = contentBody;
if (contentType != null)
this.contentType = contentType;
this.contentTimestamp = contentTimestamp;
}
this.contentType = contentType;
this.contentTimestamp = contentTimestamp;
}
final public String getContentType() {
return contentType;
}
final public void setContentType (String contentType) {
this.contentType = contentType;
this.contentTimestamp = new Date().getTime();
}
final public String getContentBody() {
return contentBody;
}
final public void setContentBody (String contentBody) {
this.contentBody = contentBody;
this.contentTimestamp = new Date().getTime();
}
final public long getContentTimestamp() {
return contentTimestamp;
}
return contentTimestamp;
}
}
Then in Apache, I've had a new virtual site declaration for my site
<VirtualHost *:80>
ServerName www.mysite.mydomain.fr
# Logging access
CustomLog "|/apache/2.0.54/bin/rotatelogs /apache/logs/jahiaconsult_access_mysitekey_log.%Y-%m-%d-%H_%M_%S.log 86400" common
CustomLog "|/apache/2.0.54/bin/rotatelogs /apache/logs/jahiaconsult_access_mysitekey_log.%Y-%m-%d-%H_%M_%S.log 86400" common
# Redirections
Redirect /index.html http://www.mysite.mydomain.fr/jahia/Jahia/site/mysitekey
DocumentRoot /apache/2.0.54/htdocs
Redirect /index.html http://www.mysite.mydomain.fr/jahia/Jahia/site/mysitekey
DocumentRoot /apache/2.0.54/htdocs
RewriteEngine On
RewriteRule /favicon.ico - [F]
RewriteRule (.*)/op(.*)$ http://www.mysite.mydomain.edit.fr/jahia/Jahia/engineName/login/site/mysitekey
RewriteRule ^/jahia/administration(.*)$ http://www.mysite.mydomain.edit.fr/jahia/administration
RewriteRule (.*)/op(.*)$ http://www.mysite.mydomain.edit.fr/jahia/Jahia/engineName/login/site/mysitekey
RewriteRule ^/jahia/administration(.*)$ http://www.mysite.mydomain.edit.fr/jahia/administration
ProxyPass /jahia/Jahia/op !
ProxyPass /jahia/Jahia/site/mysitekey/op !
ProxyPass /jahia/administration !
ProxyPass /jahia http://www.mysite.mydomain.fr:9080/jahia
ProxyPassReverse /jahia http://www.mysite.mydomain.fr:9080/jahia
ProxyPass /jahia/Jahia/site/mysitekey/op !
ProxyPass /jahia/administration !
ProxyPass /jahia http://www.mysite.mydomain.fr:9080/jahia
ProxyPassReverse /jahia http://www.mysite.mydomain.fr:9080/jahia
# Gestion du Cache
CacheRoot "/apache/2.0.54/proxy/www.mysite.mydomain.fr"
CacheSize 50000
CacheEnable disk /
CacheGcInterval 0.25
CacheMaxExpire 180
CacheLastModifiedFactor 0.1
CacheDefaultExpire 0.25
CacheDirLength 2
CacheDirLevels 3
CacheRoot "/apache/2.0.54/proxy/www.mysite.mydomain.fr"
CacheSize 50000
CacheEnable disk /
CacheGcInterval 0.25
CacheMaxExpire 180
CacheLastModifiedFactor 0.1
CacheDefaultExpire 0.25
CacheDirLength 2
CacheDirLevels 3
# Expire - by request
ExpiresActive On
ExpiresByType image/gif A86400
ExpiresByType image/png A86400
ExpiresByType image/jpeg A86400
ExpiresByType text/css A86400
ExpiresActive On
ExpiresByType image/gif A86400
ExpiresByType image/png A86400
ExpiresByType image/jpeg A86400
ExpiresByType text/css A86400
</VirtualHost>
Regards for your Help.
Ghislain CUSSONNEAU
DIRR/DPIL/CIS
CAP 44, Rue Marcel Sembat
44000 Nantes
02 51 84 48 80
Accédez au courrier électronique de La Poste : www.laposte.net ;
Jusqu'au 25 décembre, participez au grand jeu du Calendrier de l'Avent et
gagnez tous les jours de nombreux lots, + de 300 cadeaux en jeu !
