プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceリモート・クライアントの開発
12c (12.2.1.2.0)
E82724-01
目次へ移動
目次

前
次

24 Coherence RESTの概要

この章では、Coherence RESTのサポートの概要について説明します。ユーザーは、Coherence RESTを使用するために、WebサービスおよびJAX-RSに精通する必要があります。

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

24.1 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アプリケーションのエンドツーエンドの例が含まれます。Coherence RESTの例の実行の詳細は、『Oracle Coherenceのインストール』を参照してください。

24.2 Coherence RESTの依存性

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

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

<dependencies>
   <dependency>
      <groupId>com.oracle.coherence</groupId>
      <artifactId>coherence</artifactId>
      <version>12.2.1-0-0</version>
   </dependency>
   <dependency>
      <groupId>com.oracle.coherence</groupId>
      <artifactId>coherence-rest</artifactId>
      <version>12.2.1-0-0</version>
   </dependency>
   <dependency>
      <groupId>org.glassfish.grizzly</groupId>
      <artifactId>grizzly-http-server</artifactId>
      <version>2.3.19</version>
   </dependency>
</dependencies>

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

mvn dependency:list

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

24.3 Coherence RESTの構成の概要

Coherence RESTは、2つの構成ファイルを使用して構成されます。該当するファイルは次のとおりです。

注意:

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

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

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

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

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

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

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

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

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

@XmlRootElement(name="Address")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Address {
    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 {
    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 AddressXml getAddr() {
        return address;
    }

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

24.4.2 データ・フォーマットとしての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 {
   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 {
   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 AddressJson getAddr() {
      return address;
   }

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

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

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