Hoy en día, muchas organizaciones utilizan tecnologías .NET y Java para desarrollar diferentes aplicaciones de alto tráfico. Al mismo tiempo, estas aplicaciones no solo tienen la necesidad de compartir datos entre sí, sino que también desean admitir el uso compartido en tiempo de ejecución de diferentes versiones de la misma clase para compatibilidad con versiones anteriores y reducción de costos.
La forma más común que se usa principalmente para admitir el uso compartido en tiempo de ejecución de diferentes versiones de clase entre la aplicación .NET y Java es a través de Serialización XML. Pero, como sabe, la serialización XML es un proceso extremadamente lento y que consume muchos recursos. Implica validación XML, análisis, transformaciones, lo que realmente obstaculiza el rendimiento de su aplicación y utiliza recursos adicionales en términos de memoria y CPU.
El otro enfoque ampliamente utilizado para admitir el uso compartido de diferentes versiones de clase entre .NET y Java es a través de la base de datos. Sin embargo, el problema con este enfoque es que es lento y tampoco escala muy bien con la creciente carga transaccional. Por lo tanto, su base de datos se convierte rápidamente en un cuello de botella de escalabilidad porque puede escalar linealmente su nivel de aplicación agregando más servidores de aplicaciones, pero no puede hacer lo mismo en el nivel de la base de datos.
Aquí es donde un caché distribuida como NCache viene muy bien. NCache le proporciona una transformación de objetos a nivel binario entre diferentes versiones no solo de la misma tecnología sino también entre .NET y Java. Puede mapear diferentes versiones a través de un archivo de configuración XML, y NCache entiende cómo transformar de una versión a otra.
NCache El marco de intercambio de versiones de clase implementa un protocolo personalizado de serialización binaria interoperable que genera un flujo de bytes basado en un mapeo especificado en un formato tal que cualquier versión nueva y antigua de la misma clase puede deserializarla fácilmente, independientemente de su lenguaje de desarrollo, que puede ser .NET o Java.
Aquí hay un ejemplo de NCache config.ncconf con asignación de versión de clase:
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> |
¿Cómo NCache Cómo hacer control de versiones de clase en el uso compartido de datos en tiempo de ejecución?
En ncache.config que ve arriba, notará que la clase Empleado tiene un conjunto de atributos definidos primero. Estos son atributos independientes de la versión y aparecen en todas las versiones de las clases .NET y Java. Este es en realidad un superconjunto de todos los atributos que aparecen en diferentes versiones. Debajo de eso, especifica los atributos específicos de la versión y los asigna a los atributos independientes de la versión anteriores.
Ahora, supongamos que guardó la versión 1.0.0.0 de .NET Employee. Ahora, cuando otra aplicación intente obtener el mismo empleado, pero quiere verlo como la versión de Java 1.0 o 2.0. NCache sabe qué atributos de .NET versión 1.0.0.0 rellenar con datos y cuáles dejar en blanco y viceversa.
Hay muchos otros escenarios que NCache maneja a la perfección para usted. Lea la documentación del producto en línea para cómo NCache el uso compartido de datos en tiempo de ejecución funciona.
Finalmente, la mejor parte es que no tiene que escribir ningún código de serialización y deserialización ni realizar ningún cambio en el código de su aplicación para usar este NCache . NCache ha implementado un mecanismo de generación de código en tiempo de ejecución, que genera el código de serialización y deserialización en memoria de sus clases interoperables en tiempo de ejecución, y utiliza el formulario compilado para que sea súper rápido.
En resumen, usando NCache ahora puede compartir diferentes versiones de clase entre sus aplicaciones .NET y Java sin siquiera modificar el código de su aplicación.