Experimental patch to all you to optionally buffer the incoming payload
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/ea8347ac Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/ea8347ac Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/ea8347ac Branch: refs/heads/tomee-1.7.x Commit: ea8347ac0cb050a569485c16655e3acc71525efc Parents: c702597 Author: Jonathan Gallimore <j...@jrg.me.uk> Authored: Fri Sep 16 10:12:49 2016 +0100 Committer: Jonathan Gallimore <j...@jrg.me.uk> Committed: Fri Sep 16 10:12:49 2016 +0100 ---------------------------------------------------------------------- .../org/apache/openejb/server/ejbd/EjbDaemon.java | 15 +++++++++++++++ .../java/org/apache/tomee/catalina/TomcatLoader.java | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/ea8347ac/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java ---------------------------------------------------------------------- diff --git a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java index 24f871f..c94ab3a 100644 --- a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java +++ b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java @@ -28,6 +28,7 @@ import org.apache.openejb.client.RequestType; import org.apache.openejb.client.Response; import org.apache.openejb.client.ServerMetaData; import org.apache.openejb.client.serializer.EJBDSerializer; +import org.apache.openejb.loader.IO; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.server.DiscoveryAgent; import org.apache.openejb.server.context.RequestInfos; @@ -40,6 +41,8 @@ import org.apache.openejb.util.Logger; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; @@ -65,6 +68,7 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { private ContainerSystem containerSystem; private boolean gzip; private boolean debugPayload; + private boolean bufferStream; private EJBDSerializer serializer = null; //Four hours @@ -82,6 +86,7 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { clusterHandler = new ClusterRequestHandler(this); gzip = "true".equalsIgnoreCase(props.getProperty("gzip", "false")); debugPayload = "true".equalsIgnoreCase(props.getProperty("debugPayload", "true")); + bufferStream = "true".equalsIgnoreCase(props.getProperty("bufferStream", "false")); try { this.timeout = Integer.parseInt(props.getProperty("timeout", "14400000")); @@ -181,6 +186,16 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { final RequestInfos.RequestInfo info = RequestInfos.info(); info.setInputStream(debugPayload ? new CountingInputStream(rawIn) : rawIn); + if (bufferStream) { + + // get entire buffer + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final InputStream is = info.getInputStream(); + IO.copy(is, baos); + is.close(); + info.setInputStream(new ByteArrayInputStream(baos.toByteArray())); + } + // Read client Protocol Version final InputStream cis = info.getInputStream(); clientProtocol.readExternal(cis); http://git-wip-us.apache.org/repos/asf/tomee/blob/ea8347ac/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java ---------------------------------------------------------------------- diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java index 84b1b18..80ab465 100644 --- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java +++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java @@ -258,7 +258,7 @@ public class TomcatLoader implements Loader { final Properties ejbServerProps = new Properties(); ejbServerProps.putAll(properties); - for (final String prop : new String[] { "serializer", "gzip", "debugPayload" }) { // ensure -Dejbd.xxx are read + for (final String prop : new String[] { "serializer", "gzip", "debugPayload", "bufferStream" }) { // ensure -Dejbd.xxx are read final String value = SystemInstance.get().getProperty("ejbd." + prop); if (value != null) { ejbServerProps.put(prop, value);