Heutzutage verwenden viele Unternehmen .NET- und Java-Technologien, um verschiedene Anwendungen mit hohem Datenverkehr zu entwickeln. Gleichzeitig müssen diese Anwendungen nicht nur Daten miteinander teilen, sondern möchten auch die Laufzeitfreigabe verschiedener Versionen derselben Klasse unterstützen, um Abwärtskompatibilität und Kostenreduzierung zu gewährleisten.
Die am häufigsten verwendete Methode zur Unterstützung der Laufzeitfreigabe verschiedener Klassenversionen zwischen .NET- und Java-Anwendungen ist durch XML-Serialisierung. Aber wie Sie wissen, ist die XML-Serialisierung ein äußerst langsamer und ressourcenintensiver Prozess. Dazu gehören XML-Validierung, Parsing und Transformationen, was die Leistung Ihrer Anwendung erheblich beeinträchtigt und zusätzliche Ressourcen in Bezug auf Speicher und CPU beansprucht.
Der andere weit verbreitete Ansatz zur Unterstützung der gemeinsamen Nutzung verschiedener Klassenversionen zwischen .NET und Java ist die Verwendung einer Datenbank. Das Problem bei diesem Ansatz besteht jedoch darin, dass er langsam ist und sich auch nicht sehr gut an die wachsende Transaktionslast anpassen lässt. Daher wird Ihre Datenbank schnell zu einem Skalierbarkeitsengpass, da Sie Ihre Anwendungsebene durch Hinzufügen weiterer Anwendungsserver linear skalieren können, auf der Datenbankebene jedoch nicht dasselbe tun können.
Dies ist, wo ein verteilter Cache Gefällt mir NCache kommt wirklich praktisch. NCache bietet Ihnen eine Objekttransformation auf Binärebene zwischen verschiedenen Versionen nicht nur derselben Technologie, sondern auch zwischen .NET und Java. Sie können verschiedene Versionen über eine XML-Konfigurationsdatei zuordnen NCache versteht, wie man von einer Version in eine andere übergeht.
NCache Das Klassenversionsfreigabe-Framework implementiert ein interoperables benutzerdefiniertes Protokoll für die binäre Serialisierung, das einen Bytestrom basierend auf einer angegebenen Zuordnung in einem solchen Format generiert, dass alle neuen und alten Versionen derselben Klasse diese problemlos deserialisieren können, unabhängig von ihrer Entwicklungssprache, bei der es sich um .NET handeln kann oder Java.
Hier ist ein Beispiel für NCache config.ncconf mit Klassenversionszuordnung:
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> |
Wie funktioniert NCache Führen Sie eine Klassenversionierung bei der gemeinsamen Nutzung von Laufzeitdaten durch?
Im ncache.config-Datei, die Sie oben sehen, werden Sie feststellen, dass für die Employee-Klasse zuerst eine Reihe von Attributen definiert ist. Dabei handelt es sich um versionenunabhängige Attribute, die in allen Versionen von .NET- und Java-Klassen vorkommen. Dabei handelt es sich eigentlich um eine Obermenge aller Attribute, die in verschiedenen Versionen vorkommen. Darunter legen Sie versionenspezifische Attribute fest und ordnen diese den versionenunabhängigen Attributen darüber zu.
Angenommen, Sie haben die .NET Employee-Version 1.0.0.0 gespeichert. Wenn nun eine andere Anwendung versucht, denselben Mitarbeiter abzurufen, ihn jedoch als Java-Version 1.0 oder 2.0 sehen möchte. NCache weiß, welche Attribute von .NET Version 1.0.0.0 mit Daten gefüllt und welche leer gelassen werden sollen und umgekehrt.
Es gibt viele andere Szenarien NCache erledigt alles reibungslos für Sie. Bitte lesen Sie die Online-Produktdokumentation für wie NCache Die gemeinsame Nutzung von Laufzeitdaten funktioniert.
Das Beste daran ist schließlich, dass Sie keinen Serialisierungs- und Deserialisierungscode schreiben oder Codeänderungen an Ihrer Anwendung vornehmen müssen, um dies zu verwenden NCache -Funktion NCache hat einen Laufzeitcode-Generierungsmechanismus implementiert, der den speicherinternen Serialisierungs- und Deserialisierungscode Ihrer interoperablen Klassen zur Laufzeit generiert und die kompilierte Form verwendet, sodass er superschnell ist.
Zusammenfassend verwenden NCache Sie können jetzt verschiedene Klassenversionen zwischen Ihren .NET- und Java-Anwendungen teilen, ohne Ihren Anwendungscode zu ändern.