Quand la magie opère ! Faire danser ensemble Java et Visual Basic 6.

Visual Basic est un langage de programmation orienté événements de troisième génération appartenant à Microsoft. Il est basé sur le Component Object Model (COM) et conçu pour les débutants. Le site La dernière version est la 6 (1998) et le noyau de FirmaDocnotre produit espagnol dédié à la gestion des documents et des dossiers pour l'administration publique est écrit en VB6. Cependant, Microsoft a annoncé en 2008 qu'elle cesserait de prendre en charge l'IDE Visual Basic 6.0.. L'équipe Visual Basic de Microsoft maintient toujours la compatibilité des applications Visual Basic 6.0 sur Windows grâce à son programme "It Just Works". Toutes les versions de l'environnement de développement Visual Basic, de 1.0 à 6.0, ont été retirées par Microsoft en 2008 et ne sont donc plus prises en charge. Les environnements d'exécution associés ne sont pas non plus pris en charge, à l'exception de l'environnement d'exécution principal Visual Basic 6, que Microsoft prend officiellement en charge pendant toute la durée de vie de Windows 8 et Windows 10.

Depuis 2008, Microsoft a cessé de supporter l'IDE Visual Basic 6.0.

Outre le fait que personne ne peut être sûr que la prochaine version de Windows continuera à supporter VB6 Core, ce langage est critiqué pour ses mauvaises performances en matière de gestion de la mémoire et pour la possibilité qu'il offre de pouvoir construire du code en utilisant des constructions peu académiques, pouvant donner de mauvaises habitudes de programmation et permettant d'écrire du code peu performant. Tour aggraver les choses, il y a de grandes chances que plus de 20 ans de développement de la solution représentent beaucoup de difficultés pour la maintenir stable et déployable. Il fallait faire quelque chose tout de suite.

Java Native Access (JNA) : L'entremetteur

Visual Basic offre la possibilité de créer certains composants COM comme ActiveX Exe ou ActiveX DLL. De nos jours, le modèle le plus courant d'une application distribuée est le modèle d'application client/serveur. Toutes les dépendances d'une application VB6 sont résolues à l'aide d'un "principal" qui définit un espace mémoire virtuel pouvant accueillir les objets liés nécessaires (comme un objet DLL).

Un objet COM permet au client de l'instancier dans son espace mémoire lorsqu'il interroge son interface.. En fait, au moment de la compilation, VB6 crée une interface pour chaque classe DLL et chaque interface hérite de IDispatch qui hérite lui-même de Inconnu; les deux sont des règles COM standard pour la mise en œuvre des objets COM, concernant le modèle de programmation COM de Microsoft. Le compilateur génère un fichier de bibliothèque de types (.tlb) qui décrit la structure d'un composant COM, notamment les importations, les champs et les fonctions.

Ce fichier est ensuite utilisé par un générateur de classes Java pour mettre en œuvre et utiliser l'objet COM dans une application Java à l'aide de l'outil suivant JNA comme un cadre d'interface natif. La bibliothèque JNA est utilisée pour invoquer dynamiquement du code natif. Elle utilise des fonctions natives permettant au code de charger une bibliothèque par son nom et de récupérer un pointeur vers une fonction de la bibliothèque. Pas besoin de liens statiques, de fichiers d'en-tête ou de phase de compilation. Le développeur utilise une interface Java pour décrire les fonctions et les structures liées à la bibliothèque native cible. JNA est une surcouche de JNI permettant d'éviter la configuration et la construction fastidieuses du code JNI.

JNA est construit et testé sur macOS, Microsoft Windows, FreeBSD / OpenBSD, Solaris, GNU avec Linux, AIX, Windows Mobile et Android. Il est également possible de modifier et de recompiler les configurations de construction natives pour le faire fonctionner sur la plupart des autres plateformes qui exécutent Java. Avec Java et Java Native Access, nous pouvons remplacer le "Main" d'un programme VB (Contexte) par une application Java qui utilise l'objet COM (Dll) comme code logique d'entreprise. Le modèle proposé est une architecture tierce permettant de séparer chaque composant de l'application :

Conclusion

Dans l'ensemble, nous avons démontré en pratique comment le code VB6 hérité peut être encapsulé dans une application Java, ce qui nous permet de continuer à utiliser le cœur de FirmaDoc. Malgré les prouesses techniques, l'architecture qui en résulte présente des avantages très intéressants, tels que la modernisation des interfaces utilisateurs et la possibilité d'utiliser des outils de gestion de la qualité. séparer clairement le code du client et celui du serveur. En outre, VB6 offre de pauvres possibilités de gérer multithreading à l'opposé, Java SpringBoot Rest est reconnu comme une meilleure solution. Le code logique n'a pas besoin d'être modifié, et Les Dll peuvent être utilisées avec de hautes performances (Code binaire et Runtime) pour permettre la meilleure expérience utilisateur et pour supprimer toutes les communications (service web, socket, tcp/ip) entre l'application VB et d'autres applications. Le code l'entretien est facilité par une meilleure organisation des composants de l'application.

Dans un contexte de migration, cette solution permet également permet un transfert/réécriture de code étape par étape (Classe par Classe) et le développement de nouvelles fonctionnalités peut se faire en Java pour l'API Rest et en utilisant un nouveau framework tel qu'Angular, Spring boot, Spring Cloud, Microservices, etc. une telle approche permettrait permettre l'arrêt de la dette technique.

Plus ...

Retour haut de page