この章の内容は次のとおりです。
COHERENCE_HOME
の/lib/coherence-rest.jar
ライブラリにパッケージ化され、coherence.jar
ライブラリに依存します。親トピック: Coherence RESTの使用
Coherence RESTの例
Coherenceディストリビューションには、RESTアプリケーションのエンドツーエンドの例が含まれます。『Oracle Coherenceのインストール』の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の例を参照してください。
注意:
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の構成要素」を参照してください。
この項には次のトピックが含まれます:
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で参照されるオブジェクトは、キャッシュに保存されるために適切な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; } }