Java Service Wrapper を Java アプリケーションに統合する手法

現在、Java アプリケーションに Java Service Wrapper をインテグレーション(統合化)する手法には、4つの方法があります。 そのうちの3つでは、追加のコーディングを必要とせずに、すぐに利用することができます。

まず初めのステップは、4つの方法の中から、あなたのアプリケーションに一番適切しているものを選択することです。 それぞれの4つの方法について簡単に概要を説明した後、それぞれ個別にアプリケーション統合方法の詳細へと進んでいきます。

インテグレーション方法1(WrapperSimpleApp)

まず方法1は、アプリケーションの起動に[WrapperSimpleApp]ヘルパークラスを使う手法です。 これは遥かに簡単なインテグレーション方法で、利用が可能であれば、一番お薦めの手法です。

Details

この方法を利用するにおいて理解しておくべき点がいくつかあります。 Wrapper が JVM をシャットダウンする際に、 直接アプリケーションへシャットダウンをリクエストするわけではなく、 JVM 内部から[System.exit ()]メソッドを呼び出して JVM のシャットダウンシーケンスに入ります。 もし、アプリケーションがシャットダウンフックを登録されている場合、 通常どおりに実行処理され、アプリケーションがキレイにシャットダウンできる時間を確保します。 その一方、もしシャットダウンフックが登録されていない場合、 コンソール(コマンドウィンドウ)から[CTRL]+[C]のキー操作によるアプリケーション任意停止と 同じように動作し、 アプリケーションを直ちに終了させます。 シャットダウンフックの有無に関わらず、 シャットダウンフックの有無に関わらず、いずれのケースでも、Wrapper 導入前の環境状態と同じ挙動をします。

シンプルな HelloWorld アプリケーションを使う具体例をあげて、さらに詳しい概要や使い方について、 こちら (WindowsLinux / UNIX) を参照ください。

インテグレーション方法2(WrapperStartStopApp)

方法2は、[WrapperStartStopApp]ヘルパークラスを使う手法です。 この手法は、1つのクラスを使用して開始し、別のクラスで停止するという Tomcat の ようなアプリケーションを利用している環境下でのインテグレーションに適している手法です。

Details

通例、この種のアプリケーションは、スタートアップ時にサーバー ソケットを開き、 シャットダウンのキッカケになる接続待ち状態になります。 [シャットダウン]あるいは[stop]クラスが起動し、アプリケーションに接続することによって、 シャットダウンのキッカケを引き起こします。

この種のアプリケーションを持つ環境下では、 アプリケーションを起動させる時には、最初のメソッド[start]クラスを呼び出したり、 アプリケーションのシャットダウン時には、[stop]クラスのメインメソッドを呼び出したり、 Wrapper は「クラスの呼び出し」で動作します。

Tomcatを使う具体例をあげて、さらに詳しい概要や使い方について、 こちら (WindowsLinux / UNIX)を参照ください。

インテグレーション方法3(WrapperListener)

他の方法ではコーディングを必要としませんが、この方法3では、唯一、手順の中で少しコーディングを加える必要があるもので、 最も柔軟に、 かつ Wrapper の特徴を最大限に活用したものと言えるでしょう。 この方法3は、[WrapperListener] インターフェイスを実装するクラス作成にまで踏み込みます。 ユーザークラスのインスタンスが作成され、WrapperManager に登録されます。

Details

この方法3は、前述の2つの方法 (方法1:[WrapperSimpleApp]方法2:[WrapperStartStopApp]) とは共には利用できないという難点がありますが、複雑さにも十分に耐えうるのも最大の特徴です。 この方法3は、スタートアップやシャットダウンのプロセス同様に、ユーザーコードで要求を受けたり、 直接的にシステム コントロール イベントへ応答を返したり、ユーザーコードの実行を許可する唯一の方法です。

もし、コーディングして機能を追加する必要がない場合には、方法1(WrapperSimpleApp)で シャットダウンフックを実装すること、 あるいは、[シャットダウン]クラスを実装することは、必要であれば追加すればいい程度のオプションとして考えれば良いでしょう。 [シャットダウン]クラスのメインメソッドは、アプリケーションのシャットダウンメソッドを 呼び出すのと同様に、シンプルです。

なお、ほとんどのケースでは、方法1(WrapperSimpleApp)方法2(WrapperStartStopApp)のヘルパークラスが、 適切なタイミングで、アプリケーションのスタートアップやシャットダウンの面倒を見てくれるので、 方法3(WrapperListener)でのコーディングで機能を追加する必要性は、ほとんどないと思われます。

さらに詳しい概要や使い方について、 こちら(プラットフォームに依存しない独立型)を参照ください。

インテグレーション方法4(WrapperJarApp)

方法4は、アプリケーションの起動に[WrapperJarApp]ヘルパークラスを使う手法です。 これもまたシンプルな Wrapper 統合方法で、アプリケーションが実行可能な「jar」ファイルとして作動するように設定されている場合にご利用いただけます。

Details

この方法を利用するにおいて理解しておくべき点がいくつかあります。 Wrapper が JVM をシャットダウンする際に、直接アプリケーションへシャットダウンをリクエストするわけではなく、 JVM 内部から[System.exit()]メソッドを呼び出して JVM のシャットダウンシーケンスに入ります。 もし、アプリケーションが シャットダウンフック を登録されている場合、通常どおりに実行処理され、アプリケーションがキレイにシャットダウンできる時間を確保します。 その一方、もしシャットダウンフックを登録されていない場合、 コンソール(コマンドウィンドウ)から[CTRL]+[C]のキー操作によるアプリケーション任意停止と同じように動作し、 アプリケーションを直ちに終了させます。シャットダウンフックの有無に関わらず、 いずれのケースでも、Wrapper 導入前の環境状態と同じように動作します。

JBoss EAPを使う具体例をあげて、さらに詳しい概要や使い方について、 こちら(WindowsLinux / UNIX)を参照ください。

参照: Wrapper でアプリケーションを起動する