Packages

  • package root
    Definition Classes
    root
  • package ca
    Definition Classes
    root
  • package dvgi
    Definition Classes
    ca
  • package managerial

    Managerial is a library for managing resource lifecycle monadically.

    Managerial is a library for managing resource lifecycle monadically.

    The main entry points to the library are found in Managed$.

    The following is a full-fledged usage example:

    import ca.dvgi.managerial.Managed
    import ca.dvgi.managerial._
    
    object Main extends App {
    
      val server = for {
        // create a Managed[Unit] for side effects
        _ <- Managed.eval(println("Starting setup..."))(println("Finished teardown"))
    
        // create Managed[Settings] that doesn't require teardown
        settings <- Managed.setup(Settings(8080, 7070))
    
        // create Managed[HealthCheckServer], which requires teardown
        healthCheckServer <- Managed(new HealthCheckServer(settings))(_.stop())
    
        // Managed#from expects a type class instance for Teardown[T], instead of having teardown specified explicitly.
        // ca.dvgi.managerial provides Teardown[AutoCloseable].
        apiServer <- Managed.from(new ApiServer(settings))
    
        // once the ApiServer is started, the HealthCheckServer can show it's ready
        _ <- Managed.eval(healthCheckServer.markReady())(healthCheckServer.markUnready())
    
        // evalSetup and evalTeardown allow for side-effects during only setup or only teardown
        _ <- Managed.evalSetup(println("Startup is finished!"))
      } yield apiServer
    
      // builds the Managed stack and registers a JVM shutdown hook to do automatic teardown
      server.useUntilShutdown()
    }
    
    case class Settings(healthCheckPort: Int, apiPort: Int)
    
    class HealthCheckServer(settings: Settings) {
      println("Started HealthCheckServer")
      def stop(): Unit = {
        println("Stopped HealthCheckServer")
      }
      def markReady(): Unit = println("Marked HealthCheckServer Ready")
      def markUnready(): Unit = println("Marked HealthCheckServer Unready")
    }
    
    class ApiServer(settings: Settings) extends AutoCloseable {
      import scala.concurrent.ExecutionContext.Implicits.global
      import scala.concurrent.duration.Duration
      import scala.concurrent.Await
      import scala.concurrent.Future
      val fakeServer = new Thread {
        override def run: Unit = {
          Await.ready(Future.never, Duration.Inf)
        }
      }
      fakeServer.start()
      println("Started ApiServer")
      def close(): Unit = {
        println("Stopped ApiServer")
      }
    }
    Definition Classes
    dvgi
  • CompatibleManagedCompanionOps
  • Managed
  • ManagedCompanionOps
  • Resource
  • Teardown
  • TeardownDoubleException

object Managed extends CompatibleManagedCompanionOps

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Managed
  2. CompatibleManagedCompanionOps
  3. ManagedCompanionOps
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

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 apply[T](setup: ⇒ T)(teardownFunc: (T) ⇒ Unit): Managed[T]

    Creates a Managed instance that requires both setup and teardown

    Creates a Managed instance that requires both setup and teardown

    Definition Classes
    ManagedCompanionOps
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  7. def const[T](t: T): Managed[T]

    Creates a Managed instance that requires neither setup nor teardown

    Creates a Managed instance that requires neither setup nor teardown

    Definition Classes
    ManagedCompanionOps
  8. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  9. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  10. def eval(setupRun: ⇒ Unit)(teardownRun: ⇒ Unit): Managed[Unit]

    Creates a Managed instance for side-effects on both setup and teardown

    Creates a Managed instance for side-effects on both setup and teardown

    Definition Classes
    ManagedCompanionOps
  11. def evalSetup(run: ⇒ Unit): Managed[Unit]

    Creates a Managed instance for side-effects on setup only

    Creates a Managed instance for side-effects on setup only

    Definition Classes
    ManagedCompanionOps
  12. def evalTeardown(run: ⇒ Unit): Managed[Unit]

    Creates a Managed instance for side-effects on teardown only

    Creates a Managed instance for side-effects on teardown only

    Definition Classes
    ManagedCompanionOps
  13. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  14. def from[T](setup: ⇒ T)(implicit ev: Teardown[T]): Managed[T]

    Creates a Managed instance that requires both setup and teardown.

    Creates a Managed instance that requires both setup and teardown. The teardown procedure is provided by an instance of the Teardown type class.

    A type class instance for java.lang.AutoCloseable is provided in ca.dvgi.managerial.

    Definition Classes
    ManagedCompanionOps
  15. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  16. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  17. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  18. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  19. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  20. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  21. def sequence[A, CC[X] <: TraversableOnce[X], To](in: CC[Managed[A]])(implicit bf: CanBuildFrom[CC[Managed[A]], A, To]): Managed[To]

    Transforms a TraversableOnce[Managed[A]] into a Managed[TraversableOnce[A]].

    Transforms a TraversableOnce[Managed[A]] into a Managed[TraversableOnce[A]]. Useful for reducing many Manageds into a single Managed.

    Definition Classes
    CompatibleManagedCompanionOps
  22. def setup[T](setup: ⇒ T): Managed[T]

    Creates a Managed instance that requires setup only

    Creates a Managed instance that requires setup only

    Definition Classes
    ManagedCompanionOps
  23. def singleton[T](t: Resource[T]): Managed[T]

    Creates a Managed instance from an existing Resource

    Creates a Managed instance from an existing Resource

    Definition Classes
    ManagedCompanionOps
  24. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  25. def toString(): String
    Definition Classes
    AnyRef → Any
  26. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  27. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  28. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()

Inherited from ManagedCompanionOps

Inherited from AnyRef

Inherited from Any

Ungrouped