OpenEJB
  1. OpenEJB
  2. OPENEJB-1235

New Stateless pool options: PoolMin, IdleTimeout, MaxAge, Flush and more

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.1.3
    • Component/s: None
    • Labels:
      None

      Description

      1. Specifies the minimum number of bean instances that should be
      2. in the pool for each bean. Pools are prefilled to the minimum
      3. on startup. Pool "shrinking" is achived through WeakReferences
      4. and natural vm garbage collection. All but the minimum are allowed
      5. to be garbage collected by the VM when memory is needed.

      PoolMin 0

      1. Specifies the maximum time that an instance should live before
      2. it should be retired and removed from use. This will happen
      3. gracefully. Useful for situations where bean instances are
      4. designed to hold potentially expensive resources such as memory
      5. or file handles and need to be periodically cleared out.
        #
      6. Usable time units: nanoseconds, microsecons, milliseconds,
      7. seconds, minutes, hours, days. Or any combination such as
      8. "1 hour and 27 minutes and 10 seconds"

      MaxAge = 0 hours

      1. Applies to MaxAge usage and would rarely be changed, but is a
      2. nice feature to understand.
        #
      3. When the container first starts and the pool is filled to the
      4. minimum size, all those "minimum" instances will have the same
      5. creation time and therefore all expire at the same time dictated
      6. by the MaxAge setting. To protect against this sudden drop
      7. scenario and provide a more gradual expiration from the start
      8. the container will spread out the age of the instances that fill
      9. the pool to the minimum using an offset.
        #
      10. The MaxAgeOffset is not the final value of the offset, but
      11. rather it is used in creating the offset and allows the
      12. spreading to push the initial ages into the future or into the
      13. past. The pool is filled at startup as follows:
        #
      14. for (int i = 0; i < poolMin; i++) { # long ageOffset = (maxAge / poolMin * i * maxAgeOffset) % maxAge; # pool.add(new Bean(), ageOffset)); # }

        #

      15. The default MaxAgeOffset is -1 which causes the initial
      16. instances in the pool to live a bit longer before expiring. As
      17. a concrete example, let's say the PoolMin is 4 and the MaxAge is
      18. 100 years. The generated offsets for the four instances created
      19. at startup would be 0, -25, -50, -75. So the first instance
      20. would be "born" at age 0, die at 100, living 100 years. The
      21. second instance would be born at -25, die at 100, living a total
      22. of 125 years. The third would live 150 years. The fourth 175
      23. years.
        #
      24. A MaxAgeOffset of 1 would cause instances to be "born" older
      25. and therefore die sooner. Using the same example PoolMin of 4
      26. and MaxAge of 100 years, the life spans of these initial four
      27. instances would be 100, 75, 50, and 25 years respectively.
        #
      28. A MaxAgeOffset of 0 will cause no "spreading" of the age of the
      29. first instances used to fill the pool to the minimum and these
      30. instances will of course reach their MaxAge at the same time.
      31. It is possible to set to decimal values such as -0.5, 0.5, -1.2,
      32. or 1.2.

      MaxAgeOffset = -1

      1. Specifies the maximum time that an instance should be allowed to
      2. sit idly in the pool without use before it should be retired and
      3. removed.
        #
      4. Note that all instances in the pool, excluding the minimum, are
      5. eligible for garbage collection by the virtual machine as per
      6. the rules of java.lang.ref.WeakReference, so the use of an
      7. IdleTimeout is not required to conserve JVM-managed memory or
      8. shrink the pool.
        #
      9. Usable time units: nanoseconds, microsecons, milliseconds,
      10. seconds, minutes, hours, days. Or any combination such as
      11. "1 hour and 27 minutes and 10 seconds"

      IdleTimeout = 0 minutes

      1. The frequency in which the container will sweep the pool and
      2. evict expired instances. Eviction is how the IdleTimeout,
      3. MaxAge, and pool "flush" functionality is enforced. Higher
      4. intervals are better. Expired instances in use while the pool
      5. is swept will still be evicted upon return to the pool.
        #
      6. Usable time units: nanoseconds, microsecons, milliseconds,
      7. seconds, minutes, hours, days. Or any combination such as
      8. "1 hour and 27 minutes and 10 seconds"

      PollInterval = 5 minutes

      1. OPENEJB-1235.txt
        12 kB
        David Blevins

        Activity

        Hide
        David Blevins added a comment -

        $ svn ci container
        Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
        Sending container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
        Sending container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java
        Transmitting file data .....
        Committed revision 927310.

        Show
        David Blevins added a comment - $ svn ci container Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Sending container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java Sending container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Sending container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java Transmitting file data ..... Committed revision 927310.
        Hide
        David Blevins added a comment -

        New "Flush" ability. Fixes to MaxAge and IdleTimeout. Many more tests. Weaved configuration through the system.

        http://svn.apache.org/viewvc?view=revision&revision=924925

        $ svn ci
        Sending assembly/openejb-jetty/openejb-jetty-webapp/src/main/resources/META-INF/org.apache.openejb.jetty/service-jar.xml
        Sending assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
        Sending assembly/openejb-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
        Sending container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
        Adding container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainerFactory.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionType.java
        Adding container/openejb-core/src/main/java/org/apache/openejb/util/PassthroughFactory.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
        Sending container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
        Sending container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml
        Sending container/openejb-core/src/main/resources/default.openejb.conf
        Sending container/openejb-core/src/test/java/org/apache/openejb/config/ConfigureServiceTest.java
        Sending container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java
        Adding container/openejb-junit/src/main/java/org/apache/openejb/junit/LocalClientRunner.java
        Adding container/openejb-junit/src/main/java/org/apache/openejb/junit/Transaction.java
        Sending container/openejb-osgi/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
        Transmitting file data ..................
        Committed revision 924925.

        Show
        David Blevins added a comment - New "Flush" ability. Fixes to MaxAge and IdleTimeout. Many more tests. Weaved configuration through the system. http://svn.apache.org/viewvc?view=revision&revision=924925 $ svn ci Sending assembly/openejb-jetty/openejb-jetty-webapp/src/main/resources/META-INF/org.apache.openejb.jetty/service-jar.xml Sending assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Sending assembly/openejb-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Sending container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java Adding container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainerFactory.java Sending container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Sending container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionType.java Adding container/openejb-core/src/main/java/org/apache/openejb/util/PassthroughFactory.java Sending container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java Sending container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Sending container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml Sending container/openejb-core/src/main/resources/default.openejb.conf Sending container/openejb-core/src/test/java/org/apache/openejb/config/ConfigureServiceTest.java Sending container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java Adding container/openejb-junit/src/main/java/org/apache/openejb/junit/LocalClientRunner.java Adding container/openejb-junit/src/main/java/org/apache/openejb/junit/Transaction.java Sending container/openejb-osgi/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Transmitting file data .................. Committed revision 924925.
        Hide
        David Blevins added a comment -

        $ svn ci container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
        Sending container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
        Transmitting file data .
        Committed revision 920419.

        Show
        David Blevins added a comment - $ svn ci container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java Sending container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java Transmitting file data . Committed revision 920419.
        Hide
        David Blevins added a comment -

        Author: dblevins
        Date: Thu Feb 18 17:45:33 2010
        New Revision: 911501

        URL: http://svn.apache.org/viewvc?rev=911501&view=rev
        Log:
        OPENEJB-1235: Stateless pool min/max and reduction
        Previously committed Pool code now wired into the Stateless Container.
        Still need the config code to set the minimum pool size.

        Modified:
        openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java
        openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
        openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

        Show
        David Blevins added a comment - Author: dblevins Date: Thu Feb 18 17:45:33 2010 New Revision: 911501 URL: http://svn.apache.org/viewvc?rev=911501&view=rev Log: OPENEJB-1235 : Stateless pool min/max and reduction Previously committed Pool code now wired into the Stateless Container. Still need the config code to set the minimum pool size. Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
        Hide
        David Blevins added a comment -

        Author: dblevins
        Date: Thu Feb 18 07:43:32 2010
        New Revision: 911271

        URL: http://svn.apache.org/viewvc?rev=911271&view=rev
        Log:
        Potential replacement for Stateless pooling code. Seems to have an issue when plugged in.

        Added:
        openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java (with props)
        openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java (with props)

        Show
        David Blevins added a comment - Author: dblevins Date: Thu Feb 18 07:43:32 2010 New Revision: 911271 URL: http://svn.apache.org/viewvc?rev=911271&view=rev Log: Potential replacement for Stateless pooling code. Seems to have an issue when plugged in. Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java (with props) openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java (with props)

          People

          • Assignee:
            David Blevins
            Reporter:
            David Blevins
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development