起動/停止の実行クラスを使用していた場合のアプリケーションの移行方法を説明します。
ライフサイクルモジュールの作成方法は、「Java EE運用ガイド」の「ライフサイクルモジュールの作成方法」を参照してください。
mainメソッド処理の移植
mainメソッドの処理をライフサイクルモジュールのhandleEventメソッドに移植します。
起動時実行クラスを移植する場合はREADY_EVENT通知時の処理、停止時実行クラスを移植する場合はSHUTDOWN_EVENT通知時の処理として実装してください。
ライフサイクルモジュールが移植元の起動/停止の実行クラスの全ての処理を行える場合、ライフサイクルモジュールはhandleEventメソッドから起動/停止の実行クラスのmainメソッドの処理を実行することで移植できます。起動/停止の実行クラスを修正する必要はありません。
例
J2EEの起動時実行クラスサンプル(修正不要。変更せずにライフサイクルモジュールから実行する。)
package sample10; public class UserStartup { public static void main(String args[]) { if (args.length == 1) { System.out.println(args[0]); } System.out.println("UserStartup"); } }
Java EEのライフサイクルモジュールサンプル(J2EEの起動時実行クラスを流用する。)
package sample10; import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; public class LifecycleListenerImpl implements LifecycleListener { public void handleEvent(LifecycleEvent event) throws ServerLifecycleException { if (LifecycleEvent.READY_EVENT == event.getEventType()) { UserStartup.main(new String[]{"arg"}); return; } } }
「引数」の受け渡し
引数の受け渡しは行えません。代替機能としてプロパティが使用できます。詳細は、「2.24 起動/停止の実行クラス」を参照してください。
ライフサイクルモジュール自体は引数の受け渡しを行えませんが、プロパティを使用することにより、起動/停止の実行クラスのmainメソッドに引数の受け渡しができます。ライフサイクルモジュールが移植元の起動/停止の実行クラスの全ての処理を行える場合、引数を受け渡すために起動/停止の実行クラスを修正する必要はありません。
例では引数が1つの例を示します。引数が2つ以上ある場合も同様に実装してください。
例
J2EEの停止時実行クラスサンプル(修正不要。変更せずにライフサイクルモジュールから実行する。)
package sample20; public class UserShutdown { public static void main(String args[]) { if (args.length == 1) { System.out.println(args[0]); } System.out.println("UserShutdown"); } }
Java EEのライフサイクルモジュールサンプル(J2EEの起動時実行クラスを流用して、mainメソッドに引数を受け渡す。)
package sample20; import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; import java.util.Properties; public class LifecycleListenerImpl implements LifecycleListener { Properties prop = null; public void handleEvent(LifecycleEvent event) throws ServerLifecycleException { if (LifecycleEvent.SHUTDOWN_EVENT == event.getEventType()) { prop = (Properties) event.getData(); String[] args = {prop.getProperty("arguments")}; UserShutdown.main(args); return; } } }
InitialContextの取得
InitialContextの取得処理をライフサイクルモジュール専用のAPIから取得する処理に修正してください。詳細は、Java EE運用ガイドの「ライフサイクルモジュールの作成方法」の「javax.naming.InitialContextの取得方法」を参照してください。
起動/停止の実行クラスでInitialContextの取得処理を実施していた場合、ライフサイクルモジュールは専用のAPIを使用する必要があるため、必ず起動/停止の実行クラスを修正する必要があります。
例
J2EEの起動時実行クラスサンプル(InitialContextの取得方法が異なるため修正が必要。)
package sample30; import java.util.Hashtable; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class UserStartup { public static void main() { Hashtable<String, String> hashtable = new Hashtable<String, String>(); hashtable.put("java.naming.factory.initial", "com.fujitsu.interstage.j2ee.jndi.InitialContextFactoryForClient"); try { InitialContext ic = new InitialContext(hashtable); DataSource ds = (DataSource) ic.lookup("jdbc/db"); } catch (NamingException ne) { } System.out.println("UserStartup"); } }
Java EEのライフサイクルモジュールサンプル(専用APIでInitialContextを取得する。)
package sample30; 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.STARTUP_EVENT == event.getEventType()) { InitialContext ic = event.getLifecycleEventContext().getInitialContext(); try { DataSource ds = (DataSource) ic.lookup("jdbc/db"); } catch (NamingException ne) { } System.out.println("UserStartup"); return; } } }