Packages

  • package root
    Definition Classes
    root
  • package io
    Definition Classes
    root
  • package github
    Definition Classes
    io
  • package andrebeat
    Definition Classes
    github
  • package pool

    This library provides classes for dealing with object pooling that allow:

    This library provides classes for dealing with object pooling that allow:

    • blocking/non-blocking object acquisition
    • object invalidation
    • capping the number of pooled objects
    • creating new objects lazily, as needed
    • health checking
    • time-based pool eviction (idle instances)
    • GC-based pool eviction (soft and weak references)
    • efficient thread-safety

    Overview

    In order create a new io.github.andrebeat.pool.Pool the constructor method should be used like so

    scala> val pool = Pool(4, () => new Object)
    pool: io.github.andrebeat.pool.SimplePool[Object] = _
    scala> val lease = pool.acquire()
    lease: io.github.andrebeat.pool.Lease[Object] = _
    scala> lease.release()

    Additionally, in order to avoid manually releasing the lease after its used, you can use the use method on the lease:

    scala> val pool = Pool(4, () => new Object)
    pool: io.github.andrebeat.pool.SimplePool[Object] = _
    scala> val lease = pool.acquire()
    lease: io.github.andrebeat.pool.Lease[Object] = _
    scala> lease(println) // the lease is released automatically after its used
    java.lang.Object@7970d6d
    Definition Classes
    andrebeat
  • ArrayBlockingQueuePool
  • ExpiringPool
  • Lease
  • Pool
  • ReferenceType
  • SimplePool
c

io.github.andrebeat.pool

ArrayBlockingQueuePool

abstract class ArrayBlockingQueuePool[A <: AnyRef] extends Pool[A]

A generic object pooling implementation based on java.util.concurrent.ArrayBlockingQueue. This implementation relies on the thread-safety and blocking/non-blocking mechanisms of the underlying data structure to implement the pool interface. Furthermore, for synchronization and tracking of live instances an java.util.concurrent.atomic.AtomicInteger is used. No locks are used in this implementation.

The type of items inserted in the queue must implement the Item interface. This class defines methods for consuming the item (e.g. disposing of any resources associated with it) and a method that's called whenever an item is successfully inserted into the queue (useful for triggering a side-effect). This class is also responsible for dealing with the reference type that's wrapping the value (i.e. ensure calling its destructor if the value is defined).

Self Type
ArrayBlockingQueuePool[A]
Linear Supertypes
Pool[A], AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ArrayBlockingQueuePool
  2. Pool
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ArrayBlockingQueuePool(capacity: Int, referenceType: ReferenceType)

Type Members

  1. abstract class Item extends AnyRef
    Attributes
    protected

Abstract Value Members

  1. abstract def dispose(a: A): Unit

    Object "destructor".

    Object "destructor". This method is called whenever the object is evicted from the pool. For example, when doing connection pooling it is necessary to close the connection whenever it is evicted (i.e. permanently removed) from the pool.

    Attributes
    protected
    Definition Classes
    Pool
  2. abstract def factory(): A

    Factory method for creating new objects.

    Factory method for creating new objects.

    returns

    a new object.

    Attributes
    protected
    Definition Classes
    Pool
  3. abstract def handleClose(): Unit
    Attributes
    protected
    Definition Classes
    Pool
  4. abstract def healthCheck(a: A): Boolean

    An health check that is performed on an object before its leased from the pool.

    An health check that is performed on an object before its leased from the pool. If the health check passes the object is successfully leased. Otherwise, the object is destroyed (and a new one is fetched or created)

    Attributes
    protected
    Definition Classes
    Pool
  5. abstract def newItem(a: A): Item
    Attributes
    protected[this]
  6. abstract def reset(a: A): Unit

    Resets the internal state of object.

    Resets the internal state of object. This method is called on an object whenever it is added/released back to the pool. For example, if pooling an object like a java.nio.ByteBuffer it might make sense to call its reset() method whenever the object is released to the pool, so that its future users do not observe the internal state introduced by previous ones.

    Attributes
    protected
    Definition Classes
    Pool

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def acquire(): Lease[A]

    Acquire a lease for an object blocking if none is available.

    Acquire a lease for an object blocking if none is available.

    returns

    a lease for an object from this pool.

    Definition Classes
    Pool
    Exceptions thrown

    ClosedPoolException If this pool is closed.

  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. val capacity: Int
    Definition Classes
    ArrayBlockingQueuePoolPool
  7. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  8. def close(): Unit

    Closes this pool, and properly disposes of each pooled object, releasing any resources associated with the pool (e.g.

    Closes this pool, and properly disposes of each pooled object, releasing any resources associated with the pool (e.g. background timer threads).

    If the pool has already been closed this method does nothing.

    Definition Classes
    Pool
  9. val closed: AtomicBoolean
    Attributes
    protected[this]
    Definition Classes
    Pool
  10. def destroy(a: A): Unit
    Attributes
    protected[this]
    Annotations
    @inline()
  11. def drain(): Unit

    Drains the object pool, i.e.

    Drains the object pool, i.e. evicts every object currently pooled.

    Definition Classes
    Pool
    Exceptions thrown

    ClosedPoolException If this pool is closed.

  12. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  14. def fill(): Unit

    Fills the object pool by creating (and pooling) new objects until the number of live objects reaches the pool capacity.

    Fills the object pool by creating (and pooling) new objects until the number of live objects reaches the pool capacity.

    Definition Classes
    Pool
    Exceptions thrown

    ClosedPoolException If this pool is closed.

  15. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  16. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  17. def handleAcquire(): Lease[A]
    Attributes
    protected[this]
    Definition Classes
    ArrayBlockingQueuePoolPool
  18. final def handleDrain(): Unit
    Attributes
    protected[this]
    Definition Classes
    ArrayBlockingQueuePoolPool
    Annotations
    @tailrec()
  19. final def handleFill(): Unit
    Attributes
    protected[this]
    Definition Classes
    ArrayBlockingQueuePoolPool
    Annotations
    @tailrec()
  20. def handleTryAcquire(atMost: Duration): Option[Lease[A]]
    Attributes
    protected[this]
    Definition Classes
    ArrayBlockingQueuePoolPool
  21. def handleTryAcquire(): Option[Lease[A]]
    Attributes
    protected[this]
    Definition Classes
    ArrayBlockingQueuePoolPool
  22. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  23. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  24. val items: ArrayBlockingQueue[Item]
    Attributes
    protected[this]
  25. def leased(): Int

    Returns the number of leased objects.

    Returns the number of leased objects.

    The value returned by this method is only accurate when the referenceType is io.github.andrebeat.pool.ReferenceType.Strong, since GC-based eviction is checked only when trying to acquire an object.

    returns

    the number of leased objects.

    Definition Classes
    Pool
  26. def live(): Int

    Returns the number of live objects, i.e.

    Returns the number of live objects, i.e. the number of currently pooled objects plus leased objects.

    The value returned by this method is only accurate when the referenceType is io.github.andrebeat.pool.ReferenceType.Strong, since GC-based eviction is checked only when trying to acquire an object.

    returns

    the number of live objects.

    Definition Classes
    ArrayBlockingQueuePoolPool
  27. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  28. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  29. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  30. val referenceType: ReferenceType
    Definition Classes
    ArrayBlockingQueuePoolPool
  31. def size(): Int

    Returns the number of objects in the pool.

    Returns the number of objects in the pool.

    The value returned by this method is only accurate when the referenceType is io.github.andrebeat.pool.ReferenceType.Strong, since GC-based eviction is checked only when trying to acquire an object.

    returns

    the number of objects in the pool.

    Definition Classes
    ArrayBlockingQueuePoolPool
  32. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  33. def toString(): String
    Definition Classes
    AnyRef → Any
  34. def tryAcquire(atMost: Duration): Option[Lease[A]]

    Try to acquire a lease for an object blocking at most until the given duration.

    Try to acquire a lease for an object blocking at most until the given duration.

    atMost

    maximum wait time for the lease to be available.

    returns

    a lease for an object from this pool if available until the given duration, None otherwise.

    Definition Classes
    Pool
    Exceptions thrown

    ClosedPoolException If this pool is closed.

  35. def tryAcquire(): Option[Lease[A]]

    Try to acquire a lease for an object without blocking.

    Try to acquire a lease for an object without blocking.

    returns

    a lease for an object from this pool if available, None otherwise.

    Definition Classes
    Pool
    Exceptions thrown

    ClosedPoolException If this pool is closed.

  36. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  37. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  38. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )

Inherited from Pool[A]

Inherited from AnyRef

Inherited from Any

Ungrouped