ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server 移行ガイド
Interstage

2.24.1 アプリケーションのJava EEのライフサイクルモジュールへの移行方法

起動/停止の実行クラスを使用していた場合のアプリケーションの移行方法を説明します。

ライフサイクルモジュールの作成方法は、「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;
        }
    }
}