S-JIS[2008-12-01/2008-12-09] 変更履歴

WebLogicのRMI

WebLogicはRMIを使う際に特別な配慮をしてくれるので、標準のRMIとは実装方法が多少異なる。


インターフェースの作成

まず、インターフェースを作る。
このインターフェースを経由してクライアントからメソッドを呼び出すことになる。

RmiSample.java

package jp.hishidama.rmi;

import java.rmi.Remote;

public interface RmiSample extends Remote {

	public String getMessage();
}

WebLogicのRMIでは、java.rmi.Remoteからextendsするだけでよい。
(各メソッドに「throws RemoteException」を付ける必要も無い)


インターフェースの実装

次に、インターフェースを実装したクラスを作る。
このクラスのインスタンスが実際に呼ばれることになる。

RmiSampleImpl.java

package jp.hishidama.rmi;

public class RmiSampleImpl implements RmiSample {

	public String getMessage() {
		String home = System.getProperty("wls.home");
		return "RmiSampleImplメッセージ: " + this + " / " + home;
	}
}

WebLogicのRMIでは、Serializableをimplementsする必要は無い。


JNDIへの登録

(実行時に)実装クラスのインスタンスをWebLogicのJNDIへ登録(バインド)する。

以下の例では、RmiSampleNameという名前を付けてバインドしている。

バッチから登録する例

	public static void main(String[] args) throws NamingException {

		InitialContext ctx = initContext();

		Object obj = new RmiSampleImpl();
		ctx.rebind("RmiSampleName", obj);

		for (;;);
	}

ここで登録したインスタンス(にアクセスするプロキシー)が、クライアントから取得される。
バッチの場合、最後に無限ループにしておかないと、JNDIからインスタンスを取得できない。(プログラムが終了すると、JNDIから消される為?)

サーブレットから登録する例

public class RmiServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {

		try {
			InitialContext ctx = new InitialContext();

			Object obj = new RmiSampleImpl();
			ctx.rebind("RmiSampleName", obj);

		} catch (NamingException e) {
			throw new ServletException(e);
		}
	}
〜
}

サーブレットのinit()は、そのサーブレットが初めてインスタンス化するときに一度だけ呼ばれる。
(そのサーブレットにブラウザーからアクセスしないとインスタンス化されないけどね)


JNDIからの取得

WebLogicのJNDIの機能を利用して、リモートオブジェクト…JNDIに登録されているインスタンス(にアクセスするプロキシー)を取得する。

	public static void main(String[] args) throws NamingException {

		InitialContext ctx = initContext();

		RmiSample rs = (RmiSample) ctx.lookup("RmiSampleName");
		String msg = rs.getMessage();

		System.out.println(msg);
	}

インターフェース経由で呼び出すことで、WebLogic内で管理されているインスタンスのメソッドが呼ばれる。
(何度呼び出しても、同じインスタンスへのアクセスとなる)


WebLogicへ戻る / RMIへ戻る / JBossのRMIへ行く / 技術メモへ戻る
メールの送信先:ひしだま