以下の節では、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
オブジェクトがレプリカを呼び出している同じサーバ インスタンス上にレプリカがある場合、ローカル レプリカを使用する方が効率的なので、その呼び出しはロード バランシングの対象にはなりません。詳細については、「連結されたオブジェクトの最適化」を参照してください。