All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nirvana.support.services.TapestryIocContainerSupport.scala Maven / Gradle / Ivy

// Copyright 2011,2012,2013,2014 Jun Tsai. All rights reserved.
// site: http://www.ganshane.com
package nirvana.support.services

import java.util.concurrent.CountDownLatch
import org.apache.tapestry5.ioc.{ Registry, RegistryBuilder }
import org.slf4j.LoggerFactory

/**
 * tapestry container startup
 */
trait TapestryIocContainerSupport {
  private var registry: Registry = null
  private var isClosed = false
  val startSignal = new CountDownLatch(1)
  /**
   * startup tapestry
   */
  def startUpContainer(modules: Class[_]*) {
    val builder = new RegistryBuilder()
    builder.add(modules: _*)
    val m = System.getProperty("tapestry.modules")
    if(m != null)
      builder.add(m.split(',').map(Class.forName) : _*)
    registry = builder.build()
    registry.performRegistryStartup()

    Runtime.getRuntime.addShutdownHook(new Thread() {
      override def run() {
        closeRegistry()
      }
    })
  }

  def join() {
    startSignal.await()
  }

  def stopServer() {
    startSignal.countDown()
    closeRegistry()
    val logger = LoggerFactory getLogger getClass
    logger.info("Server  Terminated!")
  }
  def closeRegistry() {
    synchronized {
      val logger = LoggerFactory getLogger getClass
      if (!isClosed) {
        try {
          logger.info("closing server ....")
          registry.shutdown()
          isClosed = true
          logger.info("server closed")
        } catch {
          case e: Throwable => logger.warn("fail to stop registry", e)
        }
      }
    }
  }
  /**
   * from container get service object
   */
  def getService[T](clazz: Class[T]): T = registry.getService(clazz)
  def getService[T](clazz: Class[T],serviceId:String): T = registry.getService(serviceId,clazz)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy