31 デフォルトのREST実装の変更
この章の内容は次のとおりです。
- パススルー・リソースの使用
Coherence RESTには、キャッシュへのパススルー・アクセスを有効にするリソース実装が含まれています。 - カスタム・プロバイダおよびリソースの使用
必要に応じて、カスタム・プロバイダおよびリソースを作成できます。 - 埋込みHTTPサーバーの変更
Coherence RESTでは、リクエストの処理にデフォルトでOracleの軽量HTTPサーバーを使用します。ただし、この実装は本番環境には適切でなく、一般的には開発またはテスト時に使用されます。
親トピック: Coherence RESTの使用
パススルー・リソースの使用
PassThroughRootResource
クラスで実装され、PassThroughResourceConfig
クラスを使用して登録されます。
アプリケーションでパススルー・リソースを使用するには、キャッシュ構成ファイルでプロキシ・サービス定義を変更し、<resource-config>
要素内にPassThroughResourceConfig
クラスの完全修飾名を追加します。コンテキストが定義されない場合、リソースは特定のコンテキスト・パスまたはデフォルト・パス(/
)にマップされます。次に、リソースを登録して、/cache
をコンテキスト・パスとして使用する例を示します。coherence-rest-config.xml
構成ファイルで定義されるすべてのキャッシュ・リソースの前には、URLで/cache/
を付ける必要があります。
<proxy-scheme>
<service-name>HttpProxyService</service-name>
<acceptor-config>
<http-acceptor>
...
<resource-config>
<context-path>/cache</context-path>
<instance>
<class-name>com.tangosol.coherence.rest.server.PassThroughResourceConfig</class-name>
</instance>
</resource-config>
</http-acceptor>
</acceptor-config>
<autostart>true</autostart>
</proxy-scheme>
同様に、ContainerPassThroughResourceConfig
クラスはPassThroughResourceConfig
クラスの拡張で、パススルーが必要な場合にCoherence RESTのコンテナのデプロイメントに使用されます。そのリソースは、Coherence RESTアプリケーションに含まれるWebアプリケーション・デプロイメント・ディスクリプタで構成されます。
<web-app> ... <listener> <listener-class> com.tangosol.coherence.rest.servlet.DefaultServletContextListener </listener-class> </listener> <servlet> <servlet-name>Coherence REST</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer </servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value> com.tangosol.coherence.rest.server.ContainerPassThroughResourceConfig </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Coherence REST</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> ... </web-app>
親トピック: デフォルトのREST実装の変更
カスタム・プロバイダおよびリソースの使用
com.tangosol.coherence.rest.server.DefaultResourceConfig
クラスでは、カスタム・プロバイダまたはリソースの登録に使用できるパッケージ・スキャンをサポートします。次の例では、パッケージ・スキャンを使用して、カスタム・プロバイダおよびリソースを登録しています。
public class MyResourceConfig extends DefaultResourceConfig { public MyResourceConfig() { super("com.my.providers;com.my.resources"); } }
また次の例では、DefaultResourceConfig
クラスに定義されている1つ以上のregister
メソッドをオーバーライドして、カスタム・プロバイダ、カスタム・ルート・リソースを使用したり、フィルタおよびフィルタ・ファクトリを追加する方法を示します。
ノート:
Coherenceのデフォルト・プロバイダをオーバーライドする場合は必ずルート・リソース・クラスもオーバーライド(登録解除)してください(DefaultRootResource
クラスは、デフォルト・プロバイダに依存して、必要な依存性および構成を提供します)。
public class MyResourceConfig extends DefaultResourceConfig { protected void registerRootResource() { // remove if you don't want Coherence defaults to be registered super.registerRootResource(); getClasses().add(MyRootResource.class); } protected void registerProviders() { // remove if you don't want Coherence defaults to be registered super.registerProviders(); getSingletons().add(new MyProvider()); } protected void registerContainerRequestFilters() { // remove if you don't want Coherencedefaults to be registered super.registerContainerRequestFilters(); getContainerRequestFilters().add(new MyRequestFilter()); } protected void registerContainerResponseFilters() { // remove if you don't want Coherence defaults to be registered super.registerContainerResponseFilters(); getContainerResponseFilters().add(new MyResponseFilter()); } protected void registerResourceFilterFactories() { // remove if you don't want Coherence defaults to be registered super.registerResourceFilterFactories(); getResourceFilterFactories().add(new MyResourceFilterFactory()); } }
キャッシュ構成ファイルでカスタム・リソース構成クラスを有効にするには、HTTPアクセプタ構成内の<resource-config>
要素を使用して、クラスの完全修飾名を追加します。コンテキスト・パスが定義されない場合、クラスは特定のコンテキスト・パスまたはデフォルトのコンテキスト・パス(/
)にマップされます。複数のリソース構成クラス定義を別のコンテキスト・パスに追加、マップできます。次に、MyResourceConfig
という名前のカスタム・リソースを登録して、/MyApplication
コンテキスト・パスにマップする例を示します。
<proxy-scheme> <service-name>ExtendHttpProxyService</service-name> <acceptor-config> <http-acceptor> ... <resource-config> <context-path>/MyApplication</context-path> <instance> <class-name>package.MyResourceConfig</class-name> </instance> </resource-config> </http-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme>
親トピック: デフォルトのREST実装の変更
埋込みHTTPサーバーの変更
ノート:
本番環境では、Coherence RESTによりNetty HTTPサーバー対してのみ実装が推奨されます。Simple HTTPサーバー、Jetty HTTPサーバー、およびGrizzly HTTPサーバーのサポートは非推奨です。本番環境では、CoherenceにNetty HTTPサーバー、Simple HTTPサーバー、Jetty HTTPサーバーおよびGrizzly HTTPサーバーが実装されます。
これらのサーバーはJerseyでサポートされます。追加のHTTPサーバーの統合する方法については、このドキュメントでは述べません。Jerseyのドキュメントを参照してください。この項には次のトピックが含まれます:
Netty HTTPサーバーの使用
Coherence RESTは、Netty HTTPサーバー実装(com.tangosol.coherence.http.netty.NettyHttpServer
)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Netty HTTPサーバーの詳細は、次を参照してください。
キャッシュ構成ファイルでNettyサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>
要素の値として実装の完全修飾名を追加します。たとえば:
<proxy-scheme>
<service-name>ExtendHttpProxyService</service-name>
<acceptor-config>
<http-acceptor>
<class-name>com.tangosol.coherence.http.netty.NettyHttpServer</class-name>
...
</http-acceptor>
</acceptor-config>
<autostart>true</autostart>
</proxy-scheme>
親トピック: 埋込みHTTPサーバーの変更
Simple HTTPサーバーの使用
Coherence RESTは、Simple HTTPサーバー実装(com.tangosol.coherence.http.simple.SimpleHttpServer
)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Simpleフレームワークの詳細は、次を参照してください。
https://sourceforge.net/projects/simpleweb/
キャッシュ構成ファイルでSimple HTTPサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>
要素の値として実装の完全修飾名を追加します。たとえば:
<proxy-scheme> <service-name>ExtendHttpProxyService</service-name> <acceptor-config> <http-acceptor> <class-name>com.tangosol.coherence.http.simple.SimpleHttpServer</class-name> ... </http-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme>
親トピック: 埋込みHTTPサーバーの変更
Jetty HTTPサーバーの使用
Coherence RESTは、Jetty HTTPサーバー実装(com.tangosol.coherence.http.jetty.JettyHttpServer
)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Jetty HTTPサーバーの詳細は、次を参照してください。
キャッシュ構成ファイルでJettyサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>
要素の値として実装の完全修飾名を追加します。たとえば:
<proxy-scheme> <service-name>ExtendHttpProxyService</service-name> <acceptor-config> <http-acceptor> <class-name>com.tangosol.coherence.http.jetty.JettyHttpServer</class-name> ... </http-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme>
親トピック: 埋込みHTTPサーバーの変更
Grizzly HTTPサーバーの使用
Coherence RESTは、Grizzly 2 HTTPサーバー実装(com.tangosol.coherence.http.grizzly.GrizzlyHttpServer
)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Grizzly HTTPサーバーの詳細は、次を参照してください。
キャッシュ構成ファイルでGrizzlyサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>
要素の値として実装の完全修飾名を追加します。たとえば:
<proxy-scheme> <service-name>ExtendHttpProxyService</service-name> <acceptor-config> <http-acceptor> <class-name>ccom.tangosol.coherence.http.grizzly.GrizzlyHttpServer</class-name> ... </http-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme>
親トピック: 埋込みHTTPサーバーの変更