必要に応じて、カスタム・プロバイダおよびリソースを作成できます。このセクションでは、カスタム・プロバイダを登録する方法、およびCoherenceのデフォルト・ルート・リソースをオーバーライドする方法について説明します。
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>要素を使用して、クラスの完全修飾名を追加します。クラスは特定のコンテキスト・パスにマップされます。次に例を示します。
<proxy-scheme>
<service-name>ExtendHttpProxyService</service-name>
<acceptor-config>
<http-acceptor>
...
<resource-config>
<context-path>/MyApplicationContext</context-path>
<instance>
<class-name>package.MyResourceConfig</class-name>
</instance>
</resource-config>
</http-acceptor>
</acceptor-config>
<autostart>true</autostart>
</proxy-scheme>
コンテキスト・パスが指定されない場合、デフォルト・コンテキスト・パス(/)が使用されます。複数のリソース構成クラス定義を別のコンテキスト・パスに追加、マップできます。
Coherence RESTでは、リクエストの処理にデフォルトでOracleの軽量HTTPサーバーを使用します。ただし、この実装は本番環境には適切でなく、一般的には開発またはテスト時に使用されます。本番環境では、CoherenceにGrizzly HTTPサーバー、Simple HTTPサーバーおよびJetty HTTPサーバーが実装されます。これらのサーバーはJerseyでサポートされます。追加のHTTPサーバーの統合する方法については、このドキュメントでは述べません。Jerseyのドキュメントを参照してください。
この項の内容は、次のとおりです。
Coherence RESTは、Grizzly 2 HTTPサーバー実装(com.tangosol.coherence.rest.server.GrizzlyHttpServer)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Grizzly HTTPサーバーの詳細は、次を参照してください。
キャッシュ構成ファイルでGrizzlyサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>要素の値として実装の完全修飾名を追加します。次に例を示します。
<proxy-scheme>
<service-name>ExtendHttpProxyService</service-name>
<acceptor-config>
<http-acceptor>
<class-name>com.tangosol.coherence.rest.server.GrizzlyHttpServer
</class-name>
...
</http-acceptor>
</acceptor-config>
<autostart>true</autostart>
</proxy-scheme>
Coherence RESTは、Simple HTTPサーバー実装(com.tangosol.coherence.rest.server.SimpleHttpServer)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Simpleフレームワークの詳細は、次を参照してください。
http://www.simpleframework.org/
キャッシュ構成ファイルでSimple HTTPサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>要素の値として実装の完全修飾名を追加します。次に例を示します。
<proxy-scheme>
<service-name>ExtendHttpProxyService</service-name>
<acceptor-config>
<http-acceptor>
<class-name>com.tangosol.coherence.rest.server.SimpleHttpServer
</class-name>
...
</http-acceptor>
</acceptor-config>
<autostart>true</autostart>
</proxy-scheme>
Coherence RESTは、Jetty HTTPサーバー実装(com.tangosol.coherence.rest.server.JettyHttpServer)を備えており、デフォルトのHTTPサーバーのかわりに使用できます。Jetty HTTPサーバーの詳細は、次を参照してください。
キャッシュ構成ファイルでJettyサーバーを有効にするには、HTTPアクセプタ構成内の<class-name>要素の値として実装の完全修飾名を追加します。次に例を示します。
<proxy-scheme>
<service-name>ExtendHttpProxyService</service-name>
<acceptor-config>
<http-acceptor>
<class-name>com.tangosol.coherence.rest.server.JettyHttpServer
</class-name>
...
</http-acceptor>
</acceptor-config>
<autostart>true</autostart>
</proxy-scheme>