| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| |
| <meta charset="UTF-8"> |
| <title>StatelessContainer Configuration</title> |
| <meta name="description" content="Apache TomEE"> |
| <meta name="author" content="Apache TomEE"> |
| <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10"> |
| <meta http-equiv="Pragma" content="no-cache"> |
| <meta http-equiv="Expires" content="0"> |
| <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0"> |
| |
| <!-- Le HTML5 shim, for IE6-8 support of HTML elements --> |
| <!--[if lt IE 9]> |
| <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> |
| <![endif]--> |
| |
| <!-- Le styles --> |
| <link href="./resources/css/bootstrap.css" rel="stylesheet"> |
| <link href="./resources/css/prettify.css" rel="stylesheet"> |
| <!--link href="./resources/css/bootstrap-mods.css" rel="stylesheet"--> |
| <link href="./resources/css/main.css" rel="stylesheet"> |
| <link href="./resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet"> |
| |
| <script type="text/javascript"> |
| var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,"")); |
| var u = encodeURIComponent(""+document.URL); |
| |
| function fbshare () { |
| window.open( |
| "http://www.facebook.com/sharer/sharer.php?u="+u, |
| 'Share on Facebook', |
| 'width=640,height=426'); |
| }; |
| function gpshare () { |
| window.open( |
| "https://plus.google.com/share?url="+u, |
| 'Share on Google+', |
| 'width=584,height=385'); |
| }; |
| function twshare () { |
| window.open( |
| "https://twitter.com/intent/tweet?url="+u+"&text="+t, |
| 'Share on Twitter', |
| 'width=800,height=526'); |
| }; |
| function pinshare () { |
| window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t, |
| 'Share on Pinterest', |
| 'width=800,height=526'); |
| }; |
| </script> |
| |
| <!-- Le fav and touch icons --> |
| <link rel="shortcut icon" href="./favicon.ico"> |
| <link rel="apple-touch-icon" href="./resources/images/apple-touch-icon.png"> |
| <link rel="apple-touch-icon" sizes="72x72" href="./resources/images/apple-touch-icon-72x72.png"> |
| <link rel="apple-touch-icon" sizes="114x114" href="./resources/images/apple-touch-icon-114x114.png"> |
| |
| <script src="./resources/js/prettify.js" type="text/javascript"></script> |
| <script src="./resources/js/jquery-latest.js"></script> |
| <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script> |
| <script src="./resources/js/common.js"></script> |
| <script src="./resources/js/prettyprint.js"></script> |
| <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//--> |
| |
| <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="topbar" data-dropdown="dropdown"> |
| <div class="fill"> |
| <div class="container"> |
| <a class="brand" href="./index.html">Apache TomEE</a> |
| <ul class="nav"> |
| <li class="dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#"> |
| Apache |
| <b class="caret"></b> |
| </a> |
| <ul class="dropdown-menu"> |
| <!-- <li><a href="./misc/whoweare.html">Who we are?</a></li> --> |
| <!-- <li><a href="./misc/heritage.html">Heritage</a></li> --> |
| <li><a href="http://www.apache.org">Apache Home</a></li> |
| <!-- <li><a href="./misc/resources.html">Resources</a></li> --> |
| <li><a href="./misc/contact.html">Contact</a></li> |
| <li><a href="./misc/legal.html">Legal</a></li> |
| <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> |
| <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> |
| <li class="divider"/> |
| <li><a href="http://www.apache.org/security">Security</a></li> |
| </ul> |
| </li> |
| <li><a href="./index.html">Home</a></li> |
| <li><a href="./downloads.html">Downloads</a></li> |
| <li><a href="./documentation.html">Documentation</a></li> |
| <li><a href="./examples-trunk/index.html">Examples</a></li> |
| <li><a href="./support.html">Support</a></li> |
| <li><a href="./contribute.html">Contribute</a></li> |
| <li><a href="./security/index.html">Security</a></li> |
| </ul> |
| |
| <!-- Google CSE Search Box Begins --> |
| <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse"> |
| <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90"> |
| <INPUT type="hidden" name="cof" value="FORID:0"> |
| <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search"> |
| </FORM> |
| <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>--> |
| <!-- Google CSE Search Box Ends --> |
| </div> |
| </div> |
| </div> |
| |
| <div class="container"> |
| |
| |
| <div class="page-header"> |
| <small><a href="./index.html">Home</a></small><br> |
| <h1>StatelessContainer Configuration |
| |
| <div style="float: right; position: relative; bottom: -10px; "> |
| <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a> |
| <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a> |
| <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a> |
| <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a> |
| <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a> |
| </div> |
| </h1> |
| </div> |
| |
| <p>A StatelessContainer can be declared via xml in the <code><tomee-home>/conf/tomee.xml</code> file or in a <code>WEB-INF/resources.xml</code> file using a declaration like the following. All properties in the element body are optional.</p> |
| |
| <pre><code><Container id="myStatelessContainer" type="STATELESS"> |
| accessTimeout = 30 seconds |
| callbackThreads = 5 |
| closeTimeout = 5 minutes |
| garbageCollection = false |
| idleTimeout = 0 minutes |
| maxAge = 0 hours |
| maxAgeOffset = -1 |
| maxSize = 10 |
| minSize = 0 |
| replaceAged = true |
| replaceFlushed = false |
| strictPooling = true |
| sweepInterval = 5 minutes |
| </Container> |
| </code></pre> |
| |
| <p>Alternatively, a StatelessContainer can be declared via properties in the <code><tomee-home>/conf/system.properties</code> file or via Java VirtualMachine <code>-D</code> properties. The properties can also be used when embedding TomEE via the <code>javax.ejb.embeddable.EJBContainer</code> API or <code>InitialContext</code></p> |
| |
| <pre><code>myStatelessContainer = new://Container?type=STATELESS |
| myStatelessContainer.accessTimeout = 30 seconds |
| myStatelessContainer.callbackThreads = 5 |
| myStatelessContainer.closeTimeout = 5 minutes |
| myStatelessContainer.garbageCollection = false |
| myStatelessContainer.idleTimeout = 0 minutes |
| myStatelessContainer.maxAge = 0 hours |
| myStatelessContainer.maxAgeOffset = -1 |
| myStatelessContainer.maxSize = 10 |
| myStatelessContainer.minSize = 0 |
| myStatelessContainer.replaceAged = true |
| myStatelessContainer.replaceFlushed = false |
| myStatelessContainer.strictPooling = true |
| myStatelessContainer.sweepInterval = 5 minutes |
| </code></pre> |
| |
| <p>Properties and xml can be mixed. Properties will override the xml allowing for easy configuration change without the need for ${} style variable substitution. Properties are not case sensitive. If a property is specified that is not supported by the declared StatelessContainer a warning will be logged. If a StatelessContainer is needed by the application and one is not declared, TomEE will create one dynamically using default settings. Multiple StatelessContainer declarations are allowed.</p> |
| |
| <h1>Supported Properties</h1> |
| |
| <table> |
| <tr> |
| <th>Property</th> |
| <th>Type</th> |
| <th>Default</th> |
| <th>Description</th> |
| </tr> |
| <tr> |
| <td><a href="#accessTimeout">accessTimeout</a></td> |
| <td><a href="configuring-durations.html">time</a></td> |
| <td>30 seconds</td> |
| <td> |
| Specifies the time an invokation should wait for an instance |
| of the pool to become available. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#callbackThreads">callbackThreads</a></td> |
| <td>int</td> |
| <td>5</td> |
| <td> |
| The number of threads for constructing and destroying beans. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#closeTimeout">closeTimeout</a></td> |
| <td><a href="configuring-durations.html">time</a></td> |
| <td>5 minutes</td> |
| <td> |
| Maximum time to wait for instances to be destroyed when shutting down the pool |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#garbageCollection">garbageCollection</a></td> |
| <td>boolean</td> |
| <td>false</td> |
| <td> |
| Allows Garbage Collection to be used as a mechanism for shrinking |
| the pool. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#idleTimeout">idleTimeout</a></td> |
| <td><a href="configuring-durations.html">time</a></td> |
| <td>0 minutes</td> |
| <td> |
| Specifies the maximum time that an instance should be allowed to |
| sit idly in the pool without use before it should be retired and |
| removed. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#maxAge">maxAge</a></td> |
| <td><a href="configuring-durations.html">time</a></td> |
| <td>0 hours</td> |
| <td> |
| Specifies the maximum time that an instance should live before |
| it should be retired and removed from use. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#maxAgeOffset">maxAgeOffset</a></td> |
| <td>int</td> |
| <td>-1</td> |
| <td> |
| Applies to MaxAge usage and would rarely be changed, but is a |
| nice feature to understand. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#maxSize">maxSize</a></td> |
| <td>int</td> |
| <td>10</td> |
| <td> |
| Specifies the size of the instance pool for this stateless |
| SessionBean container. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#minSize">minSize</a></td> |
| <td>int</td> |
| <td>0</td> |
| <td> |
| Specifies the minimum number of bean instances that should be in |
| the pool for each bean. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#replaceAged">replaceAged</a></td> |
| <td>boolean</td> |
| <td>true</td> |
| <td> |
| When `ReplaceAged` is enabled, any instances in the pool that |
| expire due to reaching their `MaxAge` will be replaced immediately |
| so that the pool will remain at its current size. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#replaceFlushed">replaceFlushed</a></td> |
| <td>boolean</td> |
| <td>false</td> |
| <td> |
| When `ReplaceFlushed` is enabled, any instances in the pool that |
| are flushed will be replaced immediately so that the pool will |
| remain at its current size. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#strictPooling">strictPooling</a></td> |
| <td>boolean</td> |
| <td>true</td> |
| <td> |
| StrictPooling tells the container what to do when the pool |
| reaches it's maximum size and there are incoming requests that |
| need instances. |
| </td> |
| </tr> |
| <tr> |
| <td><a href="#sweepInterval">sweepInterval</a></td> |
| <td><a href="configuring-durations.html">time</a></td> |
| <td>5 minutes</td> |
| <td> |
| The frequency in which the container will sweep the pool and |
| evict expired instances. |
| </td> |
| </tr> |
| </table> |
| |
| <p><a name="accessTimeout"></a></p> |
| |
| <h2>accessTimeout</h2> |
| |
| <p>Specifies the time an invokation should wait for an instance |
| of the pool to become available.</p> |
| |
| <p>After the timeout is reached, if an instance in the pool cannot |
| be obtained, the method invocation will fail.</p> |
| |
| <p>Usable time units: nanoseconds, microsecons, milliseconds, |
| seconds, minutes, hours, days. Or any combination such as |
| "1 hour and 27 minutes and 10 seconds"</p> |
| |
| <p>Any usage of the <code>javax.ejb.AccessTimeout</code> annotation will |
| override this setting for the bean or method where the |
| annotation is used.</p> |
| |
| <p><a name="callbackThreads"></a></p> |
| |
| <h2>callbackThreads</h2> |
| |
| <p>The number of threads for constructing and destroying beans.</p> |
| |
| <p>When sweeping the pool for expired instances a thread pool is |
| used to process calling <code>@PreDestroy</code> on expired instances as well |
| as creating new instances as might be required to fill the pool |
| to the minimum after a Flush or <code>MaxAge</code> expiration. The |
| <code>CallbackThreads</code> setting dictates the size of the thread pool and |
| is shared by all beans deployed in the container.</p> |
| |
| <p><a name="closeTimeout"></a></p> |
| |
| <h2>closeTimeout</h2> |
| |
| <p>Maximum time to wait for instances to be destroyed when shutting down the pool</p> |
| |
| <p>PostConstruct methods are invoked on all instances in the pool |
| when the bean is undeployed and its pool is closed. The |
| <code>CloseTimeout</code> specifies the maximum time to wait for the pool to |
| close and <code>PostConstruct</code> methods to be invoked.</p> |
| |
| <p>Usable time units: nanoseconds, microsecons, milliseconds, |
| seconds, minutes, hours, days. Or any combination such as |
| <code>1 hour and 27 minutes and 10 seconds</code></p> |
| |
| <p><a name="garbageCollection"></a></p> |
| |
| <h2>garbageCollection</h2> |
| |
| <p>Allows Garbage Collection to be used as a mechanism for shrinking |
| the pool.</p> |
| |
| <p>When set to true all instances in the pool, excluding |
| the minimum, are eligible for garbage collection by the virtual |
| machine as per the rules of <code>java.lang.ref.SoftReference</code> and can be |
| claimed by the JVM to free memory. Instances garbage collected |
| will have their <code>@PreDestroy</code> methods called during finalization.</p> |
| |
| <p>In the OpenJDK VM the <code>-XX:SoftRefLRUPolicyMSPerMB</code> flag can adjust |
| how aggressively SoftReferences are collected. The default |
| OpenJDK setting is 1000, resulting in inactive pooled instances |
| living one second of lifetime per free megabyte in the heap, which |
| is very aggressive. The setting should be increased to get the |
| most out of the <code>GarbageCollection</code> feature of the pool. Much |
| higher settings are safe. Even a setting as high as 3600000 (1 |
| hour per free MB in the heap) does not affect the ability for the |
| VM to garbage collect SoftReferences in the event that memory is |
| needed to avoid an <code>OutOfMemoryException</code>.</p> |
| |
| <p><a name="idleTimeout"></a></p> |
| |
| <h2>idleTimeout</h2> |
| |
| <p>Specifies the maximum time that an instance should be allowed to |
| sit idly in the pool without use before it should be retired and |
| removed.</p> |
| |
| <p>Only instances |
| in surplus of the pool's <code>MinSize</code> are eligible to expire via <code>IdleTimeout</code> |
| Instances that expire due to <code>IdleTimeout</code> will have their <code>@PreDestroy</code> |
| methods invoked before being completely destroyed.</p> |
| |
| <p>Usable time units: nanoseconds, microsecons, milliseconds, |
| seconds, minutes, hours, days. Or any combination such as |
| "1 hour and 27 minutes and 10 seconds"</p> |
| |
| <p><a name="maxAge"></a></p> |
| |
| <h2>maxAge</h2> |
| |
| <p>Specifies the maximum time that an instance should live before |
| it should be retired and removed from use.</p> |
| |
| <p>This will happen |
| gracefully. Useful for situations where bean instances are |
| designed to hold potentially expensive resources such as memory |
| or file handles and need to be periodically cleared out.</p> |
| |
| <p>Usable time units: nanoseconds, microsecons, milliseconds, |
| seconds, minutes, hours, days. Or any combination such as |
| <code>1 hour and 27 minutes and 10 seconds</code></p> |
| |
| <p><a name="maxAgeOffset"></a></p> |
| |
| <h2>maxAgeOffset</h2> |
| |
| <p>Applies to MaxAge usage and would rarely be changed, but is a |
| nice feature to understand.</p> |
| |
| <p>When the container first starts and the pool is filled to the |
| minimum size, all those "minimum" instances will have the same |
| creation time and therefore all expire at the same time dictated |
| by the <code>MaxAge</code> setting. To protect against this sudden drop |
| scenario and provide a more gradual expiration from the start |
| the container will spread out the age of the instances that fill |
| the pool to the minimum using an offset.</p> |
| |
| <p>The <code>MaxAgeOffset</code> is not the final value of the offset, but |
| rather it is used in creating the offset and allows the |
| spreading to push the initial ages into the future or into the |
| past. The pool is filled at startup as follows:</p> |
| |
| <pre><code>for (int i = 0; i < poolMin; i++) { |
| long ageOffset = (maxAge / poolMin * i * maxAgeOffset) % maxAge; |
| pool.add(new Bean(), ageOffset)); |
| } |
| </code></pre> |
| |
| <p>The default <code>MaxAgeOffset</code> is -1 which causes the initial |
| instances in the pool to live a bit longer before expiring. As |
| a concrete example, let's say the MinSize is 4 and the MaxAge is |
| 100 years. The generated offsets for the four instances created |
| at startup would be 0, -25, -50, -75. So the first instance |
| would be "born" at age 0, die at 100, living 100 years. The |
| second instance would be born at -25, die at 100, living a total |
| of 125 years. The third would live 150 years. The fourth 175 |
| years.</p> |
| |
| <p>A <code>MaxAgeOffset</code> of 1 would cause instances to be "born" older |
| and therefore die sooner. Using the same example <code>MinSize</code> of 4 |
| and <code>MaxAge</code> of <code>100 years</code>, the life spans of these initial four |
| instances would be 100, 75, 50, and 25 years respectively.</p> |
| |
| <p>A <code>MaxAgeOffset</code> of 0 will cause no "spreading" of the age of the |
| first instances used to fill the pool to the minimum and these |
| instances will of course reach their MaxAge at the same time. |
| It is possible to set to decimal values such as -0.5, 0.5, -1.2, |
| or 1.2.</p> |
| |
| <p><a name="maxSize"></a></p> |
| |
| <h2>maxSize</h2> |
| |
| <p>Specifies the size of the instance pool for this stateless |
| SessionBean container.</p> |
| |
| <p>Each <code>@Stateless</code> bean will get its own instance pool. |
| If StrictPooling is not used, instances |
| will still be created beyond this number if there is demand, but |
| they will not be returned to the pool and instead will be |
| immediately expire.</p> |
| |
| <p><a name="minSize"></a></p> |
| |
| <h2>minSize</h2> |
| |
| <p>Specifies the minimum number of bean instances that should be in |
| the pool for each bean.</p> |
| |
| <p>Pools are prefilled to the minimum on |
| startup. Note this will create start order dependencies between |
| other beans that also eagerly start, such as other <code>@Stateless</code> |
| beans with a minimum or <code>@Singleton</code> beans using <code>@Startup</code>. The |
| <code>@DependsOn</code> annotation can be used to appropriately influence |
| start order.</p> |
| |
| <p>The minimum pool size is rigidly maintained. Instances in the |
| minimum side of the pool are not eligible for <code>IdleTimeout</code> or |
| <code>GarbageCollection</code>, but are subject to <code>MaxAge</code> and flushing.</p> |
| |
| <p>If the pool is flushed it is immediately refilled to the minimum |
| size with <code>MaxAgeOffset</code> applied. If an instance from the minimum |
| side of the pool reaches its <code>MaxAge</code>, it is also immediately |
| replaced. Replacement is done in a background queue using the |
| number of threads specified by <code>CallbackThreads</code>.</p> |
| |
| <p><a name="replaceAged"></a></p> |
| |
| <h2>replaceAged</h2> |
| |
| <p>When <code>ReplaceAged</code> is enabled, any instances in the pool that |
| expire due to reaching their <code>MaxAge</code> will be replaced immediately |
| so that the pool will remain at its current size.</p> |
| |
| <p>Replacement |
| is done in a background queue so that incoming threads will not |
| have to wait for instance creation.</p> |
| |
| <p>The aim of his option is to prevent user requests from paying |
| the instance creation cost as <code>MaxAge</code> is enforced, potentially |
| while under heavy load at peak hours.</p> |
| |
| <p>Instances from the minimum side of the pool are always replaced |
| when they reach their <code>MaxAge</code>, this setting dictates the |
| treatment of non-minimum instances.</p> |
| |
| <p><a name="replaceFlushed"></a></p> |
| |
| <h2>replaceFlushed</h2> |
| |
| <p>When <code>ReplaceFlushed</code> is enabled, any instances in the pool that |
| are flushed will be replaced immediately so that the pool will |
| remain at its current size.</p> |
| |
| <p>Replacement is done in a background |
| queue so that incoming threads will not have to wait for |
| instance creation.</p> |
| |
| <p>The aim of his option is to prevent user requests from paying |
| the instance creation cost if a flush performed while under |
| heavy load at peak hours.</p> |
| |
| <p>Instances from the minimum side of the pool are always replaced |
| when they are flushed, this setting dictates the treatment of |
| non-minimum instances.</p> |
| |
| <p>A bean may flush its pool by casting the <code>SessionContext</code> to |
| <code>Flushable</code> and calling <code>flush()</code>. See <code>SweepInterval</code> for details on |
| how flush is performed.</p> |
| |
| <pre><code>import javax.annotation.Resource; |
| import javax.ejb.SessionContext; |
| import javax.ejb.Stateless; |
| import java.io.Flushable; |
| import java.io.IOException; |
| |
| public class MyBean { |
| |
| private SessionContext sessionContext; |
| |
| public void flush() throws IOException { |
| |
| ((Flushable) sessionContext).flush(); |
| } |
| } |
| </code></pre> |
| |
| <p><a name="strictPooling"></a></p> |
| |
| <h2>strictPooling</h2> |
| |
| <p>StrictPooling tells the container what to do when the pool |
| reaches it's maximum size and there are incoming requests that |
| need instances.</p> |
| |
| <p>With strict pooling, requests will have to wait for instances to |
| become available. The pool size will never grow beyond the the |
| set <code>MaxSize</code> value. The maximum amount of time a request should |
| wait is specified via the <code>AccessTimeout</code> setting.</p> |
| |
| <p>Without strict pooling, the container will create temporary |
| instances to meet demand. The instances will last for just one |
| method invocation and then are removed.</p> |
| |
| <p>Setting <code>StrictPooling</code> to <code>false</code> and <code>MaxSize</code> to <code>0</code> will result in |
| no pooling. Instead instances will be created on demand and live |
| for exactly one method call before being removed.</p> |
| |
| <p><a name="sweepInterval"></a></p> |
| |
| <h2>sweepInterval</h2> |
| |
| <p>The frequency in which the container will sweep the pool and |
| evict expired instances.</p> |
| |
| <p>Eviction is how the <code>IdleTimeout</code>, |
| <code>MaxAge</code>, and pool "flush" functionality is enforced. Higher |
| intervals are better.</p> |
| |
| <p>Instances in use are excluded from sweeping. Should an instance |
| expire while in use it will be evicted immediately upon return |
| to the pool. Effectively <code>MaxAge</code> and flushes will be enforced as |
| a part of normal activity or sweeping, while IdleTimeout is only |
| enforcable via sweeping. This makes aggressive sweeping less |
| important for a pool under moderate load.</p> |
| |
| <p>Usable time units: nanoseconds, microsecons, milliseconds, |
| seconds, minutes, hours, days. Or any combination such as |
| <code>1 hour and 27 minutes and 10 seconds</code></p> |
| |
| |
| |
| |
| <div id="edit" class="modal hide fade in" style="display: none; "> |
| <div class="modal-header"> |
| <a class="close" data-dismiss="modal">x</a> |
| |
| <h3>Thank you for contributing to the documentation!</h3> |
| </div> |
| <div class="modal-body"> |
| <h4>Any help with the documentation is greatly appreciated.</h4> |
| <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links. If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it. Don't be surprised if we like it so much we ask you for help with other pages :)</p> |
| <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small> |
| <!--[if gt IE 6]> |
| <h4>Internet Explorer Users</h4> |
| <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p> |
| <![endif]--> |
| |
| </div> |
| <div class="modal-footer"> |
| Do you have an Apache ID? |
| <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a> |
| <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a> |
| </div> |
| </div> |
| <script src="./resources/js/bootstrap-modal.js"></script> |
| |
| <footer> |
| <p>Copyright © 1999-2016 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> |
| </footer> |
| |
| </div> <!-- /container --> |
| |
| <!-- Javascript |
| ================================================== --> |
| <!-- Placed at the end of the document so the pages load faster --> |
| <script src="./resources/js/bootstrap-dropdown.js"></script> |
| |
| </body> |
| </html> |