24 Coherence RESTの概要

Coherence RESTを使用する前に、ある程度時間をかけてCoherence RESTの実装方法を学習します。ユーザーは、Coherence RESTを使用するために、WebサービスおよびJAX-RSに精通する必要があります。

この章の内容は次のとおりです。

Coherence RESTの概要

Coherence RESTは、HTTPプロトコルを介したCoherenceキャッシュおよびキャッシュ・エントリへの容易なアクセスを提供します。これは、Coherence*Extendに似ています。リモート・クライアントは、クラスタ自体のメンバーになることなく、Coherenceに保存されたデータにアクセスできます。ただし、独自のプロトコルのCoherence*Extendと異なり、Coherence RESTでは、基本プロトコルとしてHTTPを使用して、JSONやXMLなどの複数の表現形式でデータをマーシャリングできます。Coherence RESTの利点は、RubyやPythonなど(Coherenceでネイティブにサポートされていない)別の言語で記述されたアプリケーションがキャッシュ・データと相互作用できるということです。

Coherence RESTの例

Coherenceディストリビューションには、RESTアプリケーションのエンドツーエンドの例が含まれます。『Oracle Coherenceのインストール』Coherence RESTの例に関する項を参照してください。

Coherence RESTの依存性

Coherence REST実装は、COHERENCE_HOME/lib/coherence-rest.jarライブラリにパッケージ化され、coherence.jarライブラリに依存します。また、Coherence REST実装では、多くのライブラリ依存性が含まれ、様々なHTTPサーバー実装(Netty HTTPサーバー、Simple HTTPサーバー、Jetty HTTPサーバーおよびGrizzly HTTPサーバー)もサポートしています。これらの依存性を管理するには、アプリケーションでMavenを使用することを強くお薦めします。初めてMavenを使用する場合は、https://maven.apache.org/を参照してください。

Coherence RESTとNetty HTTPサーバーを使用するには、次の依存性をMaven pom.xmlファイルに追加します。

ノート:

このpom.xmlを使用目的でコピーする場合は、使用しているCoherenceパッチ・バージョンを含むようにすべての<version>要素を更新します。
<dependencies>
   <dependency>
      <groupId>com.oracle.coherence</groupId>
      <artifactId>coherence</artifactId>
      <version>14.1.1-0-0</version>
   </dependency>
   <dependency>
      <groupId>com.oracle.coherence</groupId>
      <artifactId>coherence-rest</artifactId>
      <version>14.1.1-0-0</version>
   </dependency>
    <dependency>
      <groupId>com.oracle.coherence</groupId>
      <artifactId>coherence-http-netty</artifactId>
      <version>14.1.1-0-0</version>
   </dependency>
</dependencies>

必要なすべての依存性が自動的にダウンロードされます。ライブラリの完全なリストを表示するには、次のMavenコマンドを実行します。

mvn dependency:list

pom.xmlファイルの詳細は、Coherence RESTの例を参照してください。

Coherence RESTの構成の概要

Coherence RESTは、キャッシュ構成ファイルおよびREST構成ファイルを使用して構成されます。

ノート:

Coherence RESTをJavaEEサーバーにデプロイする場合、web.xmlファイルの構成も必要です。「Java EEサーバー(一般)へのデプロイ」を参照してください。

  • キャッシュ構成デプロイメント・ディスクリプタ: このファイルは、クライアント側のキャッシュ・サービスおよびHTTPアクセプタを定義するために使用します。HTTPアクセプタはHTTPを介してリモートRESTからの接続を受け入れます。アクセプタには、クライアントが接続するクラスタ側のHTTPサーバーのアドレスおよびポートが含まれます。このファイルのスキーマは、coherence-cache-config.xsdファイルです。『Oracle Coherenceでのアプリケーションの開発』http-acceptorに関する項を参照してください。

    実行時には、クラスパスで最初に検出されたキャッシュ構成ファイルが使用されます。coherence.cacheconfigシステム・プロパティを使用して、キャッシュ構成ファイルを明示的に指定することもできます。このファイルは、プログラムによっても設定できます。Oracle Coherenceでのアプリケーションの開発キャッシュ構成ファイルの指定を参照してください。

  • REST構成デプロイメント・ディスクリプタ - このファイルは、Jerseyリソース構成クラスおよびカスタム・アグリゲータおよびカスタム・エントリ・プロセッサを構成するために使用されます。ディスクリプタのデフォルト名はcoherence-rest-config.xmlで、スキーマはcoherence-rest-config.xsdファイルで定義されます。ファイルはクラスパス上に存在する必要があり、その名前はcoherence.rest.configシステム・プロパティを使用してオーバーライドできます。「RESTの構成要素」を参照してください。

データ・フォーマットのサポートの理解

Coherence RESTは、入力および出力としてXMLおよびJSONフォーマットをサポートします。これらのフォーマットを使用するには、ユーザー・タイプを作成するときに正しいバインディングが必要になります。この項では、この両方のフォーマットについて説明します。

この項には次のトピックが含まれます:

データ・フォーマットとしてのXMLの使用

XMLで参照されるオブジェクトは、キャッシュに保存されるために適切なJAXBバインディングを定義する必要があります。次の例では、JAXBバインディングを追加する注釈を使用するオブジェクトを作成します。

@XmlRootElement(name="Address")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Address implements Serializable{
    private String street;
    private String city;
    private String country;

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

@XmlRootElement(name="Person")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Person implements Serializable {
    private Long id;
    private String name;
    private Address address;
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement(name = "address")
    public Address getAddr() {
        return address;
    }

    public void setAddr(Address addr) {
        this.addr = addr;
    }
}

データ・フォーマットとしてのJSONの使用

JSONで参照されるオブジェクトは、キャッシュに保存されるために適切なJacksonバインディングまたはJAXBバインディングを定義する必要があります。デフォルトのCoherence REST JSONマーシャリング処理ではJacksonバインディングが優先されます。Jacksonバインディングが検出されない場合、JAXBバインディングがかわりに使用されます。Jackson注釈を使用することで、出力JSONフォーマットの制御性が向上します。ただし、XMLおよびJSONフォーマットの両方が必要な場合、JAXB注釈は両方のフォーマットに対して十分に使用できます。

次の例では、注釈を使用するオブジェクトを作成して、Jacksonバインディングを追加しています。

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include= JsonTypeInfo.As.PROPERTY,
   property="@type")
public class Address implements Serializable {
   private String street;
   private String city;
   private String country;

   public String getStreet() {
       return street;
   }

   public void setStreet(String street) {
       this.street = street;
   }

   public String getCity() {
      return city;
   }

   public void setCity(String city) {
      this.city = city;
   }

   public String getCountry() {
      return country;
   }

   public void setCountry(String country) {
      this.country = country;
   }
}

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include= JsonTypeInfo.As.PROPERTY,
   property="@type")
public class Person implements Serializable {
   private Long id;
   private String name;
   private Address address;

   public Long getId() {
      return id;
   }

   public void setId(Long id) {
      this.id = id;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   @JsonProperty("address")
   public Address getAddr() {
      return address;
   }

   public void setAddr(Address addr) {
      this.addr = addr;
   }
}

Coherence RESTクライアントの認証と認可

Coherence RESTは、クラスタリソースへのアクセスを制限する認証と認可の両方を提供します。認証サポートは、HTTP基本認証およびSSL認証の両方に対応します。認可はCoherence*Extend方式の認可を使用して実装されます。この認証は、名前付けクラスと起動サービスの操作への詳細なアクセスを提供するインターセプタ・クラスに依存しています。『Oracle Coherenceの保護』「Oracle Coherence RESTの保護」を参照してください。