| <!DOCTYPE html> |
| <html lang="en"> |
| |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>Apache TomEE</title> |
| <meta name="description" |
| content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." /> |
| <meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" /> |
| <meta name="author" content="Luka Cvetinovic for Codrops" /> |
| <link rel="icon" href="../../favicon.ico"> |
| <link rel="icon" type="image/png" href="../../favicon.png"> |
| <meta name="msapplication-TileColor" content="#80287a"> |
| <meta name="theme-color" content="#80287a"> |
| <link rel="stylesheet" type="text/css" href="../../css/normalize.css"> |
| <link rel="stylesheet" type="text/css" href="../../css/bootstrap.css"> |
| <link rel="stylesheet" type="text/css" href="../../css/owl.css"> |
| <link rel="stylesheet" type="text/css" href="../../css/animate.css"> |
| <link rel="stylesheet" type="text/css" href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css"> |
| <link rel="stylesheet" type="text/css" href="../../fonts/eleganticons/et-icons.css"> |
| <link rel="stylesheet" type="text/css" href="../../css/jqtree.css"> |
| <link rel="stylesheet" type="text/css" href="../../css/idea.css"> |
| <link rel="stylesheet" type="text/css" href="../../css/cardio.css"> |
| |
| <script type="text/javascript"> |
| |
| var _gaq = _gaq || []; |
| _gaq.push(['_setAccount', 'UA-2717626-1']); |
| _gaq.push(['_setDomainName', 'apache.org']); |
| _gaq.push(['_trackPageview']); |
| |
| (function() { |
| var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
| ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
| var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
| })(); |
| |
| </script> |
| </head> |
| |
| <body> |
| <div class="preloader"> |
| <img src="../../img/loader.gif" alt="Preloader image"> |
| </div> |
| <nav class="navbar"> |
| <div class="container"> |
| <div class="row"> <div class="col-md-12"> |
| |
| <!-- Brand and toggle get grouped for better mobile display --> |
| <div class="navbar-header"> |
| <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> |
| <span class="sr-only">Toggle navigation</span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| </button> |
| <a class="navbar-brand" href="/" title="Apache TomEE"> |
| <span> |
| |
| |
| <img |
| src="../../img/apache_tomee-logo.svg" |
| onerror="this.src='../../img/apache_tomee-logo.jpg'" |
| height="50" |
| > |
| |
| |
| </span> |
| </a> |
| </div> |
| <!-- Collect the nav links, forms, and other content for toggling --> |
| <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |
| <ul class="nav navbar-nav navbar-right main-nav"> |
| <li><a href="../../docs.html">Documentation</a></li> |
| <li><a href="../../community/index.html">Community</a></li> |
| <li><a href="../../security/security.html">Security</a></li> |
| <li><a class="btn btn-accent accent-orange no-shadow" href="../../download-ng.html">Downloads</a></li> |
| </ul> |
| </div> |
| <!-- /.navbar-collapse --> |
| </div></div> |
| </div> |
| <!-- /.container-fluid --> |
| </nav> |
| |
| |
| <div id="main-block" class="container main-block"> |
| <div class="row title"> |
| <div class="col-md-12"> |
| <div class='page-header'> |
| |
| <h1>EJB Request Logging</h1> |
| </div> |
| </div> |
| </div> |
| <div class="row"> |
| |
| <div class="col-md-12"> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| Licensed to the Apache Software Foundation (ASF) |
| under one or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information regarding |
| copyright ownership. The ASF licenses this file to you 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 |
| . <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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. See the License for |
| the specific language governing permissions and limitations under the |
| License. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Both client-side and server-side request logging is supported and |
| includes various invocation times aimed at helping to identify where |
| time is going in a request.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_client_side">Client-side</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>On the client requests/responses are logged on java.util.logging |
| <code>FINEST</code> level in category <code>OpenEJB.client</code>. The code is similar to the |
| following:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-java" data-lang="java">final long time = System.nanoTime() - start; |
| final String message = String.format("Invocation %sns - %s - Request(%s) - Response(%s)", time, conn.getURI(), req, res); |
| logger.log(Level.FINEST, message);</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note that the check to see if FINEST is enabled is cached for |
| performance reasons, so it must be set at VM startup.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_server_side">Server-side</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>On the server requests/responses are logged in java.util.logging <code>FINE</code> |
| in category`"OpenEJB.server.remote.ejb`. The code for that is similar to |
| this:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-java" data-lang="java">logger.fine("EJB REQUEST: " + req + " -- RESPONSE: " + res);</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_request_times">Request times</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Three times are tracked per request and logged in the above statements |
| as part of the formatting of the EJB Response. They’re best understood |
| in reverse:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><strong>Container time</strong> — this is the raw time of invoking the bean |
| including its interceptors and any transaction begin/commit time. This |
| time is effectively "business logic".</p> |
| </li> |
| <li> |
| <p><strong>Server time</strong> — this timer starts the (nano)second the request is |
| seen by the server and the (nano)second the response is actually |
| written. The serverTime minus the containerTime will effectively show |
| you how long serialization and deserialization is taking pre request.</p> |
| </li> |
| <li> |
| <p><strong>Client time</strong> — entire begin to end including attempting to contact |
| the server and fully reading the response. The clientTime minus the |
| serverTime will show network latency for the most part.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The container time and server time are written in the EJB response and |
| visible to the client. The client will log all three times, the server |
| will log the first two. All log statements are on a single line.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_bean_time_and_jmx_statistics">Bean-time and JMX Statistics</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>The above information applies purely to remote EJB calls made over a |
| network. Calls on <code>@Remote</code> or <code>@Local</code> interfaces between two |
| components in the same server are not logged.</p> |
| </div> |
| <div class="paragraph"> |
| <p>However, <strong>all</strong> EJB invocations to business methods <em>or</em> callbacks like |
| <code>@PostConstruct</code> are tracked for statistical analysis. By default a |
| floating window of 2000 samples are kept. The time tracked is purely |
| <strong>bean time</strong> which includes interceptors, decorators and the bean itself, |
| but does not include other container services like transactions or |
| security.</p> |
| </div> |
| <div class="paragraph"> |
| <p>This information is available in JMX. A sample JMX ObjectName for a |
| <code>CounterBean</code> will look like this:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-properties" data-lang="properties">openejb.management:J2EEServer=openejb,J2EEApplication=null,EJBModule=StatsModule,StatelessSessionBean=CounterBean,j2eeType=Invocations,name=CounterBean</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>All beans have the following MBean attributes, listed here in shorthand:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=InvocationCount, type=long, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, name=InvocationTime, |
| type=long, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=MonitoredMethods, type=long, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanOperationInfo[description=, |
| name=FilterAttributes, returnType=void, |
| signature=[javax.management.MBeanParameterInfo[description="", |
| name=excludeRegex, type=java.lang.String, descriptor=\{}], |
| javax.management.MBeanParameterInfo[description="", name=includeRegex, |
| type=java.lang.String, descriptor=\{}]], impact=unknown, descriptor=\{}]</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Then for every method there will be these attributes and operations:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Count, type=long, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().GeometricMean, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Kurtosis, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Max, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Mean, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Min, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile01, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile10, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile25, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile50, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile75, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile90, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Percentile99, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().SampleSize, type=int, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Skewness, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().StandardDeviation, type=double, read-only, |
| descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Sum, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Sumsq, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanAttributeInfo[description=, |
| name=someMethod().Variance, type=double, read-only, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanOperationInfo[description=, |
| name=someMethod().setSampleSize, returnType=void, |
| signature=[javax.management.MBeanParameterInfo[description=, name=p1, |
| type=int, descriptor=\{}]], impact=unknown, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanOperationInfo[description=, |
| name=someMethod().sortedValues, returnType=[D, signature=[], |
| impact=unknown, descriptor=\{}]</p> |
| </li> |
| <li> |
| <p>javax.management.MBeanOperationInfo[description=, |
| name=someMethod().values, returnType=[D, signature=[], impact=unknown, |
| descriptor=\{}]</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| </div> |
| </div> |
| <div style="margin-bottom: 30px;"></div> |
| <footer> |
| <div class="container"> |
| <div class="row"> |
| <div class="col-sm-6 text-center-mobile"> |
| <h3 class="white">Be simple. Be certified. Be Tomcat.</h3> |
| <h5 class="light regular light-white">"A good application in a good server"</h5> |
| <ul class="social-footer"> |
| <li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li> |
| <li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li> |
| </ul> |
| </div> |
| <div class="col-sm-6 text-center-mobile"> |
| <div class="row opening-hours"> |
| <div class="col-sm-3 text-center-mobile"> |
| <h5><a href="../../latest/docs/" class="white">Documentation</a></h5> |
| <ul class="list-unstyled"> |
| <li><a href="../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li> |
| <li><a href="../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li> |
| <li><a href="../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li> |
| <li><a href="../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li> |
| </ul> |
| </div> |
| <div class="col-sm-3 text-center-mobile"> |
| <h5><a href="../../latest/examples/" class="white">Examples</a></h5> |
| <ul class="list-unstyled"> |
| <li><a href="../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li> |
| <li><a href="../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li> |
| <li><a href="../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li> |
| <li><a href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li> |
| </ul> |
| </div> |
| <div class="col-sm-3 text-center-mobile"> |
| <h5><a href="../../community/index.html" class="white">Community</a></h5> |
| <ul class="list-unstyled"> |
| <li><a href="../../community/contributors.html" class="regular light-white">Contributors</a></li> |
| <li><a href="../../community/social.html" class="regular light-white">Social</a></li> |
| <li><a href="../../community/sources.html" class="regular light-white">Sources</a></li> |
| </ul> |
| </div> |
| <div class="col-sm-3 text-center-mobile"> |
| <h5><a href="../../security/index.html" class="white">Security</a></h5> |
| <ul class="list-unstyled"> |
| <li><a href="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li> |
| <li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li> |
| <li><a href="http://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="row bottom-footer text-center-mobile"> |
| <div class="col-sm-12 light-white"> |
| <p>Copyright © 1999-2021 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> |
| </div> |
| </div> |
| </div> |
| </footer> |
| <!-- Holder for mobile navigation --> |
| <div class="mobile-nav"> |
| <ul> |
| <li><a hef="../../latest/docs/admin/index.html">Administrators</a> |
| <li><a hef="../../latest/docs/developer/index.html">Developers</a> |
| <li><a hef="../../latest/docs/advanced/index.html">Advanced</a> |
| <li><a hef="../../community/index.html">Community</a> |
| </ul> |
| <a href="#" class="close-link"><i class="arrow_up"></i></a> |
| </div> |
| <!-- Scripts --> |
| <script src="../../js/jquery-1.11.1.min.js"></script> |
| <script src="../../js/owl.carousel.min.js"></script> |
| <script src="../../js/bootstrap.min.js"></script> |
| <script src="../../js/wow.min.js"></script> |
| <script src="../../js/typewriter.js"></script> |
| <script src="../../js/jquery.onepagenav.js"></script> |
| <script src="../../js/tree.jquery.js"></script> |
| <script src="../../js/highlight.pack.js"></script> |
| <script src="../../js/main.js"></script> |
| </body> |
| |
| </html> |
| |