WebLogic Server クラスタ ユーザーズ ガイド
以下の節では、WebLogic クラスタ API について説明します。
WebLogic クラスタの公開 API は、単一インタフェース weblogic.rmi.cluster.CallRouter
に含まれています。
Class java.lang.Object
Interface weblogic.rmi.cluster.CallRouter
(extends java.io.Serializable)
パラメータベースのルーティングを可能にするには、このインタフェースを実装するクラスを RMI コンパイラ (rmic
) に与えなければなりません。以下のオプションを使って (すべて 1 行に入力します)、サービス実装時に rmic
を実行します。
$ java weblogic.rmic -clusterable -callRouter
<callRouterClass> <remoteObjectClass>
リモート メッセージが呼び出されるたびに、クラスタ化可能なスタブからコール ルータを呼び出します。コール ルータは、その呼び出しの宛先のサーバの名前を返します。
クラスタ内の各サーバは、WebLogic Server Console で定義された名前でユニークに識別されます。これらの名前は、メソッド ルータがサーバを識別するための名前となります。
例 : ExampleImpl
というクラスを例に説明します。このクラスは、メソッド foo
でリモート インタフェース Example を実装します。
public class ExampleImpl implements Example {
public void foo(String arg) { return arg; }
}
この CallRouter
を実装した ExampleRouter
では、'arg' < "n" の場合にすべての foo
呼び出しが server1 (server1 に届かない場合は server3) に送られ、'arg' >= "n" の場合にすべての呼び出しが server2 (server2 に届かない場合は server3) に送られます。
public class ExampleRouter implements CallRouter {
private static final String[] aToM = { "server1", "server3" };
private static final String[] nToZ = { "server2", "server3" };
public String[] getServerList(Method m, Object[] params) {
if (m.GetName().equals("foo")) {
if (((String)params[0]).charAt(0) < 'n') {
return aToM;
} else {
return nToZ;
}
} else {
return null;
}
}
}
次の rmic
呼び出しは、ExampleRouter
と ExampleImpl
を関連付けて、パラメータベースのルーティングを有効にします。
$ rmic -clusterable -callRouter ExampleRouter ExampleImpl
オブジェクトがレプリカを呼び出している同じサーバ インスタンス上にレプリカがある場合、ローカル レプリカを使用する方が効率的なので、その呼び出しはロード バランシングの対象にはなりません。詳細については、「連結されたオブジェクトの最適化」を参照してください。