ヘッダーをスキップ
Oracle® Coherenceクライアント・ガイド
リリース3.7.1
B65027-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

26 Coherence Restについて

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

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

26.1 Coherence RESTの概要

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

26.2 Coherence RESTの依存性

Coherence RESTは、次のOracleライブラリおよびサード・パーティ・ライブラリに依存します。JerseyおよびJackson JARSは、COHERENCE_HOME/libディレクトリに含まれます。Grizzly JARSは、Grizzlyプロジェクト・ページからダウンロードできます。

http://grizzly.java.net/

名前 説明 ライセンス・タイプ JARファイル
Jersey 1.8 JAX-RSのリファレンス実装(JSR 311: RESTful Webサービス用Java API)
  • CDDL v1.1
  • GPL v2

  • jersey-core-1.8.jar
  • jersey-json-1.8.jar

  • jersey-server-1.8.jar

  • jersey-grizzly2-1.8.jar: Jersey Projectページからダウンロードする必要があります。

    http://jersey.java.net/

Grizzly 2.1.1 Jerseyと最適に統合される埋込みWebサーバー(Glassfishの一部)。
  • CDDL v1.1
  • GPL v2

  • grizzly-framework-2.1.1.jar
  • grizzly-http-2.1.1.jar

  • grizzly-http-server-2.1.1.jar

Jackson 1.8.1 JSONシリアライザ Apache 2.0 jackson-all-1.8.1.jar

26.3 Coherence RESTの構成の概要

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

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

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

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

26.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 addr;
    }

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

26.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 addr;
   }

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