Aujourd'hui, de nombreuses organisations utilisent les technologies .NET et Java pour développer différentes applications à fort trafic. Dans le même temps, ces applications ont non seulement besoin de partager des données entre elles, mais souhaitent également prendre en charge le partage d'exécution de différentes versions de la même classe pour une compatibilité descendante et une réduction des coûts.
Le moyen le plus couramment utilisé pour prendre en charge le partage d'exécution de différentes versions de classe entre les applications .NET et Java consiste à Sérialisation XML. Mais, comme vous le savez, la sérialisation XML est un processus extrêmement lent et gourmand en ressources. Cela implique la validation XML, l'analyse, les transformations, ce qui entrave vraiment les performances de votre application et utilise des ressources supplémentaires en termes de mémoire et de CPU.
L'autre approche largement utilisée pour prendre en charge le partage de différentes versions de classe entre .NET et Java est la base de données. Cependant, le problème avec cette approche est qu'elle est lente et qu'elle ne s'adapte pas très bien à la charge transactionnelle croissante. Par conséquent, votre base de données devient rapidement un goulot d'étranglement d'évolutivité car vous pouvez faire évoluer de manière linéaire votre niveau d'application en ajoutant plus de serveurs d'applications, mais vous ne pouvez pas faire la même chose au niveau de la base de données.
C'est là un cache distribué comme NCache est vraiment pratique. NCache vous fournit une transformation d'objet au niveau binaire entre différentes versions non seulement de la même technologie, mais également entre .NET et Java. Vous pouvez mapper différentes versions via un fichier de configuration XML, et NCache comprend comment passer d'une version à une autre.
NCache le cadre de partage de version de classe implémente un protocole personnalisé de sérialisation binaire interopérable qui génère un flux d'octets basé sur un mappage spécifié dans un format tel que toutes les nouvelles et anciennes versions de la même classe peuvent facilement le désérialiser, quel que soit son langage de développement, qui peut être .NET ou Java.
Voici un exemple de NCache config.ncconf avec mappage de version de classe :
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> |
Comment la NCache faire le contrôle de version de classe dans le partage de données d'exécution ?
Dans le ncache.config que vous voyez ci-dessus, vous remarquerez que la classe Employee a un ensemble d'attributs définis en premier. Ce sont des attributs indépendants de la version et ils apparaissent dans toutes les versions des classes .NET et Java. Il s'agit en fait d'un sur-ensemble de tous les attributs qui apparaissent dans différentes versions. En dessous, vous spécifiez des attributs spécifiques à la version et les mappez aux attributs indépendants de la version ci-dessus.
Supposons maintenant que vous ayez enregistré la version 1.0.0.0 de .NET Employee. Maintenant, lorsqu'une autre application essaie de récupérer le même employé, mais qu'elle veut le voir comme Java version 1.0 ou 2.0. NCache sait quels attributs de .NET version 1.0.0.0 remplir avec des données et lesquels laisser vides et vice versa.
Il existe de nombreux autres scénarios qui NCache gère parfaitement pour vous. Veuillez lire la documentation du produit en ligne pour how NCache le partage de données d'exécution fonctionne.
Enfin, la meilleure partie est que vous n'avez pas à écrire de code de sérialisation et de désérialisation ni à modifier le code de votre application pour pouvoir l'utiliser. NCache fonction. NCache a implémenté un mécanisme de génération de code d'exécution, qui génère le code de sérialisation et de désérialisation en mémoire de vos classes interopérables au moment de l'exécution, et utilise le formulaire compilé pour qu'il soit ultra-rapide.
En résumé, en utilisant NCache vous pouvez désormais partager différentes versions de classe entre vos applications .NET et Java sans même modifier le code de votre application.