object AsynchronousPool extends Serializable
The namespace that contains the implementation of the asynchronous resource pool.
- Source
- AsynchronousPool.scala
Given a factory that creates resources,
import scalaz.Tags.Parallel import scalaz._ import scalaz.syntax.tag._ import scalaz.syntax.all._ import com.thoughtworks.future._ import com.thoughtworks.raii.asynchronous._ import com.thoughtworks.raii.AsynchronousPool import java.lang.AutoCloseable trait MyResource extends AutoCloseable { def inUse(): Unit } val myResourceStub0 = stub[MyResource] val myResourceStub1 = stub[MyResource] val myResourceStub2 = stub[MyResource] val myResourceFactoryMock = mockFunction[MyResource] myResourceFactoryMock.expects().returns(myResourceStub0) myResourceFactoryMock.expects().returns(myResourceStub1) myResourceFactoryMock.expects().returns(myResourceStub2)
then it can be converted to a resource pool, which holds some instances of
MyResource
.val myResourcePool: Do[Do[MyResource]] = AsynchronousPool.fixed( resourceFactory = Do.autoCloseable(myResourceFactoryMock()), poolSize = 3 )
When some clients are using the resource pool,
def client(acquire: Do[MyResource], operationsPerClient: Int): Do[Unit] = { Do.nested[Unit](acquire.flatMap { myResource => Do.execute { myResource.inUse } .replicateM_(operationsPerClient) }) } def allClients(acquire: Do[MyResource], numberOfClients: Int, operationsPerClient: Int): ParallelDo[Unit] = { implicit def keepLastException = new Semigroup[Throwable] { override def append(f1: Throwable, f2: => Throwable) = f2 } Applicative[ParallelDo].replicateM_(numberOfClients, Parallel(client(acquire, operationsPerClient))) } def usingPool(numberOfClients: Int, operationsPerClient: Int) = { myResourcePool.flatMap { acquire => allClients(acquire, numberOfClients, operationsPerClient).unwrap } }
then the operations from these clients should be distributed on those
MyResource
s, and thoseMyResource
s should be closed after being used.usingPool(numberOfClients = 10, operationsPerClient = 10).run.map { _: Unit => ((myResourceStub0.inUse _): () => Unit).verify().repeated(30 to 40) ((myResourceStub0.close _): () => Unit).verify().once() ((myResourceStub1.inUse _): () => Unit).verify().repeated(30 to 40) ((myResourceStub1.close _): () => Unit).verify().once() ((myResourceStub2.inUse _): () => Unit).verify().repeated(30 to 40) ((myResourceStub2.close _): () => Unit).verify().once() succeed }.toScalaFuture
Example:
Linear Supertypes
Ordering
- Alphabetic
- By Inheritance
Inherited
- AsynchronousPool
- Serializable
- Serializable
- AnyRef
- Any
- Hide All
- Show All
Visibility
- Public
- All
Type Members
- final class ClosedPoolException extends IllegalStateException
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
fixed[A](resourceFactory: Do[A], poolSize: Int): Do[Do[A]]
Returns a factory of fixed sized resource pool.
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
preloaded[A](preloadedResources: Seq[A]): Resource[UnitContinuation, Do[A]]
Returns a resource pool from preloaded resoures.
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )