今日、多くの組織が.NETおよびJavaテクノロジーを使用して、さまざまなトラフィックの多いアプリケーションを開発しています。 同時に、これらのアプリケーションは、相互にデータを共有する必要があるだけでなく、下位互換性とコスト削減のために、同じクラスの異なるバージョンのランタイム共有をサポートする必要があります。
.NETとJavaアプリケーション間で異なるクラスバージョンのランタイム共有をサポートするために主に使用される最も一般的な方法は、 XMLシリアル化。 ただし、ご存知のように、XMLシリアル化は非常に遅く、リソースを大量に消費するプロセスです。 これには、XMLの検証、解析、変換が含まれます。これは、アプリケーションのパフォーマンスを実際に妨げ、メモリとCPUの観点から追加のリソースを使用します。
.NETとJavaの間で異なるクラスバージョンの共有をサポートするために広く使用されているもうXNUMXつのアプローチは、データベースを使用することです。 ただし、このアプローチの問題は、処理が遅く、トランザクションの負荷が増大しても拡張性が低いことです。 したがって、アプリケーションサーバーを追加することでアプリケーション層を線形に拡張できるため、データベースはすぐにスケーラビリティのボトルネックになりますが、データベース層で同じことを行うことはできません。
これはどこです 分散キャッシュ ような NCache 本当に便利です。 NCache 同じテクノロジーの異なるバージョン間だけでなく、.NETとJava間のバイナリレベルのオブジェクト変換を提供します。 XML構成ファイルを介してさまざまなバージョンをマップできます。 NCache あるバージョンから別のバージョンに変換する方法を理解しています。
NCache クラスバージョン共有フレームワークは、相互運用可能なバイナリシリアル化カスタムプロトコルを実装し、指定されたマッピングに基づいて、同じクラスの新旧バージョンが開発言語(.NET)に関係なく、簡単に逆シリアル化できる形式でバイトストリームを生成します。またはJava。
以下はその例です NCache クラスバージョンマッピングを使用したconfig.ncconf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<cache-config name="InteropCache" inproc="False" config-id="0" last-modified="" type="local-cache" auto-start="False"> ... <type id="1001" handle="Employee" portable="True"> <attribute-list> <attribute name="Name" type="Java.lang.String" order="1"/> <attribute name="SSN" type="Java.lang.String" order="2"/> <attribute name="Age" type="int" order="3"/> <attribute name="Address" type="Java.lang.String" order="4"/> <attribute name="Name" type="System.String" order="5"/> <attribute name="Age" type="System.Int32" order="6"/> <attribute name="Address" type="System.String" order="7"/> </attribute-list> <class name="com.samples.objectmodel.v1.Employee:1.0" handle-id="1" assembly="com.jar" type="Java"> <attribute name="Name" type="Java.lang.String" order="5"/> <attribute name="SSN" type="Java.lang.String" order="2"/> </class> <class name="com.samples.objectmodel.v2.Employee:2.0" handle-id="2" assembly="com.jar" type="Java"> <attribute name="Name" type="Java.lang.String" order="5"/> <attribute name="Age" type="int" order="6"/> <attribute name="Address" type="Java.lang.String" order="7"/> </class> <class name="Samples.ObjectModel.v2.Employee:2.0.0.0" handle-id="3" assembly="ObjectModelv2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="Name" type="System.String" order="5"/> <attribute name="Age" type="System.Int32" order="6"/> <attribute name="Address" type="System.String" order="7"/> </class> <class name="Samples.ObjectModel.v1.Employee:1.0.0.0" handle-id="4" assembly="ObjectModelv1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="Name" type="System.String" order="5"/> <attribute name="Age" type="System.Int32" order="6"/> </class> </type> </data-sharing> ... </cache-config> |
どのように NCache ランタイムデータ共有でクラスバージョン管理を行いますか?
ncache上記の.configファイルでは、Employeeクラスに最初に定義された属性のセットがあることがわかります。 これらはバージョンに依存しない属性であり、.NETおよびJavaクラスのすべてのバージョンに表示されます。 これは実際には、さまざまなバージョンで表示されるすべての属性のスーパーセットです。 その下で、バージョン固有の属性を指定し、それらを上記のバージョンに依存しない属性にマップします。
ここで、.NETEmployeeバージョン1.0.0.0を保存したとします。 これで、別のアプリケーションが同じEmployeeをフェッチしようとしたが、それをJavaバージョン1.0または2.0として表示したい場合。 NCache .NETバージョン1.0.0.0のどの属性をデータで埋め、どの属性を空白のままにするか、またはその逆を知っています。
他にも多くのシナリオがあります NCache シームレスに処理します。 のオンライン製品ドキュメントをお読みください の NCache ランタイムデータ共有は機能します.
最後に、最良の部分は、これを使用するために、シリアル化および逆シリアル化のコードを記述したり、アプリケーションにコードを変更したりする必要がないことです。 NCache 特徴。 NCache は、実行時に相互運用可能なクラスのメモリ内シリアル化および逆シリアル化コードを生成するランタイムコード生成メカニズムを実装し、コンパイルされた形式を使用するため、超高速です。
要約すると、 NCache アプリケーションコードを変更することなく、.NETアプリケーションとJavaアプリケーション間で異なるクラスバージョンを共有できるようになりました。