Nous utilisons plusieurs modules complémentaires JMP, utilisés par plus de 100 utilisateurs. Ces modules nécessitent JMP, un client ODBC Oracle et des menus personnalisés. Initialement, nous les déployions sur les PC des utilisateurs, ce qui impliquait l'installation de JMP et d'Oracle, ainsi que la configuration des pilotes ODBC et des menus sur chaque machine. La maintenance était un véritable cauchemar : chaque semaine, un disque dur tombait en panne ou le PC d'un utilisateur était réinstallé.
Pour alléger cette charge, nous avons opté pour l'utilisation de serveurs Citrix pour exécuter JMP et ses modules complémentaires. Nous sommes en train de migrer de Citrix vers le protocole RDP (Remote Desktop Protocol) de Microsoft. Les avantages sont les suivants :
Cette présentation détaille la configuration du serveur, la sécurité, la configuration d'Oracle, la configuration des modules complémentaires JMP, la maintenance du code et la manière dont les utilisateurs enregistrent des fichiers depuis Citrix ou RDP.
Je m'appelle Peter Mroz et je travaille chez Johnson & Johnson. Aujourd'hui, je vais vous parler du serveur JMP et de son rôle essentiel dans ma carrière. Partagez mon écran.
Je m'appelle Peter Mroz et je travaille chez Johnson & Johnson Innovative Medicine. Aujourd'hui, je vais vous expliquer comment j'ai utilisé le serveur JMP avec des modules complémentaires pour sauver des vies. Avertissement : cette présentation reflète mon opinion personnelle et n'implique aucune approbation formelle des produits de Johnson & Johnson.
Qui sommes-nous ? Nous sommes Johnson & Johnson Innovative Medicine. Notre mission est de découvrir et de développer des médicaments et des solutions innovants qui transforment la vie des patients et répondent aux besoins médicaux les plus importants et non satisfaits de notre époque. Mon département s'appelle Sécurité médicale mondiale. Nous avons pour mission de protéger les patients en garantissant une sécurité médicale rigoureuse et en réalisant des évaluations complètes des bénéfices et des risques.
Mon groupe s'appelle Méthodes et Analyses, et notre objectif est de développer et de mettre en œuvre des outils analytiques pour améliorer l'efficacité et les capacités d'analyse afin de détecter et d'évaluer les signaux de sécurité. En résumé, nous collectons, traitons, rapportons et analysons les données de sécurité de la plupart des médicaments de Johnson & Johnson. Le reste de mon équipe se trouve ici, à droite. Vous pouvez me voir ici. Voici mes quatre petits-enfants, dont une petite-fille née récemment.
Au programme aujourd'hui ? Je vais aborder le problème, la solution, puis détailler l'environnement serveur, la sécurité, la configuration d'Oracle et des modules complémentaires JMP, ainsi que des conseils de maintenance du code. Enfin, nous verrons comment les utilisateurs enregistrent des fichiers depuis Citrix ou RDS. Notre problème : plusieurs modules complémentaires JMP sont utilisés par plus de 100 utilisateurs. Ils nécessitent JMP, une connexion à Oracle et des menus personnalisés. Initialement, nous les avions déployés comme modules complémentaires sur des PC individuels. Chaque PC nécessitait donc JMP, Oracle, la configuration des pilotes ODBC et les menus ajoutés. Cette solution fonctionnait, mais la maintenance était un véritable cauchemar : chaque semaine, un disque dur tombait en panne, un PC était réinstallé ou un nouvel ordinateur vierge était fourni. C'était une charge de travail considérable.
Nous sommes passés à l'utilisation de serveurs Citrix pour exécuter JMP et ses modules complémentaires. Nous sommes en pleine migration de Citrix vers les services Bureau à distance Microsoft (RDS), mais le principe reste le même. L'avantage principal est qu'une seule configuration est nécessaire. Les performances sont excellentes pour nos utilisateurs à l'étranger, car il s'agit simplement d'échanger des écrans. Aucune donnée n'est transférée, sauf lors de l'enregistrement.
Il existe des niveaux de sécurité supplémentaires. Les modifications apportées sont déployées une seule fois par serveur, et non une fois par utilisateur. Nous optons pour RDS car il est moins cher que Citrix, il est intégré à Windows, il utilise le protocole RDP (Remote Desktop Protocol) et nécessite une licence d'accès aux ordinateurs Microsoft.
Voici notre environnement. Nous disposons d'une base de données Oracle et de trois serveurs Citrix, qui seront prochainement migrés vers RDS. Ces serveurs exécutent JMP. Nos utilisateurs se connectent aux serveurs via une interface web ; JMP s'exécute ensuite et affiche les résultats sur leurs écrans.
Citrix est une multinationale américaine spécialisée dans les technologies de cloud computing et de virtualisation. Elle propose des solutions de virtualisation d'applications serveur et de postes de travail, des services réseau, des logiciels en tant que service (SaaS) et des technologies de cloud computing. Les services Bureau à distance (RDS) de Microsoft permettent la virtualisation d'applications. Il est possible de mapper des lecteurs et des imprimantes. Ce protocole propriétaire, développé par Microsoft, offre aux utilisateurs une interface graphique pour se connecter à un autre ordinateur via le réseau. L'utilisateur utilise le logiciel client RDS intégré, et l'ordinateur hôte doit activer le service RDS.
Nous disposons de plusieurs serveurs. Un système d'équilibrage de charge est en place. Voici quelques informations sur la configuration RDS ; je ne donnerai pas plus de détails techniques à ce sujet. Un portail de connexion sélectionne le serveur à utiliser pour l'équilibrage de charge. Une interface web, hébergée sur un serveur distinct, permet d'accéder à RDS. Il s'agit d'un composant supplémentaire qui affiche une liste d'applications. Voici quelques exemples d'applications disponibles pour les utilisateurs, et l'interface utilise Microsoft IIS. Voilà pour les détails techniques. Si vous souhaitez configurer RDS ou Citrix pour votre entreprise, vous devrez contacter votre service informatique.
Pour des raisons de sécurité, nous utilisons un système de gestion des identités. Vous devez en faire la demande et vous êtes affecté à un groupe : développement, assurance qualité ou production. L'exécution de JMP est réservée aux membres de ce groupe. De plus, nous utilisons des tables Oracle répertoriant les modules complémentaires, les utilisateurs et leurs rôles. Des connecteurs permettent de gérer différents niveaux de sécurité pour chaque utilisateur et chaque module complémentaire. Enfin, un compte administrateur est utilisé pour la maintenance et la connexion à distance au serveur. Abordons maintenant la configuration Oracle.
Sur le serveur, vous devez installer un client Oracle et définir deux variables d'environnement : Oracle_Home, qui correspond à l'emplacement de votre client Oracle, et TNS_ADMIN, qui contient les fichiers TNSNAMES.ORA et SQLNET.ORA. Le fichier TNSNAMES.ORA contient tous les alias de vos bases de données et indique à Oracle où les trouver. Vous devez identifier le nom du pilote Oracle pour la connexion ODBC. Pour ce faire, la méthode la plus simple consiste à appuyer sur la touche Windows, puis à sélectionner ODBC, et enfin à choisir « Sources de données ODBC 64 bits ». Cliquez ensuite sur l'onglet « Pilote », et le nom du pilote Oracle, « Oracle », s'affichera dans OraClient19Home1.
Comment utiliser ce nom de pilote Oracle pour établir une connexion ? Voici un script JSL simple. J'ai une variable appelée `tns_alias`. Il s'agit de ma base de données. C'est ainsi qu'elle est répertoriée dans le fichier `TNSNAMES.ORA`.
Ensuite, le texte du connecteur : DBQ est mon alias TNS. Voici mon nom d'utilisateur et mon mot de passe. Puis, le texte du pilote : « driver », et enfin, voici mon Oracle dans OraClient19Home1. Cela peut être difficile à trouver. Voici une bonne astuce pour y parvenir.
Ensuite, nous combinons ces deux éléments en une chaîne DSN et créons une connexion à la base de données à l'aide de cette chaîne, que nous assignons à la variable 1 DBC. La chaîne de connexion ressemble à ceci une fois la configuration terminée. Pour exécuter du SQL, il suffit d'appeler la fonction `execute_sql` avec le connecteur et une requête SQL simple, puis de fermer la connexion à la base de données. Comment configurer les modules complémentaires JMP ? Installez JMP sur le serveur, puis créez des dossiers de modules complémentaires dans ce répertoire.
C:\ProgramData\SAS\JMP\addIns. La casse est importante. Donc P majuscule, D majuscule, I majuscule. Il a fallu plusieurs échanges avec le support technique de JMP pour comprendre que ceci est un I majuscule, et ceci sont des P majuscules et des D majuscules. Une fois ce point éclairci, tout fonctionne correctement.
Nous utilisons l'identifiant du complément comme nom de dossier. Voici un exemple de cinq compléments installés sur ce serveur distant. Chaque dossier contient un seul fichier : addin.def. Voici donc un exemple de fichier addin.def.
L'identifiant correspond à l'alias du module complémentaire, com.jnj.gms.pv-analyze-prism. Il y a un nom, un répertoire d'installation et une version minimale requise. À quoi sert ce répertoire d'installation ? C'est là que se trouvent tous les scripts JSL du module complémentaire.
Voici ce dossier, et voici tous mes scripts JSL. Le fichier addin.jmpcust contient le menu de l'extension. Toutes nos extensions utilisent des menus personnalisés. Parlons-en, des menus. Notre système est configuré de manière à ce que l'accès aux options de menu soit limité aux utilisateurs disposant des autorisations nécessaires.
Chaque élément de menu définit une variable globale pointant vers un programme, y compris un programme de lancement pour vérifier la sécurité. Pour le visualiser, cliquez sur Affichage, Personnaliser les menus et barres d'outils, puis, en haut à droite, cliquez sur Modifier, sélectionnez Complément JMP, puis le complément souhaité et cliquez sur OK. Le menu de ce complément s'affiche alors. Vous pouvez le modifier. Voici un exemple d'entrée de menu : une variable globale pointe vers le programme à exécuter, par exemple « Ouvrir datatable.jsl ».
Ce dossier d'installation du module complémentaire contient l'ID ; vous n'avez donc pas besoin de le spécifier à JMP. Il n'est pas nécessaire de préciser l'emplacement exact sur le disque dur. JMP le trouve ici et le décode à partir de votre fichier addin.dev. La deuxième ligne indique d'inclure le script launch_pva_menu.jsl. C'est ce script qui est intégré dans la partie « Actions » du menu. Il suffit d'exécuter ce fichier JSL. Vous devez également vérifier que le dossier d'installation du module complémentaire utilisé est bien com.jnj.gms.pv-analyze-prism. Voici le programme de lancement. Nous incluons quelques fonctions, dont un script d'accès à la base de données. Ensuite, j'appelle un utilisateur PPA valide.
Le programme recherche l'utilisateur dans les tables de sécurité Oracle. Si l'utilisateur n'est pas correctement enregistré, un message d'erreur s'affiche et l'utilisateur est déconnecté. Il existe des dépendances de version de JMP. Je pense que ce programme a été écrit avant l'intégration de la version minimale de JMP requise dans le fichier addin.dev, ou peut-être que je n'en avais tout simplement pas connaissance.
Bref, une fois cette étape franchie, nous vérifions si le nom du programme contient une extension JMP (Application Builder), et nous l'ouvrons. Sinon, s'il s'agit d'un script JSL, nous l'incluons. Pour la maintenance du code, nous avons trois environnements : développement, assurance qualité et production, chacun disposant de son propre serveur : un pour le développement, un pour l'assurance qualité et trois pour la production.
Après validation, les fichiers mis à jour sont copiés sur les serveurs concernés. J'utilise Total Commander pour synchroniser ces dossiers, et nous verrons cela dans un instant. Citrix et RDS fonctionnent un peu différemment. Accéder aux fichiers sur votre… Nous utilisons au moins OneDrive. C'est différent.
Si vous enregistrez sur le bureau ou dans les documents du serveur et de JMP, le fichier sera enregistré sur le serveur lui-même, ce qui n'est pas autorisé. Pour éviter cela, cliquez sur « Préférences de fichiers » puis sélectionnez « Emplacements des fichiers ». Ensuite, pour le répertoire des fichiers de données et le répertoire d'enregistrement, spécifiez, dans ce cas, l'emplacement OneDrive. La procédure est légèrement différente entre Citrix et RDS. Citrix utilise Client\C$, tandis que pour RDS, il s'agit de tsclient\C.
Le reste concerne les utilisateurs : votre nom d'utilisateur, OneDrive et JNJ. Il s'agit de votre emplacement OneDrive personnalisé. Désormais, chaque fois que vous ouvrirez ou enregistrerez un fichier, il sera automatiquement enregistré sur votre OneDrive et non sur le serveur.
Faisons une petite démonstration. Rendez-vous ici. Voici mon écran de connexion RDS. Je vais me connecter. Un fichier RDP va être généré puis exécuté. Si vous faites un clic droit ici, cochez l'option « Toujours ouvrir les fichiers de ce type ». La connexion est établie. Voici le serveur JMP qui s'exécute sur notre instance de développement. Je peux ouvrir un fichier… Mes données, et lançons la distribution.
Ensuite, on l'enregistre. Il sera enregistré sur mon OneDrive. Je vais le mettre dans un dossier appelé « temp ». Voilà. Je l'ai enregistré sur mon disque dur. L'enregistrement est toujours en cours, apparemment. J'ai JMP qui tourne en local sur mon ordinateur, et voyons ce qui se passe si je clique et fais glisser ce fichier ici. Le voilà. Je l'ai généré sur un serveur et il n'y a qu'un moyen de prouver qu'il fonctionne.
D'accord. L'autre chose que je voulais vous montrer, c'est le serveur lui-même. Me voici connecté au serveur RDS. JMP 16 et JMP 18 sont installés, et voici l'utilitaire que j'utilise : Total Commander.
Je voulais simplement vous montrer un exemple de fichiers en attente de copie sur le serveur. Il s'agit d'un partage de fichiers. Le lecteur D contient l'extension de cette application. Je vais synchroniser les répertoires avec ce bouton, puis comparer et trier par date. Il semble que plusieurs fichiers puissent être mis à jour.
Je ne veux en faire qu'une seule. Une de mes fonctionnalités préférées est la possibilité de faire un clic droit ici et de choisir « Comparer gauche et droite ». C'était une modification simple : un commentaire était mal placé, je l'ai donc déplacé au bon endroit. Pour synchroniser, il suffit de cliquer sur « Synchroniser ». Copie des éléments. Voilà. C'est tout ce que je voulais vous montrer pour JMP serveur. Reprenons notre présentation. En conclusion, l'utilisation de JMP sur un serveur est idéale pour les modules complémentaires. La configuration n'est nécessaire qu'une seule fois.
Les performances pour nos utilisateurs à l'étranger sont excellentes. La sécurité est renforcée et les modifications ne sont déployées que par serveur, et non par utilisateur. En résumé, le serveur JMP et ses modules complémentaires ont sauvé le monde. Voilà. Merci beaucoup.