ネットワーク・フィルタは、TCP/IPソケットを介して送信されるデータの変換を、プラッガブルな階層化された方法で実行できるようにするメカニズムです。Coherence for .NETでは、カスタム・フィルタをサポートして、ユーザーがネットワーク・トラフィックの内容を変更できるようにしています。また一般に、データの圧縮および暗号化にもCoherence for .NETが使用されます。
新しいフィルタを作成するには、Tangosol.IO.IWrapperStreamFactory
インタフェース、およびオプションでTangosol.Util.IXmlConfigurable
インタフェースを実装する.NETクラスを作成します。IWrapperStreamFactory
インタフェースは、次の2つのメソッドを定義します。
例23-1 IWrapperStreamFactoryインタフェースのメソッド
Stream GetInputStream(Stream stream); Stream GetOutputStream(Stream stream);
この2つのメソッドは、ラップ(フィルタリング)対象のI/Oストリーム(入力では受信メッセージ、出力では送信メッセージ)を提供し、元のストリームをラップするストリームの返送を求めます。このメソッドは、個々の受信メッセージと送信メッセージに対してコールされます。
フィルタは2つの手順で構成します。最初の手順では、キャッシュ・ファクトリ構成ファイルの<filters
> XML要素でフィルタを宣言します。これを例23-2に示します。
例23-2 フィルタの構成
<coherence> <cluster-config> <filters> <filter> <filter-name>gzip</filter-name> <filter-class>Tangosol.Net.CompressionFilter, Coherence</filter-class> </filter> </filters> </cluster-config> ... </coherence>
注意: GZip圧縮フィルタは、.NETフレームワークのバージョン2.0以上でサポートされています。 |
2番目の手順では、1つ以上の特定のサービスにフィルタをアタッチします。特定のサービス(ExtendTcpCacheService
サービスなど)に対してフィルタを指定するには、キャッシュ構成ファイルのサービス宣言で、<use-filters>
要素に<filter-name>
要素を追加します。
例23-3 サービスへのフィルタのアタッチ
<remote-cache-scheme> <scheme-name>extend-direct</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> ... </tcp-initiator> <outgoing-message-handler> ... </outgoing-message-handler> <use-filters> <filter-name>gzip</filter-name> </use-filters> ... </remote-cache-scheme>
フィルタがIXmlConfigurable
を実装する場合は、フィルタがインスタンス化された後に、CoherenceでConfig
プロパティが次のXML要素に設定されます。