Author: cmailleux
Date: Fri Jun 15 16:37:09 2007
New Revision: 397
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D397&repname=
=3Desi_server
Log:
Resolve issue ESI-62
Use a DeferredFileOutputStream which will write file other than 10Mo to dis=
k in temp file before streaming them to webdav to avoid the byte array cach=
e in httpclient.
Update some jars and add commons-fileupload and commons-io
Added:
trunk/WEB-INF/classes/displaytag.properties
trunk/WEB-INF/lib/commons-fileupload-1.2.jar (with props)
trunk/WEB-INF/lib/commons-io-1.3.1.jar (with props)
trunk/WEB-INF/log4j.dtd
Modified:
trunk/WEB-INF/lib/filterbuilder.jar
trunk/WEB-INF/lib/htmllexer.jar
trunk/WEB-INF/lib/htmlparser.jar
trunk/WEB-INF/lib/thumbelina.jar
trunk/esiadmin/cachestatus.jsp
trunk/src/net/sf/j2ep/RequestThrottle.java
trunk/src/net/sf/j2ep/requesthandlers/EntityEnclosingRequestHandler.java
trunk/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java
trunk/src/org/jahia/esi/Utils.java
Added: trunk/WEB-INF/classes/displaytag.properties
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/WEB-INF/=
classes/displaytag.properties&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/WEB-INF/classes/displaytag.properties (added)
+++ trunk/WEB-INF/classes/displaytag.properties Fri Jun 15 16:37:09 2007
@@ -0,0 +1,89 @@
+basic.empty.showtable=3Dfalse
+basic.show.header=3Dtrue
+
+# page | list
+sort.amount=3Dlist
+
+export.amount=3Dlist
+export.decorated=3Dtrue
+
+paging.banner.group_size=3D8
+paging.banner.placement=3Dtop
+
+
+css.tr.even=3Deven
+css.tr.odd=3Dodd
+css.th.sorted=3Dsorted
+css.th.ascending=3Dorder1
+css.th.descending=3Dorder2
+css.table=3D
+css.th.sortable=3Dsortable
+
+# factory classes for extensions
+factory.requestHelper=3Dorg.displaytag.util.DefaultRequestHelperFactory
+
+# locale provider (Jstl provider by default)
+locale.provider=3Dorg.displaytag.localization.I18nJstlAdapter
+
+# locale.resolver (nothing by default, simply use locale from request)
+#locale.resolver=3D
+
+export.types=3Dcsv excel xml pdf
+
+export.csv.class=3Dorg.displaytag.export.CsvView
+export.excel.class=3Dorg.displaytag.export.ExcelView
+export.xml.class=3Dorg.displaytag.export.XmlView
+export.pdf.class=3Dorg.displaytag.export.PdfView
+
+export.csv=3Dtrue
+export.csv.label=3D<span class=3D"export csv">CSV </span>
+export.csv.include_header=3Dfalse
+export.csv.filename=3D
+
+export.excel=3Dtrue
+export.excel.label=3D<span class=3D"export excel">Excel </span>
+export.excel.include_header=3Dtrue
+export.excel.filename=3D
+
+export.xml=3Dtrue
+export.xml.label=3D<span class=3D"export xml">XML </span>
+export.xml.filename=3D
+
+export.pdf=3Dfalse
+export.pdf.label=3D<span class=3D"export pdf">PDF </span>
+export.pdf.include_header=3Dtrue
+export.pdf.filename=3D
+
+
+# messages
+
+basic.msg.empty_list=3DNothing found to display.
+basic.msg.empty_list_row=3D<tr class=3D"empty"><td colspan=3D"{0}">Nothing=
found to display.</td></tr>
+error.msg.invalid_page=3Dinvalid page
+
+export.banner=3D<div class=3D"exportlinks">Export options: {0}</div>
+export.banner.sepchar=3D | =
+
+paging.banner.item_name=3Ditem
+paging.banner.items_name=3Ditems
+
+paging.banner.no_items_found=3D<span class=3D"pagebanner">No {0} found.</s=
pan>
+paging.banner.one_item_found=3D<span class=3D"pagebanner">One {0} found.</=
span>
+paging.banner.all_items_found=3D<span class=3D"pagebanner">{0} {1} found, =
displaying all {2}.</span>
+paging.banner.some_items_found=3D<span class=3D"pagebanner">{0} {1} found,=
displaying {2} to {3}.</span>
+
+paging.banner.full=3D<span class=3D"pagelinks">[<a href=3D"{1}">First</a>/=
<a href=3D"{2}">Prev</a>] {0} [<a href=3D"{3}">Next</a>/<a href=3D"{4}">Las=
t</a>]</span>
+paging.banner.first=3D<span class=3D"pagelinks">[First/Prev] {0} [<a href=
=3D"{3}">Next</a>/<a href=3D"{4}">Last</a>]</span>
+paging.banner.last=3D<span class=3D"pagelinks">[<a href=3D"{1}">First</a>/=
<a href=3D"{2}">Prev</a>] {0} [Next/Last]</span>
+paging.banner.onepage=3D<span class=3D"pagelinks">{0}</span>
+
+paging.banner.page.selected=3D<strong>{0}</strong>
+paging.banner.page.link=3D<a href=3D"{1}" title=3D"Go to page {0}">{0}</a>
+paging.banner.page.separator=3D, =
+
+# unused
+save.excel.banner=3D<a href=3D"{0}" rel=3D"external">save ({1} bytes)</a>
+save.excel.filename=3Dexport.xls
+
+
+
Added: trunk/WEB-INF/lib/commons-fileupload-1.2.jar
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/WEB-INF/=
lib/commons-fileupload-1.2.jar&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
Binary file - no diff available.
Added: trunk/WEB-INF/lib/commons-io-1.3.1.jar
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/WEB-INF/=
lib/commons-io-1.3.1.jar&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
Binary file - no diff available.
Modified: trunk/WEB-INF/lib/filterbuilder.jar
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/WEB-INF/lib/fil=
terbuilder.jar&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
Binary files - no diff available.
Modified: trunk/WEB-INF/lib/htmllexer.jar
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/WEB-INF/lib/htm=
llexer.jar&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
Binary files - no diff available.
Modified: trunk/WEB-INF/lib/htmlparser.jar
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/WEB-INF/lib/htm=
lparser.jar&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
Binary files - no diff available.
Modified: trunk/WEB-INF/lib/thumbelina.jar
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/WEB-INF/lib/thu=
mbelina.jar&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
Binary files - no diff available.
Added: trunk/WEB-INF/log4j.dtd
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/WEB-INF/=
log4j.dtd&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/WEB-INF/log4j.dtd (added)
+++ trunk/WEB-INF/log4j.dtd Fri Jun 15 16:37:09 2007
@@ -0,0 +1,166 @@
+<?xml version=3D"1.0" encoding=3D"UTF-8" ?>
+
+<!-- Authors: Chris Taylor, Ceki Gulcu. -->
+
+<!-- Version: 1.2 -->
+
+<!-- A configuration element consists of optional renderer
+elements,appender elements, categories and an optional root
+element. -->
+
+<!ELEMENT log4j:configuration (renderer*, appender*,(category|logger)*,roo=
t?,
+ categoryFactory?)>
+
+<!-- The "threshold" attribute takes a level value such that all -->
+<!-- logging statements with a level equal or below this value are -->
+<!-- disabled. -->
+
+<!-- Setting the "debug" enable the printing of internal log4j logging -=
->
+<!-- statements. -=
->
+
+<!-- By default, debug attribute is "null", meaning that we not do touch -=
->
+<!-- internal log4j logging settings. The "null" value for the threshold -=
->
+<!-- attribute can be misleading. The threshold field of a repository -->
+<!-- cannot be set to null. The "null" value for the threshold attribute -=
->
+<!-- simply means don't touch the threshold field, the threshold field -=
-> =
+<!-- keeps its old value. -=
->
+ =
+<!ATTLIST log4j:configuration
+ xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/" =
+ threshold (all|debug|info|warn|error|fatal|off|null) "nul=
l"
+ debug (true|false|null) "null"
+>
+
+<!-- renderer elements allow the user to customize the conversion of -->
+<!-- message objects to String. -->
+
+<!ELEMENT renderer EMPTY>
+<!ATTLIST renderer
+ renderedClass CDATA #REQUIRED
+ renderingClass CDATA #REQUIRED
+>
+
+<!-- Appenders must have a name and a class. -->
+<!-- Appenders may contain an error handler, a layout, optional parameters=
-->
+<!-- and filters. They may also reference (or include) other appenders. -->
+<!ELEMENT appender (errorHandler?, param*, layout?, filter*, appender-ref*=
)>
+<!ATTLIST appender
+ name ID #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT layout (param*)>
+<!ATTLIST layout
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT filter (param*)>
+<!ATTLIST filter
+ class CDATA #REQUIRED
+>
+
+<!-- ErrorHandlers can be of any class. They can admit any number of -->
+<!-- parameters. -->
+
+<!ELEMENT errorHandler (param*, root-ref?, logger-ref*, appender-ref?)> =
+<!ATTLIST errorHandler
+ class CDATA #REQUIRED =
+>
+
+<!ELEMENT root-ref EMPTY>
+
+<!ELEMENT logger-ref EMPTY>
+<!ATTLIST logger-ref
+ ref IDREF #REQUIRED
+>
+
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ name CDATA #REQUIRED
+ value CDATA #REQUIRED
+>
+
+
+<!-- The priority class is org.apache.log4j.Level by default -->
+<!ELEMENT priority (param*)>
+<!ATTLIST priority
+ class CDATA #IMPLIED
+ value CDATA #REQUIRED
+>
+
+<!-- The level class is org.apache.log4j.Level by default -->
+<!ELEMENT level (param*)>
+<!ATTLIST level
+ class CDATA #IMPLIED
+ value CDATA #REQUIRED
+>
+
+
+<!-- If no level element is specified, then the configurator MUST not -->
+<!-- touch the level of the named category. -->
+<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
+<!ATTLIST category
+ class CDATA #IMPLIED
+ name CDATA #REQUIRED
+ additivity (true|false) "true" =
+>
+
+<!-- If no level element is specified, then the configurator MUST not -->
+<!-- touch the level of the named logger. -->
+<!ELEMENT logger (level?,appender-ref*)>
+<!ATTLIST logger
+ name ID #REQUIRED
+ additivity (true|false) "true" =
+>
+
+
+<!ELEMENT categoryFactory (param*)>
+<!ATTLIST categoryFactory =
+ class CDATA #REQUIRED>
+
+<!ELEMENT appender-ref EMPTY>
+<!ATTLIST appender-ref
+ ref IDREF #REQUIRED
+>
+
+<!-- If no priority element is specified, then the configurator MUST not -=
->
+<!-- touch the priority of root. -->
+<!-- The root category always exists and cannot be subclassed. -->
+<!ELEMENT root (param*, (priority|level)?, appender-ref*)>
+
+
+<!-- =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
+<!-- A logging event =
-->
+<!-- =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
+<!ELEMENT log4j:eventSet (log4j:event*)>
+<!ATTLIST log4j:eventSet
+ xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/" =
+ version (1.1|1.2) "1.2" =
+ includesLocationInfo (true|false) "true"
+>
+
+
+
+<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?, =
+ log4j:locationInfo?) >
+
+<!-- The timestamp format is application dependent. -->
+<!ATTLIST log4j:event
+ logger CDATA #REQUIRED
+ level CDATA #REQUIRED
+ thread CDATA #REQUIRED
+ timestamp CDATA #REQUIRED
+>
+
+<!ELEMENT log4j:message (#PCDATA)>
+<!ELEMENT log4j:NDC (#PCDATA)>
+
+<!ELEMENT log4j:throwable (#PCDATA)>
+
+<!ELEMENT log4j:locationInfo EMPTY>
+<!ATTLIST log4j:locationInfo
+ class CDATA #REQUIRED
+ method CDATA #REQUIRED
+ file CDATA #REQUIRED
+ line CDATA #REQUIRED
+>
Modified: trunk/esiadmin/cachestatus.jsp
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/esiadmin/caches=
tatus.jsp&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/esiadmin/cachestatus.jsp (original)
+++ trunk/esiadmin/cachestatus.jsp Fri Jun 15 16:37:09 2007
@@ -1,16 +1,15 @@
-
<%@ include file=3D"inc/header.jsp" %>
=
=
<%
- this.getServletContext().setAttribute("urlCacheEntries",cacheS=
tatus.getUrlCacheEntries());
+ this.getServletConfig().getServletContext().setAttribute("urlCacheEntr=
ies", cacheStatus.getUrlCacheEntries());
=
%>
=
=
<br>
<em>
-<h1>Current State of Cache</h1>
+ <h1>Current State of Cache</h1>
</em>
<br>
<br>
@@ -20,7 +19,7 @@
defaultsort=3D"1" export=3D"true"
pagesize=3D"30"
decorator=3D"org.jahia.esi.admin.UrlCacheWrapper"
- >
+ >
<display:column property=3D"url"
title=3D"URL"
sortable=3D"true"
@@ -36,174 +35,174 @@
<display:column property=3D"updateCount"
title=3D"Updates"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"referenceCount"
title=3D"Reference Count"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"expirationDelayInSecs"
title=3D"Expiration Delay In Secs"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"creationDate"
title=3D"Creation Date"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"expirationDateInSecs"
title=3D"Expiration Date In Secs"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"timeToLiveInSecs"
title=3D"TimeToLive In Secs"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"readCount"
title=3D"Read Count"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"hitCount"
title=3D"Hit Count"
sortable=3D"true"
- headerClass=3D"sortable" />
+ headerClass=3D"sortable"/>
=
<display:column property=3D"methodName"
title=3D"Method"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"contentLength"
title=3D"Size"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"contentLengthBytes"
title=3D"Size in Bytes"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"contentCompressedSize"
title=3D"Compressed Size"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"contentType"
title=3D"Type"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"valid"
title=3D"Valid"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"inUse"
title=3D"Currently in Use"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"inUseLastSetDate"
title=3D"Last time in Use"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"siteId"
title=3D"SiteID"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"pid"
title=3D"Pid"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"mode"
title=3D"Mode"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"user"
title=3D"User who generated entry"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"locale"
title=3D"Locale under which entry was generated"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"user"
title=3D"User who generated entry"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"userParam"
title=3D"User sharing key"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"groupParam"
title=3D"Group sharing key"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"aclGroupParam"
title=3D"aclGroup sharing key"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"isTemplate"
title=3D"Template/Skeleton"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"fragmentId"
title=3D"Fragment #"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"absoluteKey"
title=3D"Absolute Sharing Key"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"nestedFragments"
title=3D"# of Nested Fragments"
sortable=3D"true"
headerClass=3D"sortable"
- />
+ />
=
<display:column property=3D"urlKey"
title=3D"HashKey"
sortable=3D"true"
headerClass=3D"sortable"
- /> =
+ />
=
<display:setProperty name=3D"export.pdf"
value=3D"true"/>
Modified: trunk/src/net/sf/j2ep/RequestThrottle.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/src/net/sf/j2ep=
/RequestThrottle.java&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/src/net/sf/j2ep/RequestThrottle.java (original)
+++ trunk/src/net/sf/j2ep/RequestThrottle.java Fri Jun 15 16:37:09 2007
@@ -47,16 +47,13 @@
import org.jahia.esi.settings.SettingsBean;
=
/**
- * Throttles request so that simultaneous requests for the same resource o=
nly spawn a maximum of one (or more)
- * requests to the remote server. Once the remote server returns
- * the resource, then all the waiting throttled requests are fulfilled.
- *
+ * Throttles request so that simultaneous requests for the same resource o=
nly spawn a maximum of one (or more) requests
+ * to the remote server. Once the remote server returns the resource, the=
n all the waiting throttled requests are
+ * fulfilled.
+ * <p/>
* This keeps the load down on the remote server.
- *
- * User: Marc
- * Date: Jul 4, 2006
- * Time: 12:32:31 AM
- * Copyright (C) Jahia Inc.
+ * <p/>
+ * User: Marc Date: Jul 4, 2006 Time: 12:32:31 AM Copyright (C) Jahia Inc.
*/
public class RequestThrottle {
=
@@ -64,7 +61,7 @@
=
int maxParallelRequests =3D 4;
=
- double minDelay =3D 500.0; //ms
+ double minDelay =3D 500.0;//ms
double maxDelay =3D 4000.0;
double tempDelay;
=
@@ -72,53 +69,73 @@
private final ConcurrentHashMap activeRequests =3D new ConcurrentHashM=
ap();
=
public RequestThrottle(int maxParallelRequests, long minDelay, long ma=
xDelay) {
- this.minDelay =3D (double)minDelay;
- this.maxDelay =3D (double)maxDelay;
+ this.minDelay =3D (double) minDelay;
+ this.maxDelay =3D (double) maxDelay;
this.maxParallelRequests =3D maxParallelRequests;
- this.tempDelay =3D maxDelay-minDelay;
+ this.tempDelay =3D maxDelay - minDelay;
}
=
public boolean throttle(String requestKey) {
boolean timedOut =3D false;
=
long startT =3D System.currentTimeMillis();
- long endWaitTime =3D System.currentTimeMillis() + SettingsBean.get=
Instance().getWaitTimeBeforeReturningMetaRefreshPageInSecs()*1000;
+ long endWaitTime =3D
+ System.currentTimeMillis() +
+ SettingsBean.getInstance().getWaitTimeBeforeReturningMetaR=
efreshPageInSecs() * 1000;
=
while (true) {
//is this request active?
if (activeRequests.containsKey(requestKey)) {
- Integer timesRequested =3D (Integer) activeRequests.get(r=
equestKey);
+ Integer timesRequested =3D (Integer) activeRequests.get(re=
questKey);
//sanity check since it's possible that activeRequests was=
updated between containsKey() call and get()
- if (timesRequested=3D=3Dnull) {
- if (log.isDebugEnabled()) log.debug("Request Integer c=
ount for "+requestKey+" was deleted by another concurrent access.");
+ if (timesRequested =3D=3D null) {
+ if (log.isDebugEnabled()) log.debug("Request Integer c=
ount for " +
+ requestKey +
+ " was deleted by a=
nother concurrent access.");
//so add it
- activeRequests.put(requestKey, new Integer(1) );
+ activeRequests.put(requestKey, new Integer(1));
break;
}
//yes, and we already have all slots granted to it, so wait
- else if (timesRequested.intValue() >=3D maxParallelRequest=
s ) {
+ else if (timesRequested.intValue() >=3D maxParallelRequest=
s) {
try {
long delay =3D getDelay();
- if (log.isInfoEnabled()) log.info("stalling ["+req=
uestKey+"] for ["+delay+"ms]. Total wait : "+(System.currentTimeMillis()-st=
artT)+" msecs. Throttle Queue size "+activeRequests.size()+".");
+ if (log.isInfoEnabled()) log.info("stalling [" +
+ requestKey +
+ "] for [" +
+ delay +
+ "ms]. Total wait=
: " +
+ (System.currentT=
imeMillis() - startT) +
+ " msecs. Throttl=
e Queue size " +
+ activeRequests.s=
ize() +
+ ".");
Thread.sleep(delay);
- } catch (InterruptedException e) {}
+ } catch (InterruptedException e) {
+ }
}
//no, so mark it and fetch it now
else {
- if (log.isDebugEnabled()) log.debug("incrementing ["+r=
equestKey+"] (was:"+timesRequested+")");
- activeRequests.put(requestKey, new Integer(timesReques=
ted.intValue() + 1) );
+ if (log.isDebugEnabled())
+ log.debug("incrementing [" + requestKey + "] (was:=
" + timesRequested + ")");
+ activeRequests.put(requestKey, new Integer(timesReques=
ted.intValue() + 1));
break;
}
}
//not active, so mark it as active and fetch it now
else {
- activeRequests.put(requestKey, new Integer(1) );
+ activeRequests.put(requestKey, new Integer(1));
break;
}
=
if (endWaitTime < System.currentTimeMillis()) {
timedOut =3D true;
- if (log.isInfoEnabled()) log.info("Exceeded max throttling=
time for ["+requestKey+"]. Total wait was : "+(System.currentTimeMillis()-=
startT)+" msecs. Throttle Queue size "+activeRequests.size()+".");
+ if (log.isInfoEnabled()) log.info("Exceeded max throttling=
time for [" +
+ requestKey +
+ "]. Total wait was : " +
+ (System.currentTimeMilli=
s() - startT) +
+ " msecs. Throttle Queue =
size " +
+ activeRequests.size() +
+ ".");
//TODO: could remove appropriate entry in activeRequests, =
but this if done in ResponseHandlerBase finally() method.
break;
}
@@ -128,25 +145,28 @@
}
=
public void removeRequest(String requestKey) {
-
- if (activeRequests.containsKey(requestKey)) {
- Integer timesRequested =3D (Integer) activeRequests.get(reque=
stKey);
- if (timesRequested.intValue() <=3D 1 ) {
+ Integer timesRequested =3D (Integer) activeRequests.get(requestKey=
);
+ if (timesRequested !=3D null) {
+ if (timesRequested.intValue() <=3D 1) {
activeRequests.remove(requestKey);
- if (log.isDebugEnabled()) log.debug("removed ["+requestKey=
+"]");
+ if (log.isDebugEnabled()) log.debug("removed [" + requestK=
ey + "]");
}
else {
- activeRequests.put(requestKey, new Integer(timesRequested.=
intValue() - 1) );
- if (log.isDebugEnabled()) log.debug("decremented ["+reques=
tKey+"] (was:"+timesRequested+")");
+ activeRequests.put(requestKey, new Integer(timesRequested.=
intValue() - 1));
+ if (log.isDebugEnabled()) log.debug("decremented [" + requ=
estKey + "] (was:" + timesRequested + ")");
}
}
else {
- log.warn("trying to remove absent ["+requestKey+"] from Throt=
tle Queue (size "+activeRequests.size()+").");
+ log.warn("trying to remove absent [" +
+ requestKey +
+ "] from Throttle Queue (size " +
+ activeRequests.size() +
+ ").");
}
}
=
public long getDelay() {
- return (long)(minDelay + Math.random()*tempDelay);
+ return (long) (minDelay + Math.random() * tempDelay);
}
=
}
Modified: trunk/src/net/sf/j2ep/requesthandlers/EntityEnclosingRequestHandl=
er.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/src/net/sf/j2ep=
/requesthandlers/EntityEnclosingRequestHandler.java&rev=3D397&repname=3Desi=
_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/src/net/sf/j2ep/requesthandlers/EntityEnclosingRequestHandler.jav=
a (original)
+++ trunk/src/net/sf/j2ep/requesthandlers/EntityEnclosingRequestHandler.jav=
a Fri Jun 15 16:37:09 2007
@@ -1,12 +1,12 @@
/*
* Copyright 2000,2004 The Apache Software Foundation.
- * =
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- * =
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- * =
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,13 +18,20 @@
=
import net.sf.j2ep.factories.ResponseHandlerFactory;
import net.sf.j2ep.methods.WebDavMethod;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.*;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.DeferredFileOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
=
import javax.servlet.http.HttpServletRequest;
+import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
=
/**
* Handler for POST and PUT methods.
@@ -36,33 +43,81 @@
private static final transient Log log =3D LogFactory.getLog(EntityEnc=
losingRequestHandler.class);
=
/**
- * Will set the input stream and the Content-Type header to match this=
request.
- * Will also set the other headers send in the request.
+ * Will set the input stream and the Content-Type header to match this=
request. Will also set the other headers send
+ * in the request.
*
* @throws IOException An exception is throws when there is a problem =
getting the input stream
* @see net.sf.j2ep.model.RequestHandler#process(javax.servlet.http.Ht=
tpServletRequest,java.lang.String)
*/
- public HttpMethod process(HttpServletRequest request, String url) thro=
ws IOException {
+ public HttpMethod process(final HttpServletRequest request, String url=
) throws IOException {
=
HttpMethod method =3D null;
-
+ boolean isMultipart =3D false;
if (request.getMethod().equalsIgnoreCase("POST")) {
method =3D new PostMethod(url);
- } else if (request.getMethod().equalsIgnoreCase("PUT")) {
+ final ServletRequestContext servletRequestContext =3D new Serv=
letRequestContext(request);
+ if (ServletFileUpload.isMultipartContent(servletRequestContext=
)) {
+ isMultipart =3D true;
+ method.getParams().setSoTimeout(1000 * 60 * 5);//(1s * 60 =
=3D 1min) * 5 =3D 5 min
+ ((PostMethod) method).setRequestEntity(new RequestEntity()=
{
+ InputStream content =3D request.getInputStream();
+ private long contentLength =3D -2;
+ private String contentType =3D request.getContentType(=
);
+ private DeferredFileOutputStream dfos;
+
+ public boolean isRepeatable() {
+ return true;
+ }
+
+ public void writeRequest(OutputStream out) throws IOEx=
ception {
+ dfos.writeTo(out);
+ final File file =3D dfos.getFile();
+ if (file !=3D null && file.exists()) file.delete();
+ }
+
+ public long getContentLength() {
+ if (contentLength =3D=3D -2) {
+ try {
+ dfos =3D new DeferredFileOutputStream(1024=
* 1024 * 10,
+ File.=
createTempFile("temp", "upload"));
+ IOUtils.copy(content, dfos);
+ } catch (IOException e) {
+ log.error("Error during copy of file", e);
+ } finally {
+ if (dfos !=3D null) try {
+ dfos.close();
+ contentLength =3D dfos.getByteCount();
+ } catch (IOException e) {
+ log.error("Error during closing of fil=
e", e);
+ }
+ }
+ }
+ return contentLength;
+ }
+
+ public String getContentType() {
+ return contentType;
+ }
+ });
+ }
+ }
+ else if (request.getMethod().equalsIgnoreCase("PUT")) {
method =3D new PutMethod(url);
- } else if (request.getMethod().equalsIgnoreCase("DELETE")) {
+ }
+ else if (request.getMethod().equalsIgnoreCase("DELETE")) {
method =3D new DeleteMethod(url);
- } else if (ResponseHandlerFactory.handledWebDAVMethods.indexOf(req=
uest.getMethod().toUpperCase()) !=3D -1) {
+ }
+ else if (ResponseHandlerFactory.handledWebDAVMethods.indexOf(reque=
st.getMethod().toUpperCase()) !=3D -1) {
method =3D new WebDavMethod(request.getMethod().toUpperCase(),=
url);
log.debug("WebDAV method [" + request.getMethod() + "] for req=
uest url [" + url + "]");
}
=
setHeaders(method, request);
=
- InputStreamRequestEntity stream;
- stream =3D new InputStreamRequestEntity(request.getInputStream());
if (method !=3D null) {
- if (method instanceof EntityEnclosingMethod) {
+ if (method instanceof EntityEnclosingMethod && !isMultipart) {
+ InputStreamRequestEntity stream;
+ stream =3D new InputStreamRequestEntity(request.getInputSt=
ream());
((EntityEnclosingMethod) method).setRequestEntity(stream);
}
method.setRequestHeader("Content-type", request.getContentType=
());
@@ -70,6 +125,4 @@
return method;
=
}
-
-
}
Modified: trunk/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/src/net/sf/j2ep=
/responsehandlers/ResponseHandlerBase.java&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java (origin=
al)
+++ trunk/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java Fri Jun=
15 16:37:09 2007
@@ -525,9 +525,11 @@
=
initOrigRequestUrl(_clientRequest, server);
=
- String cacheKey =3D CacheKeyGenerator.getInstance().generateEntryK=
eyUsingCookie(server, clientRequest, this.getClientRequestURL(), true);
+ URL requestURL =3D this.getClientRequestURL();
+ String cacheKey =3D CacheKeyGenerator.getInstance().generateEntryK=
eyUsingCookie(server, clientRequest,
+ =
requestURL, true);
=
- String clientRequestUrl =3D this.getClientRequestURL().toString();=
//TODO: inefficient: called twice in a row
+ String clientRequestUrl =3D requestURL.toString(); //TODO: ineffic=
ient: called twice in a row
String throttlingKey =3D clientRequest.getMethod().toUpperCase() +=
clientRequestUrl;
=
MainCache mainCache =3D MainCache.getInstance();
@@ -539,13 +541,13 @@
boolean throttledCurrentRequest =3D false;
boolean fetchedNewData =3D false;
=
+ final SettingsBean settingsBean =3D SettingsBean.getInstance();
try {
//Deal with POSTs and such like
if (RuleExecutor.getInstance().checkforMatchingPassThroughRule=
s(server, clientRequest, methodToServer, clientRequestUrl)) {
=
throttlingKey =3D throttlingKey+Utils.getUserCookieValue(c=
lientRequest);
- if (SettingsBean.getInstance().isRequestThrottle()
- && SettingsBean.getInstance().isRequestThrottlePOSTs()=
) {
+ if (settingsBean.isRequestThrottle() && settingsBean.isReq=
uestThrottlePOSTs()) {
boolean triggerMetaRefresh =3D systemInit.getRequestTh=
rottle().throttle(throttlingKey); //TODO: add special rule for login/logou=
t pages so as not to throttle them?
throttledCurrentRequest =3Dtrue;
if (triggerMetaRefresh) {
@@ -595,11 +597,12 @@
String requestInfoKey =3D null;
boolean userAclDeclaredForCurrentRequest=3Dfalse;
=
- if (SettingsBean.getInstance().isEnableTemplateCaching()) {
+ if (settingsBean.isEnableTemplateCaching()) {
String[] userInfo =3D retrieveUserInfo(clientRequest);
userName =3D userInfo[0];
userAclGroupKey =3D userInfo[1];
- requestInfoKey =3D CacheKeyGenerator.getInstance().gen=
erateRequestInfoKey(server, clientRequest, this.getClientRequestURL()) ;
+ requestInfoKey =3D CacheKeyGenerator.getInstance().gen=
erateRequestInfoKey(server, clientRequest,
+ =
requestURL) ;
requestInfo =3D mainCache.getRequestInfo(requestInfoKe=
y);
if (requestInfo!=3Dnull && userName!=3Dnull)
userAclDeclaredForCurrentRequest =3D requestInfo.=
isUserInTemplateUserACLs(userName);
@@ -617,7 +620,8 @@
&& requestInfo!=3Dnull //we must have fetched=
its info beforehand
&& requestInfo.isAclGroupTemplate() //must be =
a template
&& userName!=3Dnull ) { //not a guest user, bu=
t logged-in user
- newCacheKey =3D CacheKeyGenerator.getInstance().ge=
nerateEntryKeyUsingUserGroups (server, clientRequest, this.getClientRequest=
URL(), true,userAclGroupKey);
+ newCacheKey =3D CacheKeyGenerator.getInstance().ge=
nerateEntryKeyUsingUserGroups (server, clientRequest,
+ =
requestURL, true,userAclGroupKey);
if (log.isDebugEnabled())
log.debug("aclGrouped shared Template detected=
. userAclGroupKey ["+userAclGroupKey+"] - userName ["+userName+"]");
yesItsCached =3D mainCache.contains(newCacheKey,tr=
ue,userAclGroupKey,userName,requestInfo);
@@ -628,7 +632,8 @@
// ok but still try find entry without the esi coo=
kie in urlKey
// since this might be a non-esi-parsable obj (i.e=
binary, css, static html)
// which is stored without a cookie:
- newCacheKey =3D CacheKeyGenerator.getInstance().ge=
nerateEntryKeyWithoutCookie(server, clientRequest, this.getClientRequestURL=
(), true);
+ newCacheKey =3D CacheKeyGenerator.getInstance().ge=
nerateEntryKeyWithoutCookie(server, clientRequest,
+ =
requestURL, true);
yesItsCached =3D mainCache.contains(newCacheKey,tr=
ue, userAclGroupKey,userName,requestInfo); //TODO: the last 3 aclGroup para=
ms might not be necessary
throttlingKey =3D throttlingKey+Utils.getUserCooki=
eValue(clientRequest);
}
@@ -671,7 +676,7 @@
if (cacheObject.getUrlCacheObject().getResponseHea=
der(EsiConst.JAHIAESI_PID) !=3D null) {
//If AggregatePageOnTheFly=3Dtrue and this isn=
't a guest user, then we need to regenerate
//this entry from scratch, so ignore the cache=
d entry (since it is only the skeleton, not the whole page)
- if (SettingsBean.getInstance().isAggregateLogg=
edUserPagesOnTheFly()
+ if (settingsBean.isAggregateLoggedUserPagesOnT=
heFly()
//this IS a logged-in user
&& Utils.getUserCookieValue(clientRequ=
est)!=3Dnull ) {
cacheObject =3D null;
@@ -721,7 +726,7 @@
byte[] wholePageBytes =3D null;
=
//deal with the case when we are overloaded with request, =
just return a refresh-later page back to client browser
- if ( SettingsBean.getInstance().isEnableMetaRefreshOnHe=
avyLoad()
+ if ( settingsBean.isEnableMetaRefreshOnHeavyLoad()
&& !cached
&& systemInit.getCacheableThreadsAvailable().avail=
ablePermits() =3D=3D 0) {
boolean resourcesNowAvailable =3D waitLoop();
@@ -732,7 +737,7 @@
}
=
if (!cached ) {
- if (SettingsBean.getInstance().isRequestThrottle()) {
+ if (settingsBean.isRequestThrottle()) {
boolean triggerMetaRefresh =3D systemInit.getReque=
stThrottle().throttle(throttlingKey);
throttledCurrentRequest =3Dtrue;
if (triggerMetaRefresh) {
@@ -831,8 +836,8 @@
//So we can guarantee that the returned Set-Cookie is the =
one targetted for the current client
boolean ignoreCookies =3D !freshCopy;
//special case for OntheFly and aclGrou-template sharing, =
since these always use fetch() but don't necessarily retrieve from remote s=
erver
- if ((SettingsBean.getInstance().isAggregateLoggedUserPages=
OnTheFly()
- || SettingsBean.getInstance().isEnableTem=
plateCaching())
+ if ((settingsBean.isAggregateLoggedUserPagesOnTheFly()
+ || settingsBean.isEnableTemplateCaching())
&& wholePageBytes!=3Dnull )
ignoreCookies =3D !fetchedNewData;
=
@@ -896,8 +901,8 @@
=
//If AggregateLoggedUserPagesOnTheFly=3Dtrue, =
the wholepage is served then deleted so that
//we only keep the skeleton in cache
- if ((SettingsBean.getInstance().isAggregateLog=
gedUserPagesOnTheFly()
- || SettingsBean.getInstance().isEnableTem=
plateCaching())
+ if ((settingsBean.isAggregateLoggedUserPagesOn=
TheFly()
+ || settingsBean.isEnableTemplateCaching())
&& wholePageBytes!=3Dnull ) {
sendStreamToClientFromCache(clientResponse=
, wholePageBytes);
}
@@ -926,7 +931,7 @@
}
}
finally {
- if (throttledCurrentRequest && SettingsBean.getInstance().isRe=
questThrottle()) {
+ if (throttledCurrentRequest && settingsBean.isRequestThrottle(=
)) {
systemInit.getRequestThrottle().removeRequest(throttlingKe=
y);
}
=
Modified: trunk/src/org/jahia/esi/Utils.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/src/org/jahia/e=
si/Utils.java&rev=3D397&repname=3Desi_server
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/src/org/jahia/esi/Utils.java (original)
+++ trunk/src/org/jahia/esi/Utils.java Fri Jun 15 16:37:09 2007
@@ -77,7 +77,7 @@
public static final String COPYRIGHT =3D
"© Copyright 2002-2007 <a href=3D\"http://www.jahia.org\"=
target=3D\"newJahia\">Jahia Ltd</a> -";
=
- public static final String BUILDNUMBER=3D"buildnumber_379:395M";
+ public static final String BUILDNUMBER=3D"buildnumber_379:396M";
=
public static String stackTraceToString(Exception ex) {
// Append stack trace if not null
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list