Author: cmailleux
Date: Mon Sep 17 10:02:40 2007
New Revision: 18510
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18510&repname=
=3Djahia
Log:
Avoid deadlock under load
Modified:
branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava
Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaT=
ools.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/utils/JahiaTools.java&rev=3D18510&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
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava Mon Sep 17 10:02:40 2007
@@ -32,6 +32,9 @@
import org.apache.commons.jexl.ExpressionFactory;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.JexlHelper;
+import org.apache.commons.io.output.DeferredFileOutputStream;
+import org.apache.commons.io.FileCleaner;
+import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.jahia.bin.Jahia;
import org.jahia.params.ProcessingContext;
@@ -1317,14 +1320,23 @@
if (locationHeader !=3D null) {
redirectLocation =3D locationHeader.getValue();
url =3D new URL(redirectLocation);
+ method.releaseConnection();
logger.info("Redirection to a different host ["+url +"=
]");
} else {
+ method.releaseConnection();
throw new IOException("No HTTP location Header in redi=
rect send by request to ["+url +"]. HTTP status code ["+result+"]");
}
} else if (result !=3D HttpStatus.SC_OK) {
+ method.releaseConnection();
throw new IOException("Unsupported HTTP status code ["+res=
ult+" i.e. "+method.getStatusText()+"] for request to ["+url +"].");
} else {
- return method.getResponseBodyAsStream();
+ DeferredFileOutputStream dfos =3D
+ new DeferredFileOutputStream(1024 * 1024 * 10, Fil=
e.createTempFile("temp", "httpclient"));
+ InputStream inputStream =3D new BufferedInputStream(new Fi=
leInputStream(dfos.getFile()));
+ FileCleaner.track(dfos.getFile(), inputStream);
+ IOUtils.copy(method.getResponseBodyAsStream(), dfos);
+ method.releaseConnection();
+ return inputStream;
}
}
=
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list