svn commit: r1821038 - in /ofbiz/branches/release16.11: ./ applications/content/config/ applications/content/src/main/java/org/apache/ofbiz/content/data/ framework/base/src/main/java/org/apache/ofbiz/base/util/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1821038 - in /ofbiz/branches/release16.11: ./ applications/content/config/ applications/content/src/main/java/org/apache/ofbiz/content/data/ framework/base/src/main/java/org/apache/ofbiz/base/util/

jleroux@apache.org
Author: jleroux
Date: Fri Jan 12 22:19:22 2018
New Revision: 1821038

URL: http://svn.apache.org/viewvc?rev=1821038&view=rev
Log:
"Applied fix from trunk framework for revision: 1821036"
------------------------------------------------------------------------
r1821036 | jleroux | 2018-01-12 22:59:22 +0100 (ven., 12 janv. 2018) | 11 lines

Fixed: streaming large content cause out of memory exception.
(OFBIZ-10133)

When ofbiz streams a large content (eg. video file), get out of memory exception.

To reproduce the issue see the Jira

jleroux: I just removed final for bufferSize, I see no needs for that local
variable

Thanks: Wai for the patch Michael for the discussion
------------------------------------------------------------------------


Modified:
    ofbiz/branches/release16.11/   (props changed)
    ofbiz/branches/release16.11/applications/content/config/content.properties
    ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java
    ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java
    ofbiz/branches/release16.11/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java

Propchange: ofbiz/branches/release16.11/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jan 12 22:19:22 2018
@@ -10,5 +10,5 @@
 /ofbiz/branches/json-integration-refactoring:1634077-1635900
 /ofbiz/branches/multitenant20100310:921280-927264
 /ofbiz/branches/release13.07:1547657
-/ofbiz/ofbiz-framework/trunk:1783202,1783388,1784549,1784558,1784708,1785882,1785925,1786079,1786214,1786525,1787047,1787133,1787176,1787535,1787906-1787911,1787949,1789665,1789863,1789874,1790396,1790810,1791277,1791288,1791342,1791346,1791490,1791496,1791625,1791634,1791791,1791804,1792270,1792272,1792275,1792432,1792609,1792638,1794008,1794132,1796047,1796262,1797733,1798668,1798682,1798796,1798803,1798808,1799088,1799183,1799327,1799417,1799687,1799767,1799793,1799859,1800250,1800780,1800832,1800853,1801094,1801262-1801263,1801273-1801274,1801303,1801318-1801319,1801336,1801340,1801346,1801349-1801350,1801359,1801742,1802657,1802766,1803525,1804656,1804843,1804847,1804859,1805143,1805558,1805880,1806036,1806220,1806266,1806269,1806951,1807597,1807890,1808834,1809399,1809429,1809594,1809741,1810102,1811794,1812387,1813600,1813617,1813647,1813833,1814277,1814319,1814349,1814501,1814591,1814642,1814644,1814709,1814873,1814928,1814934,1815059,1816264,1816273,1816289,1816291,1816297,
 1816369,1816373,1816461,1816635,1816795,1818101,1818269,1818273,1818402,1819122,1819136,1819144,1819811,1820823,1820949,1820966,1821012
+/ofbiz/ofbiz-framework/trunk:1783202,1783388,1784549,1784558,1784708,1785882,1785925,1786079,1786214,1786525,1787047,1787133,1787176,1787535,1787906-1787911,1787949,1789665,1789863,1789874,1790396,1790810,1791277,1791288,1791342,1791346,1791490,1791496,1791625,1791634,1791791,1791804,1792270,1792272,1792275,1792432,1792609,1792638,1794008,1794132,1796047,1796262,1797733,1798668,1798682,1798796,1798803,1798808,1799088,1799183,1799327,1799417,1799687,1799767,1799793,1799859,1800250,1800780,1800832,1800853,1801094,1801262-1801263,1801273-1801274,1801303,1801318-1801319,1801336,1801340,1801346,1801349-1801350,1801359,1801742,1802657,1802766,1803525,1804656,1804843,1804847,1804859,1805143,1805558,1805880,1806036,1806220,1806266,1806269,1806951,1807597,1807890,1808834,1809399,1809429,1809594,1809741,1810102,1811794,1812387,1813600,1813617,1813647,1813833,1814277,1814319,1814349,1814501,1814591,1814642,1814644,1814709,1814873,1814928,1814934,1815059,1816264,1816273,1816289,1816291,1816297,
 1816369,1816373,1816461,1816635,1816795,1818101,1818269,1818273,1818402,1819122,1819136,1819144,1819811,1820823,1820949,1820966,1821012,1821036
 /ofbiz/trunk:1770481,1770490,1770540,1771440,1771448,1771516,1771935,1772346,1772880,1774772,1775441,1779724,1780659,1781109,1781125,1781979,1782498,1782520

Modified: ofbiz/branches/release16.11/applications/content/config/content.properties
URL: http://svn.apache.org/viewvc/ofbiz/branches/release16.11/applications/content/config/content.properties?rev=1821038&r1=1821037&r2=1821038&view=diff
==============================================================================
--- ofbiz/branches/release16.11/applications/content/config/content.properties (original)
+++ ofbiz/branches/release16.11/applications/content/config/content.properties Fri Jan 12 22:19:22 2018
@@ -21,6 +21,7 @@ img.request=/content/control/img/
 img.request.param.name=imgId
 
 stream.permission.service=genericContentPermission
+stream.buffersize=8192
 
 baseUrl=https://localhost:8443
 disable.ftl.template.cache=true
@@ -37,4 +38,6 @@ content.upload.always.local.file=true
 content.output.path=runtime/output
 
 # default mime type used in *ContentWrapper classes
-defaultMimeType=text/html; charset=utf-8
\ No newline at end of file
+defaultMimeType=text/html; charset=utf-8
+
+

Modified: ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java?rev=1821038&r1=1821037&r2=1821038&view=diff
==============================================================================
--- ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java (original)
+++ ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java Fri Jan 12 22:19:22 2018
@@ -169,7 +169,7 @@ public class DataEvents {
         String mimeType = DataResourceWorker.getMimeType(dataResource);
 
         // hack for IE and mime types
-        if (userAgent.indexOf("MSIE") > -1) {
+        if (UtilValidate.isNotEmpty(userAgent) && userAgent.indexOf("MSIE") > -1) {
             Debug.logInfo("Found MSIE changing mime type from - " + mimeType, module);
             mimeType = "application/octet-stream";
         }

Modified: ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java?rev=1821038&r1=1821037&r2=1821038&view=diff
==============================================================================
--- ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java (original)
+++ ofbiz/branches/release16.11/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java Fri Jan 12 22:19:22 2018
@@ -29,6 +29,8 @@ import java.io.Writer;
 import java.net.URL;
 import java.net.URLConnection;
 import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.StandardOpenOption;
 import java.sql.Timestamp;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -47,7 +49,6 @@ import org.apache.commons.fileupload.Fil
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.tika.Tika;
 import org.apache.ofbiz.base.location.FlexibleLocation;
@@ -1043,7 +1044,7 @@ public class DataResourceWorker  impleme
             String objectInfo = dataResource.getString("objectInfo");
             if (UtilValidate.isNotEmpty(objectInfo)) {
                 File file = DataResourceWorker.getContentFile(dataResourceTypeId, objectInfo, contextRoot);
-                return UtilMisc.toMap("stream", new ByteArrayInputStream(FileUtils.readFileToByteArray(file)), "length", Long.valueOf(file.length()));
+                return UtilMisc.toMap("stream", Files.newInputStream(file.toPath(), StandardOpenOption.READ), "length", Long.valueOf(file.length()));
             } else {
                 throw new GeneralException("No objectInfo found for FILE type [" + dataResourceTypeId + "]; cannot stream");
             }

Modified: ofbiz/branches/release16.11/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release16.11/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java?rev=1821038&r1=1821037&r2=1821038&view=diff
==============================================================================
--- ofbiz/branches/release16.11/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java (original)
+++ ofbiz/branches/release16.11/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java Fri Jan 12 22:19:22 2018
@@ -56,6 +56,7 @@ import org.apache.http.conn.ssl.TrustSel
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.ssl.SSLContexts;
+import org.apache.ofbiz.entity.util.EntityUtilProperties;
 import org.apache.oro.text.regex.MalformedPatternException;
 import org.apache.oro.text.regex.Pattern;
 import org.apache.oro.text.regex.PatternMatcher;
@@ -1047,8 +1048,6 @@ public final class UtilHttp {
      * @throws IOException
      */
     public static void streamContent(OutputStream out, InputStream in, int length) throws IOException {
-        int bufferSize = 512; // same as the default buffer size; change as needed
-
         // make sure we have something to write to
         if (out == null) {
             throw new IOException("Attempt to write to null output stream");
@@ -1065,6 +1064,9 @@ public final class UtilHttp {
         }
 
         // initialize the buffered streams
+
+        int bufferSize = EntityUtilProperties.getPropertyAsInteger("content", "stream.buffersize", 8192);
+
         BufferedOutputStream bos = new BufferedOutputStream(out, bufferSize);
         BufferedInputStream bis = new BufferedInputStream(in, bufferSize);