ここでは、ライフサイクルモジュールのアプリケーション作成方法として、以下を説明します。
ライフサイクルモジュールの作成
ライフサイクルモジュールは、com.sun.appserv.server.LifecycleListenerインタフェースの下記メソッドを実装して作成します。
public void handleEvent(com.sun.appserv.server.LifecycleEvent event) |
handleEventメソッドに各種ライフサイクルイベント通知時の処理を実装します。処理に失敗した場合は、com.sun.appserv.server.ServerLifecycleExceptionをスローしてください。 (注)
注) com.sun.appserv.server.ServerLifecycleExceptionがスローされた場合、IJServerクラスタはサーバーログにスタックトレースを出力し、起動処理または停止処理を続行します。
通知されたライフサイクルイベントを取得するためには、com.sun.appserv.server.LifecycleEventの下記メソッドを使用します。
public int getEventType ()
LifecycleEventクラスには、各イベントを表す以下の固定値(int)を定義しています。
INIT_EVENT
STARTUP_EVENT
READY_EVENT
SHUTDOWN_EVENT
TERMINATION_EVENT
例
LifecycleListenerインタフェースの実装サンプル
import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; public class LifecycleSimpleImpl implements LifecycleListener { public void handleEvent(LifecycleEvent event) throws ServerLifecycleException { if (LifecycleEvent.INIT_EVENT == event.getEventType()) { System.out.println("INIT_EVENT"); return; } if (LifecycleEvent.STARTUP_EVENT == event.getEventType()) { System.out.println("STARTUP_EVENT"); return; } if (LifecycleEvent.READY_EVENT == event.getEventType()) { System.out.println("READY_EVENT"); return; } if (LifecycleEvent.SHUTDOWN_EVENT== event.getEventType()) { System.out.println("SHUTDOWN_EVENT"); return; } if (LifecycleEvent.TERMINATION_EVENT == event.getEventType()) { System.out.println("TERMINATION_EVENT"); return; } } }
プロパティの取得方法
ライフサイクルモジュールの設定で追加したプロパティは、com.sun.appserv.server.LifecycleEventクラスの下記メソッドより取得します。全てのライフサイクルイベントで取得可能です。
public java.lang.Object getData()
例
追加プロパティ(プロパティ名を「arg1」で登録)を取得し、標準出力を行うライフサイクルリスナー実装サンプル
import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; import java.util.*; public class LifecycleListenerImpl implements LifecycleListener { Properties prop = null; public void handleEvent(LifecycleEvent event) throws ServerLifecycleException { if (LifecycleEvent.INIT_EVENT == event.getEventType()) { prop = (Properties)event.getData(); System.out.println("arg1="+prop.getProperty("arg1")); return; } } }
javax.naming.InitialContextの取得方法
InitialContextのインスタンスは、com.sun.appserv.server.LifecycleEventContextの下記メソッドより取得します。
public javax.naming.InitialContext getInitialContext()
LifecycleEventContextインスタンスは、com.sun.appserv.server.LifecycleEventクラスの下記メソッドより取得します。
public com.sun.appserv.server.LifecycleEventContext getLifecycleEventContext()
例
1) InitialContextを取得し、javax.sql.DataSourceをlookupするライフサイクルリスナー実装サンプル
import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class LifecycleListenerImpl implements LifecycleListener { public void handleEvent(LifecycleEvent event) throws ServerLifecycleException { if (LifecycleEvent.READY_EVENT == event.getEventType()) { InitialContext ic = event.getLifecycleEventContext().getInitialContext(); try { DataSource ds = (DataSource) ic.lookup("jdbc/db"); } catch (NamingException ne) {} return; } } }
例
2) InitialContextを取得し、EJBビジネスインタフェース(examples.session.stateless.Hello)をlookupするライフサイクルリスナー実装サンプル
import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; import javax.naming.InitialContext; import javax.naming.NamingException; public class LifecycleListenerImpl implements LifecycleListener { public void handleEvent(LifecycleEvent event) throws ServerLifecycleException { if (LifecycleEvent.READY_EVENT == event.getEventType()) { InitialContext ic = event.getLifecycleEventContext().getInitialContext(); try { Object ds = (Object) ic.lookup("examples.session.stateless.Hello"); } catch (NamingException ne) {} return; } } }
実装上の注意
ライフサイクルモジュールは、mainサーバスレッドにより同期的に実行されます。そのため、これらのクラスがIJServerクラスタの起動/停止をブロックしないようにする必要があります。ライフサイクルモジュールの処理でIJServerクラスタの起動がブロックされている場合、IJServerクラスタ起動待ち時間の経過後にIJServerクラスタの起動が失敗します。
下記APIの返却情報は、将来バージョンで変更される可能性があります。返却情報に依存する処理は、実装しないでください。
public.java.String[] getCmdLineArgs()
public java.lang.String getInstallRoot()
public java.lang.String getInstanceName()
アプリケーションインタフェース詳細
インタフェースは、すべて下記ファイルに格納されています。
C:\Interstage\F3FMisje7\glassfish\modules\glassfish-api.jar
/opt/FJSVisje7/glassfish/modules/glassfish-api.jar
各インタフェースの詳細は、Oracle Corporation公開のJavaDocを参照してください。