LoginSignup
25
23

More than 5 years have passed since last update.

ScalaとApache Commons Daemonで常駐プログラムを作る

Last updated at Posted at 2014-03-14

なにかと常駐プログラムを書くときがありますよね!

この記事では、Apache Commons Daemonを使ってデーモンを作り、SBTのAssemblyプラグインを使って実行可能なJarを作ります。

実装

SBTの依存に"commons-daemon" % "commons-daemon" % "1.0.10"を追加して、reloadとupdateを事前にしておきます。

object Service extends App {
  val akuma = new Akuma
  akuma.start
}
import org.apache.commons.daemon.Daemon
import org.apache.commons.daemon.DaemonContext

import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors

class Akuma extends Daemon {
  val executorService = Executors.newSingleThreadExecutor

  override def init(dc: DaemonContext) {
  }

  override def start {
    println("start daemon")

    executorService.execute(new Runnable() {
      def run() {
        try {
          // do something.
        } catch {
          case e: InterruptedException => println(e)
        }
      }
    })
  }

  override def stop {
    println("halt daemon")
    executorService.shutdown()
  }

  override def destroy {
  }
}

ExecutorServiceを使ってスレッドを実行します。

build.sbt

build.sbt
import AssemblyKeys._

name := "daemon"

organization := "daemon"

version := "0.1.0-SNAPSHOT"

scalaVersion := "2.10.3"


libraryDependencies ++= {
    "commons-daemon" % "commons-daemon" % "1.0.10"
}

seq(Revolver.settings: _*)

assemblySettings

jarName in assembly := "jarname.jar" // 出力されるjarの名前

test in assembly := {} // テストをスキップする時はこれを指定

mainClass in assembly := Some("com.foo.Main") // メインクラスの指定

Assembly

% sbt
> assembly

とやると、target/scala-2.10/jarname.jar にJarファイルができるので、java -jar target/scala-2.10/jarname.jarとやってやると常駐プログラムが走ります。

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23