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