この章では、Coherence RESTのサポートの概要について説明します。ユーザーは、Coherence RESTを使用するために、WebサービスおよびJAX-RSに精通する必要があります。
この章には次の項が含まれます:
Coherence RESTは、HTTPプロトコルを介したCoherenceキャッシュおよびキャッシュ・エントリへの容易なアクセスを提供します。これは、Coherence*Extendに似ています。リモート・クライアントは、クラスタ自体のメンバーになることなく、Coherenceに保存されたデータにアクセスできます。ただし、独自のプロトコルのCoherence*Extendと異なり、Coherence RESTでは、基本プロトコルとしてHTTPを使用して、JSONやXMLなどの複数の表現形式でデータをマーシャリングできます。Coherence RESTの利点は、RubyやPythonなど(Coherenceでネイティブにサポートされていない)別の言語で記述されたアプリケーションがキャッシュ・データと相互作用できるということです。
Coherence RESTは、次の表示23-1に示されているライブラリに依存します。JerseyおよびJackson JARSは、ORACLE_HOME
/oracle_common/modules
ディレクトリに含まれます。Grizzly JARSは、Grizzlyプロジェクト・ページからダウンロードできます。
表23-1 Coherence RESTの依存性
名前 | 説明 | ライセンス・タイプ | JARファイル |
---|---|---|---|
Jersey 1.17.1 |
JAX-RSのリファレンス実装(JSR 311: RESTful Webサービス用Java API) |
|
|
Grizzly 2.2.1 |
Jerseyと最適に統合される埋込みWebサーバー(Glassfishの一部)。 |
|
|
Jackson 1.9.2 |
JSONシリアライザ |
Apache 2.0 |
|
Coherence RESTは、2つの構成ファイルを使用して構成されます。該当するファイルは次のとおりです。
キャッシュ構成デプロイメント・ディスクリプタ: このファイルは、クライアント側のキャッシュ・サービスおよびHTTPアクセプタを定義するために使用します。HTTPアクセプタはHTTPを介してリモートRESTからの接続を受け入れます。アクセプタには、クライアントが接続するクラスタ側のHTTPサーバーのアドレスおよびポートが含まれます。このファイルのスキーマは、coherence-cache-config.xsd
ファイルです。<http-acceptor
要素の詳細なリファレンスは、『Oracle Coherenceでのアプリケーションの開発』を参照してください。
実行時には、クラスパスで最初に検出されたキャッシュ構成ファイルが使用されます。tangosol.coherence.cacheconfig
システム・プロパティを使用して、キャッシュ構成ファイルを明示的に指定することもできます。このファイルは、プログラムによっても設定できます。キャッシュ構成デプロイメント・ディスクリプタの一般的な情報は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。
REST構成デプロイメント・ディスクリプタ - このファイルは、Jerseyリソース構成クラスおよびカスタム・アグリゲータおよびカスタム・エントリ・プロセッサを構成するために使用されます。ディスクリプタのデフォルト名はcoherence-rest-config.xml
で、スキーマはcoherence-rest-config.xsd
ファイルで定義されます。ファイルはクラスパス上に存在する必要があります。その名前はtangosol.coherence.rest.config
システム・プロパティを使用して上書きできます。REST構成デプロイメント・ディスクリプタの詳細なリファレンスは、付録A「RESTの構成要素」を参照してください。
Coherence RESTは、入力および出力としてXMLおよびJSONフォーマットをサポートします。これらのフォーマットを使用するには、ユーザー・タイプを作成するときに正しいバインディングが必要になります。この項では、この両方のフォーマットについて説明します。
この項には、次のトピックが含まれます:
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; } }
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; } }
Coherence RESTは、クラスタリソースへのアクセスを制限する認証と認可の両方を提供します。認証サポートは、HTTP基本認証およびSSL認証の両方に対応します。認可はCoherence*Extend方式の認可を使用して実装されます。この認証は、名前付けクラスと起動サービスの操作への詳細なアクセスを提供するインターセプタ・クラスに依存しています。Coherence RESTのセキュリティの詳細手順は、『Oracle Coherenceの保護』を参照してください。