ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverクラスタの使用
11g リリース1(10.3.6)
B60992-04
  目次へ移動
目次

前
 
次
 

A 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コンソールで定義された名前で一意に識別されます。これらは、メソッド・ルーターがサーバーの識別のために使用する必要がある名前です。

例: 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呼出しは、ExampleRouterExampleImplを関連付けて、パラメータ・ベースのルーティングを有効にします。

$ rmic -clusterable -callRouter ExampleRouter ExampleImpl

カスタム呼出しルーティングと連結の最適化

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