ネットワーク・フィルタは、TCP/IPソケットを介して送信されるデータの変換を、プラッガブルな階層化された方法で実行できるようにするメカニズムです。Coherence for .NETでは、カスタム・フィルタをサポートして、ユーザーがネットワーク・トラフィックの内容を変更できるようにしています。また一般に、データの圧縮および暗号化にもCoherence for .NETが使用されます。
新しいフィルタを作成するには、Tangosol.IO.IWrapperStreamFactoryインタフェース、およびオプションでTangosol.Util.IXmlConfigurableインタフェースを実装する.NETクラスを作成します。IWrapperStreamFactoryインタフェースは、次の2つのメソッドを定義します。
例22-1 IWrapperStreamFactoryインタフェースのメソッド
Stream GetInputStream(Stream stream); Stream GetOutputStream(Stream stream);
この2つのメソッドは、ラップ(フィルタリング)対象のI/Oストリーム(入力では受信メッセージ、出力では送信メッセージ)を提供し、元のストリームをラップするストリームの返送を求めます。このメソッドは、個々の受信メッセージと送信メッセージに対してコールされます。
フィルタは2つの手順で構成します。最初の手順では、キャッシュ・ファクトリ・コンフィギュレーション・ファイルの<filters> XML要素でフィルタを宣言します。これを例22-2に示します。
例22-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>要素を追加します。
例22-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要素に設定されます。