ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

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回はいきなりソース公開します。

2010年11月3日水曜日

Javaテンプレートエンジン [Mayaa]

pythonとか使ってて思うことですが、
強力なテンプレートエンジンがあるってことは
その言語の魅力だなーと。

で、Javaには無いのかーってことで
Mayaa

結構気になってたんだけど
なかなか使う機会なく,,,


ちゃんとドキュメント読んだのは初めてですが、
これはいい!と思ったのはレイアウト。

レイアウト共有

JSPだと、各ページ共通のものをincludeでガチガチ書かないとダメですが、
このレイアウトの発想を待ってました!

要は、基本となるlayout.htmlがあって、
各ページで異なる部分をそこにインサートしていく、と。


詳細は次回。

2009年8月13日木曜日

JNDI -JNDIへの登録-

JNDIの2回目

いまいち理解できないので、
ちゃんと流れを追うことにした。

参考:

まず、JNDIを使うには、JNDIへ情報を登録する必要がある。
登録してあって、初めて使うことが出来る。

で、登録の方法。

例としては、
DataSourceオブジェクトの登録
File Systemサービスプロバイダを使用するJNDIへの登録例

1. システムプロパティを取得する
Properties sys_prop = System.getProperties();

2. File Systemサービスプロバイダのプロパティを設定する
sys_prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");

3. File Systemサービスプロバイダで使用するディレクトリを設定する (この場合,c:\JNDI_DIRの下に登録される)
sys_prop.put(Context.PROVIDER_URL, "file:c:"+File.separator + "JNDI_DIR");

4. システムプロパティを更新する
System.setProperties(sys_prop);

5. JNDIを初期化する
Context ctx = new InitialContext();

6. DataSourceオブジェクトを,jdbc/TestDataSourceという論理名称でJNDIに登録する
ctx.bind("jdbc" + File.separator + "TestDataSource", ds);

まだ理解が追いつかない...
でも、とりあえず次は情報の取得を調べてみよう。
J2EEコンテナは、設定ファイルで登録できるらしいからなー

2009年8月12日水曜日

JNDI -いまさら-

JNDIをちゃんと勉強しようと思った。

こんなソースを触ってたら、
「やっぱりちゃんと勉強しよう」と。

InitialContext ictx = new InitialContext();
DataSource ds = (DataSource) ictx.lookup("java:comp/env/jdbc/SampleDS");


JNDIを使うと、様々なネーミングサービス、ディレクトリサービスにアクセスすることができるとのこと。
で、ネーミングサービス、ディレクトリサービスとは?

ネーミングサービス


・文字列で表現される名前と特定のオブジェクトとを関連づけるサービス
・名前を指定するとそれに対応するオブジェクトを得ることができる

ディレクトリサービス


・住所録や電話帳などのように、住所や氏名などの様々な情報を効率的に管理し、その情報を更新したり検索したりすることができるようにするサービス
・電話帳で名前から電話番号が探し出せるように、ディレクトリサービスを利用することで簡単にほしい情報を得ることができる

うーん、いまいち分からない。。。
使用の手順は、

手順




  1. Propertiesオブジェクトを用意する。

  2. PropertiesにINITIAL_CONTEXT_FACTORYをputする。

  3. 同様にPROVIDER_URLをputする。

  4. Propertiesを引数としてInitialContext(またはInitialDirContext)をnewする。

  5. InitialContextやInitialDirContextを利用して、bindしたりlookupしたりする。



やっぱり難しい。
どうやら、InitialContextがポイントになるみたい。
次はInitialContextを調べてみようと思う。