起動/停止の実行クラスを使用していた場合のアプリケーションの移行方法を説明します。
ライフサイクルモジュールの作成方法は、「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.25 起動/停止の実行クラス」を参照してください。
ライフサイクルモジュール自体は引数の受け渡しを行えませんが、プロパティを使用することにより、起動/停止の実行クラスの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;
}
}
}