2012年6月27日水曜日

アプリケーションの止め方 その2

その1は以前commons-daemon書いたときの方法だけど
文字列入力する方法は分かりにくいので、(どこに入力するか迷う)
Ctrl + zとした。というかreadLine()がnullの場合。


macだとCtrl + dとか。

2012年5月18日金曜日

StringでSOAP通信

wsdlからwsimportを使って自動生成したJavaクラスSayHelloを使って、SOAPメッセージ(xml)をString型で生成し、
そのStringをURLConnectionでHTTP送受信する。
で、レスポンスをStringにして
SOAPMessageに戻す。

SOAPMessageからSOAPEnvelopeの子要素をorg.w3c.dom.Nodeオブジェクトで取得。
最後に、JAXBのUnmarshallでNodeからSayHelloResponse(wsimportで生成されたSOAPの応答のクラス)に変換する。
あとは、いつものSOAPです。


以上! ソースが汚すぎるから、明日整形しましょうかね。

2012年4月4日水曜日

commons-daemon 第3回

Windowsでのサービス登録方法 公式ページを参考にしてもどうにも動かないので、ちょっと頑張りが必要でした。  公式ページ → Daemon: Procrun

jarの作成

前回作成したJavaをJarにします。
ここでは面倒なので、Eclipseのエクスポート機能を使います。

成果物:EngineLauncher.jar

場所

とりあず、C:\tmp\test-serviceを作ります。
で、libフォルダにcommons-daemon-1.0.10.jar、commons-logging-1.1.1.jar、log4j-1.2.16.jarを入れ
logsフォルダも作っておきます。
あと、commons-daemon-1.0.10-bin-windows.zipをダウンロードしてあるはずなので、
その中にあるprunsrv.exeもC:\tmp\test-serviceに入れておきます。
C:\tmp\test-service
│  EngineLauncher.jar
│  install.bat
│  prunsrv.exe
│  uninstall.bat
│  
├─lib
│      commons-daemon-1.0.10.jar
│      commons-logging-1.1.1.jar
│      log4j-1.2.16.jar
│      
└─logs
        commons-daemon.2012-04-04.log
        testservice-stderr.2012-04-04.log
        testservice-stdout.2012-04-04.log

サービスへの登録バッチ

--Jvmオプションでjvm.dllの場所を指定するのですが、autoでうまく動かず、直接指定しました。autoのはずだと思うのですが…

サービスへの削除バッチ


手順

install.batを実行すると、サービスに登録され、管理ツールからサービスを開いて、"Test Service"を開始すればサービスが始まります。
停止すれば止まります。
アンインストールは、uninstall.batです。

--Startup=autoだけど、install.batを実行しても開始されません...

追加で

commons-logging.properties

log4j.xmlはこんなかんじ。/var/log/daemon/application.logにログ出力します。

commons-daemon 第2回

まずはjavaソースから。 以下のwikiを参考にしてます。

参考 Daemon - Commons Wiki

ただ、肝心な部分がよく分からなかったので、カスタマイズしてます。 まずは、Daemonインターフェースを実装したクラス。
EngineLauncher クラスが本体で、こいつがEngine(インターフェースを実装した)クラスを起動してメイン処理を実行します。
停止するときも、Engine(インターフェースを実装した)クラスを停止します。

EngineLauncher

Windowsのサービスとして動くときは、windowsServiceを使用します。
procrun.exeは、public staticメソッドしか呼ぶことができません。
そして、実行時には引数を渡すことができますので
開始時には、"start"、停止時には"stop"を渡すことで、それぞれstartWindowsServiceとstopWindowsServiceメソッドを呼び出します。

mainメソッドはおまけです。使用しません。

Linuxで使用するjsvcでは、Daemonインターフェースを実装していると、
最初にinitが呼ばれ、続いてstartメソッドが呼ばれます。
停止するときは、"-stop"オプションをつけてjsvcを実行することでstopメソッドが呼び出されます。

Engine


SampleEngineImpl


さて、第3回では、Windowsサービスへの登録方法とLinuxデーモン化方法を書きたいと思います。

2012年3月28日水曜日

commons-daemon [第1回]

Javaでも常駐プロセスを、つまりデーモンを作りたいときもある。
もしくは、Windowsサービスを作りたいときもある。

そんなとき、やっぱり常駐するだけあって、実績のあるものを使いたい!!(←本音)

ということで選択したのはtomcatでも採用されている「commons-daemon

しかし、情報が少ない。 日本語も少ないし、英語も少ない(全部読んだわけではないけど)。

というわけで、自分で書いてみる。

第1回目は目標を掲げます。

目標

LinuxでもWindowsでも動くデーモンorサービスを作る

準備

次のサイトからダウンロードします。※1.0.10使います。 Commons Daemon Download
  1. [Commons Daemon Binaries] commons-daemon-1.0.10-bin.tar.gz
  2. [Browse native binaries download area...] commons-daemon-1.0.10-bin-windows.zip
  3. [Commons Daemon Source] commons-daemon-1.0.10-native-src.tar.gz


1番目は実装するときに使います。
2番目はWindowsサービス化で使います。
3番目はLinuxデーモン化で使います。
第2回はいきなりソース公開します。