TOMEE-1917 experimental option to skip CountingInputStream/OutputStream
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/6e8a023b Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/6e8a023b Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/6e8a023b Branch: refs/heads/tomee-1.7.x Commit: 6e8a023bb1e73ef384ac01a42367a1bff8c04be8 Parents: 41d223e Author: Jonathan Gallimore <[email protected]> Authored: Sun Aug 28 00:57:58 2016 +0100 Committer: Jonathan Gallimore <[email protected]> Committed: Sun Aug 28 00:57:58 2016 +0100 ---------------------------------------------------------------------- .../apache/openejb/server/ejbd/EjbDaemon.java | 10 ++++++---- .../openejb/server/ejbd/JndiRequestHandler.java | 16 +++++++++------ .../openejb/server/httpd/OpenEJBHttpServer.java | 7 ++++--- .../openejb/server/context/RequestInfos.java | 21 ++++++++++++-------- 4 files changed, 33 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/6e8a023b/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 e367c0a..24f871f 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 @@ -64,6 +64,7 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { private ContainerSystem containerSystem; private boolean gzip; + private boolean debugPayload; private EJBDSerializer serializer = null; //Four hours @@ -80,6 +81,7 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { authHandler = new AuthRequestHandler(this); clusterHandler = new ClusterRequestHandler(this); gzip = "true".equalsIgnoreCase(props.getProperty("gzip", "false")); + debugPayload = "true".equalsIgnoreCase(props.getProperty("debugPayload", "true")); try { this.timeout = Integer.parseInt(props.getProperty("timeout", "14400000")); @@ -177,10 +179,10 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { try { final RequestInfos.RequestInfo info = RequestInfos.info(); - info.setInputStream(new CountingInputStream(rawIn)); + info.setInputStream(debugPayload ? new CountingInputStream(rawIn) : rawIn); // Read client Protocol Version - final CountingInputStream cis = info.getInputStream(); + final InputStream cis = info.getInputStream(); clientProtocol.readExternal(cis); ois = new EjbObjectInputStream(cis); @@ -251,9 +253,9 @@ public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer { } try { - info.setOutputStream(new CountingOutputStream(rawOut)); + info.setOutputStream(debugPayload ? new CountingOutputStream(rawOut) : rawOut); - final CountingOutputStream cos = info.getOutputStream(); + final OutputStream cos = info.getOutputStream(); //Let client know we are using the requested protocol to respond clientProtocol.writeExternal(cos); http://git-wip-us.apache.org/repos/asf/tomee/blob/6e8a023b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java ---------------------------------------------------------------------- diff --git a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java index 426eeb5..6c1429d 100644 --- a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java +++ b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java @@ -65,8 +65,10 @@ import javax.sql.DataSource; import javax.validation.Validator; import javax.validation.ValidatorFactory; import javax.xml.namespace.QName; +import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; @@ -215,12 +217,14 @@ class JndiRequestHandler extends RequestHandler { private void logRequestResponse(final JNDIRequest req, final JNDIResponse res) { final RequestInfos.RequestInfo info = RequestInfos.info(); - final CountingInputStream cis = info.getInputStream(); - final CountingOutputStream cos = info.getOutputStream(); - - logger.debug("JNDI REQUEST: " + req + " (size = " + (null != cis ? cis.getCount() : 0) - + "b, remote-ip =" + info.ip - + ") -- RESPONSE: " + res + " (size = " + (null != cos ? cos.getCount() : 0) + "b)"); + final InputStream cis = info.getInputStream(); + final OutputStream cos = info.getOutputStream(); + + logger.debug("JNDI REQUEST: " + req + " (size = " + + (null != cis && CountingInputStream.class.isInstance(cis)? CountingInputStream.class.cast(cis).getCount() + "b" : "unknown") + + ", remote-ip =" + info.ip + + ") -- RESPONSE: " + res + " (size = " + + (null != cos && CountingOutputStream.class.isInstance(cos)? CountingOutputStream.class.cast(cos).getCount() + "b" : "unknown") + ")"); } private String getPrefix(final JNDIRequest req) throws NamingException { http://git-wip-us.apache.org/repos/asf/tomee/blob/6e8a023b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java ---------------------------------------------------------------------- diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java index e0eb6f9..763d4f6 100644 --- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java +++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java @@ -59,6 +59,7 @@ public class OpenEJBHttpServer implements HttpServer { private HttpListener listener; private Set<Output> print; private boolean indent; + private boolean debugPayload; public OpenEJBHttpServer() { this(getHttpListenerRegistry()); @@ -102,8 +103,8 @@ public class OpenEJBHttpServer implements HttpServer { try { RequestInfos.initRequestInfo(socket); - in = new CountingInputStream(socket.getInputStream()); - out = new CountingOutputStream(socket.getOutputStream()); + in = debugPayload ? new CountingInputStream(socket.getInputStream()) : socket.getInputStream(); + out = debugPayload ? new CountingOutputStream(socket.getOutputStream()) : socket.getOutputStream(); //TODO: if ssl change to https final URI socketURI = new URI("http://" + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort()); @@ -152,7 +153,7 @@ public class OpenEJBHttpServer implements HttpServer { options.setLogger(new OptionsLog(log)); print = options.getAll("print", OpenEJBHttpServer.Output.class); indent = print.size() > 0 && options.get("indent.xml", false); - + debugPayload = "true".equalsIgnoreCase(props.getProperty("debugPayload", "true")); } public enum Output { http://git-wip-us.apache.org/repos/asf/tomee/blob/6e8a023b/server/openejb-server/src/main/java/org/apache/openejb/server/context/RequestInfos.java ---------------------------------------------------------------------- diff --git a/server/openejb-server/src/main/java/org/apache/openejb/server/context/RequestInfos.java b/server/openejb-server/src/main/java/org/apache/openejb/server/context/RequestInfos.java index d5db407..9a9828c 100644 --- a/server/openejb-server/src/main/java/org/apache/openejb/server/context/RequestInfos.java +++ b/server/openejb-server/src/main/java/org/apache/openejb/server/context/RequestInfos.java @@ -20,6 +20,8 @@ import org.apache.openejb.server.stream.CountingInputStream; import org.apache.openejb.server.stream.CountingOutputStream; import javax.servlet.http.HttpServletRequest; +import java.io.InputStream; +import java.io.OutputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; @@ -73,10 +75,10 @@ public final class RequestInfos { public static class RequestInfo { public String ip; - private CountingInputStream inputStream; - private CountingOutputStream outputStream; + private InputStream inputStream; + private OutputStream outputStream; - public CountingInputStream getInputStream() { + public InputStream getInputStream() { if (null == inputStream) { throw new RuntimeException("InputStream has not been set"); @@ -85,7 +87,7 @@ public final class RequestInfos { return inputStream; } - public CountingOutputStream getOutputStream() { + public OutputStream getOutputStream() { if (null == outputStream) { throw new RuntimeException("OutputStream has not been set"); @@ -94,11 +96,11 @@ public final class RequestInfos { return outputStream; } - public void setInputStream(final CountingInputStream inputStream) { + public void setInputStream(final InputStream inputStream) { this.inputStream = inputStream; } - public void setOutputStream(final CountingOutputStream outputStream) { + public void setOutputStream(final OutputStream outputStream) { this.outputStream = outputStream; } @@ -106,8 +108,11 @@ public final class RequestInfos { public String toString() { return "RequestInfo{" + "ip='" + ip + '\'' - + ", request-size=" + (inputStream != null ? inputStream.getCount() : "unknown") - + ", response-size=" + (outputStream != null ? outputStream.getCount() : "unknown") + + ", request-size=" + (inputStream != null && CountingInputStream.class.isInstance(inputStream) + ? CountingInputStream.class.cast(inputStream).getCount() : "unknown") + + + ", response-size=" + (outputStream != null && CountingOutputStream.class.isInstance(outputStream) + ? CountingOutputStream.class.cast(outputStream).getCount() : "unknown") + '}'; } }
