How to integrate your application with the Java Service Wrapper

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

まず初めのステップは、4つの方法の中から、ご利用のアプリケーションに一番適切しているものを選択することです。 4つの方法のそれぞれの概要を簡単に説明した後、各方法を使用してアプリケーションを統合する方法について詳しく説明します。

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

まずインテグレーション方法1は、アプリケーションの起動に「WrapperSimpleApp」ヘルパークラスを使う手法です。 これは Wrapper と統合するための最もシンプルな方法であり、利用が可能であれば、一番お薦めの手法です。

Details

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

シンプルな HelloWorld アプリケーションを使う具体例をあげて、さらに詳しい概要や使い方について、 Windows用、または Linux / UNIX用の説明ページを参照してください。

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

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

Details

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

Wrapper は、インテグレーション方法1「start」クラスを使用してアプリケーションを起動し、 アプリケーションをシャットダウンする時間になると「stop」クラスの メインメソッドを呼び出すことによって、この種のアプリケーションで動作します。

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

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

インテグレーション方法 3 は、最も柔軟性が高く、Wrapper のすべての機能を最大限に活用できる一方で、 統合を完了するためにコーディングが必要な唯一のインテグレーション方法でもあります。 この方法では、「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 をシャットダウンするとき、きれいにシャットダウンするように アプリケーションへ直接呼び出しは行われません。 むしろ、Wrapper は JVM 内部から「System.exit()」メソッドを呼び出して JVM のシャットダウンさせます。 アプリケーションが独自のシャットダウンフックを登録している場合は、それが呼び出され、 アプリケーションが正常にシャットダウンする機会が与えられます。 その一方、もしシャットダウンフックが登録されていない場合、 コンソール(コマンドウィンドウ)から[CTRL]+[C]のキー操作によるアプリケーション任意停止と 同じように動作し、アプリケーションを直ちに終了させます。 シャットダウンフックの有無に関わらず、いずれのケースでも、Wrapper 導入前の環境状態と同じ挙動をします。

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

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