¡Cuando la magia sucede! Haciendo que Java y Visual Basic 6 bailen juntos.

Compartir por correo electrónico

Visual Basic es un lenguaje de programación de tercera generación basado en eventos que pertenece a Microsoft. Se basa en el Modelo de Objetos de Componentes (COM) y diseñado para principiantes. La página web La última versión es la 6 (1998) y el núcleo de FirmaDoc, nuestro producto español dedicado a la gestión de documentos y expedientes para la administración pública está escrito en VB6. Sin embargo, Microsoft anunció en 2008 que dejaría de dar soporte al IDE de Visual Basic 6.0. El equipo de Microsoft Visual Basic sigue manteniendo la compatibilidad de las aplicaciones de Visual Basic 6.0 en Windows a través de su programa "It Just Works". Todas las versiones del entorno de desarrollo de Visual Basic desde la 1.0 hasta la 6.0 fueron retiradas por Microsoft en 2008 y, por tanto, ya no reciben soporte. Los entornos de ejecución asociados tampoco son compatibles, excepto el entorno de ejecución principal de Visual Basic 6, que Microsoft admite oficialmente durante la vida útil de Windows 8 y Windows 10.

Desde 2008, Microsoft dejó de dar soporte al IDE de Visual Basic 6.0.

Además de que nadie puede asegurar que la próxima versión de Windows siga soportando VB6 Core, este lenguaje es criticado por su pobre rendimiento en la gestión de la memoria y por la posibilidad que ofrece de poder construir código utilizando construcciones poco académicas, pudiendo dar malos hábitos de programación y permitiendo escribir código de bajo rendimiento. Tara empeorar las cosas, hay grandes posibilidades de que más de 20 años de desarrollo de la solución representen muchas dificultades para mantenerla estable y desplegable. Había que hacer algo ahora mismo.

Java Native Access (JNA): El casamentero

Visual Basic ofrece la posibilidad de crear algunos componentes COM como ActiveX Exe o ActiveX DLL. Hoy en día, el modelo más común de una aplicación distribuida es el modelo de aplicación cliente/servidor. Todas las dependencias de la aplicación VB6 se resuelven utilizando un "principal" que define un espacio de memoria virtual que puede albergar los objetos enlazados necesarios (como un objeto DLL).

Un objeto COM permite al cliente instanciarlo en su espacio de memoria al interrogar su interfaz. De hecho, en tiempo de compilación, VB6 crea una interfaz para cada clase DLL y cada interfaz hereda de IDispatch que se hereda de IUnknown; ambas son reglas COM estándar para la implementación de objetos COM, en relación con el modelo de programación COM de Microsoft. El compilador genera un archivo de biblioteca de tipos (.tlb) que describe la estructura de un componente COM, incluyendo importaciones, campos y funciones.

Este archivo es utilizado por un generador de clases Java para implementar y utilizar el objeto COM en la aplicación Java utilizando JNA como un marco de trabajo de interfaz nativo. La biblioteca JNA se utiliza para invocar dinámicamente el código nativo. Utiliza funciones nativas que permiten al código cargar una biblioteca por su nombre y recuperar un puntero a una función de la biblioteca. No se necesitan enlaces estáticos, archivos de cabecera ni fase de compilación. El desarrollador utiliza una interfaz Java para describir las funciones y estructuras relacionadas con la biblioteca nativa de destino. JNA es una superposición de JNI que permite evitar la tediosa configuración y construcción de código JNI.

JNA está construido y probado en macOS, Microsoft Windows, FreeBSD / OpenBSD, Solaris, GNU con Linux, AIX, Windows Mobile y Android. También es posible modificar y recompilar las configuraciones de construcción nativa para que funcione en la mayoría de las otras plataformas que ejecutan Java. Con Java y Java Native Access, podemos sustituir el "Main" de un programa VB (Contexto) por una Aplicación Java que utiliza el Objeto COM (Dll) como código de Lógica de Negocio. El Modelo propuesto es una Arquitectura de terceros que permite separar cada componente de la Aplicación:

Conclusión

En general, hemos demostrado en la práctica cómo se puede encapsular el código heredado de VB6 dentro de una aplicación basada en Java, lo que nos permite seguir ejecutando el núcleo de FirmaDoc. A pesar de la proeza técnica, la arquitectura resultante tiene algunos beneficios muy interesantes como permitir la modernización de las interfaces de los usuarios y separar claramente el código del cliente y del servidor. Además, VB6 ofrece escasas posibilidades de gestionar multihilo aplicaciones, al contrario Java SpringBoot Rest es conocido como una mejor solución. El código lógico no necesita ser modificado, y Los Dlls se pueden utilizar con un alto rendimiento (código binario y tiempo de ejecución) para permitir la mejor experiencia de usuario y eliminar todas las comunicaciones (servicio web, socket, tcp/ip) entre la aplicación VB y otras aplicaciones. El código el mantenimiento es más fácil por la mejor organización de los componentes de la aplicación.

En un contexto de migración, esta solución también permite una transferencia/reescritura de código paso a paso (Clase a Clase) y el desarrollo de nuevas funcionalidades puede realizarse en Java para la API Rest y utilizando un nuevo framework como Angular, Spring boot, Spring Cloud, Microservicios, etc. dicho enfoque permiten detener la deuda técnica.

Más ...

Ir arriba