![]() |
![]() |
|
|
| |
WebLogic クラスタの API
以下の節では、WebLogic クラスタ API について説明します。
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 の Administration 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
カスタム呼び出しルーティングと連結の最適化
レプリカを呼び出すオブジェクトと同じサーバ インスタンス上にレプリカが存在する場合は、ローカル レプリカを使う方が効率的なので、呼び出しのロード バランシングは行われません。詳細については、 連結されたオブジェクトの最適化を参照してください。
![]() |
![]() |
![]() |