次の項では、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コンソールで定義された名前で一意に識別されます。これらは、メソッド・ルーターがサーバーの識別のために使用する必要がある名前です。
例: foo
というメソッドでリモート・インタフェースExampleを実装する、ExampleImpl
クラスを考えます。
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
オブジェクトがレプリカを呼び出している同じサーバー・インスタンス上にレプリカがある場合、ローカル・レプリカを使用する方が効率的であるため、そのコールはロード・バランシングの対象にはなりません。詳細は、「連結されたオブジェクトの最適化」を参照してください。