Contamos con varios complementos de JMP que utilizan más de 100 usuarios. Estos complementos requieren JMP, un cliente ODBC de Oracle y menús personalizados. Inicialmente, implementamos los complementos en las PC de cada usuario, lo que requería instalar JMP y Oracle, además de configurar los controladores ODBC y los menús de los complementos en cada PC. Era una pesadilla de mantenimiento, ya que cada semana alguien fallaba el disco duro o se reinstalaba la imagen de su PC.
Para reducir esta carga, optamos por usar servidores Citrix para ejecutar JMP y los complementos. Estamos en proceso de migrar de Citrix al Protocolo de Escritorio Remoto (RDP) de Microsoft. Las ventajas incluyen:
Esta charla proporciona detalles sobre la configuración del servidor, la seguridad, la configuración de Oracle, la configuración de complementos JMP, el mantenimiento del código y cómo los usuarios guardan archivos de Citrix o RDP.
Me llamo Peter Mroz. Trabajo en Johnson & Johnson. Hoy daré una charla sobre el servidor JMP y cómo me salvó el mundo. Comparte mi pantalla.
De nuevo, me llamo Peter Mroz. Trabajo en Johnson & Johnson Innovative Medicine. Hoy les contaré cómo usé el servidor JMP con complementos para salvar mi mundo. Aviso legal: esta presentación representa mi punto de vista. No implica ningún respaldo formal de ningún producto de Johnson & Johnson.
¿Quiénes somos? Somos Johnson & Johnson Innovative Medicine. Nuestro objetivo es descubrir y desarrollar medicamentos y soluciones innovadores que transformen la vida de las personas y resuelvan las necesidades médicas más importantes de nuestro tiempo. Mi departamento se llama Seguridad Médica Global. Nos encargamos de proteger a los pacientes impulsando una sólida excelencia en seguridad médica y evaluaciones de riesgos y beneficios.
Mi grupo se llama Métodos y Análisis, y nuestro objetivo es desarrollar e implementar herramientas analíticas para aumentar la eficiencia y la capacidad analítica para detectar y evaluar señales de seguridad. En resumen, recopilamos, procesamos, informamos y analizamos datos de seguridad de la mayoría de los medicamentos de Johnson & Johnson. El resto de mi equipo está aquí a la derecha. Me pueden ver aquí. Estos son mis cuatro nietos, incluyendo a mi recién nacida nieta.
¿Qué tenemos en la agenda de hoy? Hablaré del problema, de la solución y luego detallaré el entorno del servidor, la seguridad, cómo configurar Oracle, cómo configurar los complementos JMP, algunos consejos para el mantenimiento del código y cómo los usuarios guardan archivos de Citrix o RDS. El problema al que nos enfrentábamos era que teníamos varios complementos JMP utilizados por más de 100 usuarios, que requerían JMP, una conexión a Oracle y menús personalizados. Inicialmente, los implementamos como complementos en PC individuales. Cada PC requería JMP, Oracle, la configuración de los controladores ODBC y los propios menús añadidos. Esto funcionó, pero era una pesadilla de mantenimiento porque cada semana, a alguien le fallaba el disco duro, se reinstalaba su PC o recibían una nueva computadora sin nada. Era muchísimo trabajo.
Pasamos a usar servidores Citrix para ejecutar JMP y los complementos. Estamos en pleno proceso de transición de Citrix a los Servicios de Escritorio Remoto de Microsoft (RDS), pero son básicamente lo mismo. Las ventajas incluyen que solo hay que configurarlo una vez. El rendimiento para nuestros usuarios en el extranjero es excelente, ya que solo se envían pantallas de un lado a otro. No se envían datos a menos que se guarde algo.
Hay niveles adicionales de seguridad. Al realizar cambios, estos se implementan una vez por servidor, no por usuario. La razón por la que cambiamos a RDS es porque es más económico que Citrix, es un componente de Windows y utiliza el protocolo de escritorio remoto (RPP), y para ello se necesita una licencia de acceso a equipos de Microsoft.
Este es nuestro entorno. Tenemos una base de datos Oracle y, actualmente, tres servidores Citrix, pero pronto se convertirán para ejecutar RDS y JMP. Nuestros usuarios están aquí y se conectan mediante un enlace web a los servidores, que ejecutan JMP y envían la salida a sus pantallas.
Citrix es una empresa multinacional estadounidense de tecnología de virtualización y computación en la nube que ofrece aplicaciones de servidor para virtualización de escritorios, redes, software como servicio (SaaS) y tecnologías de computación en la nube. A su vez, los Servicios de Escritorio Remoto de Microsoft (RDS) ofrecen virtualización de aplicaciones. Permite asignar unidades e impresoras. Se trata de un protocolo propietario desarrollado por Microsoft que proporciona a los usuarios una interfaz gráfica para conectarse a otro ordenador a través de una conexión de red. El usuario utiliza el software cliente RDS integrado, y el ordenador host debe habilitar el software del servicio RDS.
Tenemos varios servidores. Hay balanceo de carga involucrado. Les contaré un poco sobre la configuración de RDS, y esto es lo más técnico que voy a llegar a este punto. Hay un portal de conexión que selecciona el servidor para el balanceo de carga. Hay una interfaz web para RDS en un servidor independiente. Es un componente sobre RDS. Muestra una lista de aplicaciones. Aquí hay un par de aplicaciones disponibles para los usuarios, que usan Microsoft IIS para una página web. Así que esto es lo más técnico que voy a llegar a este punto. Si desea configurar RDS o Citrix para su empresa, deberá hablar con su departamento de TI.
Para la seguridad, utilizamos un sistema llamado Sistema de Gestión de Identidad. Al realizar una solicitud, se le asigna a grupos de desarrollo, control de calidad o producción. Solo puede ejecutar JMP si tiene acceso a este grupo específico de desarrollo, control de calidad o producción. Además, contamos con tablas de Oracle que enumeran los complementos, los usuarios y los roles, y conectores para diferentes niveles de seguridad para cada usuario en cada complemento. También utilizamos una cuenta de administrador para el mantenimiento y el inicio de sesión remoto en un servidor. Hablemos de la configuración de Oracle.
En el servidor, necesita instalar un cliente Oracle y dos variables de entorno: Oracle Home, que es la ubicación de su cliente Oracle, y TNS_ADMIN, donde se encuentran los archivos TNSNAMES.ORA y SQLNET.ORA. TNSNAMES.ORA contiene todos los alias de sus bases de datos e indica a Oracle dónde buscarlas. Debe determinar el nombre del controlador Oracle para la conexión ODBC. Para ello, la forma más sencilla es presionar la tecla Windows, ODBC, seleccionar Orígenes de datos ODBC de 64 bits y hacer clic en la pestaña del controlador. Esto mostrará el nombre del controlador Oracle: Oracle en OraClient19Home1.
¿Cómo se usa este nombre de controlador de Oracle para establecer una conexión? Aquí hay un script JSL sencillo. Tengo algo llamado tns_alias. Es mi base de datos. Así es como aparece en TNSNAMES.ORA.
Luego, un texto de conector: DBQ es mi alias de TNS. Aquí están mi nombre de usuario y contraseña. Luego, el texto del controlador es "driver" y aquí está mi Oracle en OraClient19Home1. Puede ser difícil de encontrar. Es un buen consejo para encontrarlo.
Luego, combinamos ambos en una cadena DSN, creamos una conexión a la base de datos y la asignamos a la variable 1 DBC. La cadena del conector se ve así una vez finalizada. Para ejecutar SQL con esto, se llama a execute_sql con un conector y una instrucción SQL simple como esta, y se cierra la conexión a la base de datos. ¿Cómo se configuran los complementos de JMP? Se instala jump en el servidor y luego se crean carpetas de complementos en este directorio.
C:\ProgramData\SAS\JMP\addIns. Las mayúsculas y minúsculas son importantes. Por ejemplo, P mayúscula, D mayúscula, mayúsculas, I mayúscula. Fueron necesarias varias iteraciones con el soporte técnico de JMP para determinar que esta es una I mayúscula y estas son P mayúscula, D mayúscula. Una vez que lo aclaramos, funciona correctamente.
Usamos el "id" del complemento como nombre de carpeta. Aquí puede ver un ejemplo de cinco complementos ubicados en este servidor remoto. Cada carpeta contiene un archivo: addin.def. Aquí tiene un ejemplo de un archivo addin.def.
El ID identifica el alias del complemento, com.jnj.gms.pv-analyze-prism. Hay un nombre, una página de inicio y una versión mínima de salto. ¿Qué significa "página de inicio"? "Página de inicio" es donde está el corazón. Página de inicio es donde se almacenan todos los scripts JSL del complemento.
Aquí está esta carpeta, y aquí están todos mis scripts JSL. El archivo addin.jmpcust almacena el menú del complemento. Todos nuestros complementos son menús personalizados. Pero hablemos de los menús. Según nuestra configuración, no queremos que nadie ejecute opciones de menú si no cuenta con la seguridad adecuada.
Cada elemento del menú declara una variable global que apunta a un programa, incluyendo un programa de inicio para comprobar la seguridad. Para ver esto, puede hacer clic en "Ver", "Personalizar menús y barras de herramientas" y, en la esquina superior derecha, hacer clic en "Cambiar", seleccionar "Complemento JMP", seleccionar el complemento deseado y hacer clic en "Aceptar". Ahora verá que el menú de este complemento se ilumina. Puede cambiar las opciones. Esta es una entrada de menú típica. Tengo una variable global que apunta al programa que se va a ejecutar: abra datatable.jsl.
Este complemento de datos tiene el ID dentro, lo que significa que no es necesario informar a JMP. No es necesario especificar la ubicación real del disco duro. Simplemente busca aquí y lo decodifica desde el archivo addin.dev. La segunda línea indica que se debe incluir el script launch_pva_menu.jsl. Esto es lo que se incluye en la sección de acciones del menú. Simplemente ejecute este jsl. También debe verificar que se use la carpeta de inicio del complemento: com.jnj.gms.pv-analyze-prism. Aquí está el programa de lanzamiento. Incluimos un par de funciones y un script de acceso a la base de datos. Luego, se llama a un usuario PPA válido.
Busca al usuario en las tablas de seguridad de Oracle. Si no está correctamente en las tablas, se muestra un mensaje de error y se elimina el programa. Hay algunas dependencias de la versión de JMP. Creo que esto se escribió antes de que tuviéramos la versión mínima de JMP en el archivo addin.dev, o quizás simplemente no lo sabía.
De todos modos, una vez que podamos pasar eso, revisaremos si hay algo en el nombre del programa. Si contiene una extensión de aplicación JMP (es decir, el constructor de aplicaciones), abrimos el programa. De lo contrario, es un script JSL y lo incluimos. Para el mantenimiento del código, tenemos tres entornos: desarrollo, control de calidad y producción, y un servidor para desarrollo, uno para control de calidad y tres para producción.
Tras una validación exitosa, los archivos actualizados se copian a los servidores correspondientes. Uso un programa llamado Total Commander para sincronizar estas carpetas, y lo veremos en un minuto. Citrix y RDS son un poco diferentes. Acceder a los archivos en... Al menos usamos algo llamado OneDrive. Es diferente.
Si guarda en el escritorio o en los documentos del servidor y JMP, se guardará en el propio servidor, lo cual no está permitido. Para facilitar esto, hacemos clic en las ubicaciones de los archivos de preferencias de archivo. Luego, tanto para el directorio de archivos de datos como para guardar como directorio, especificamos, en este caso, nuestra ubicación de OneDrive. La diferencia entre Citrix y RDS es ligeramente diferente. En Citrix, la ruta es Client\C$. En este caso, es tsclient\C.
Pero el resto son usuarios: tu nombre de usuario, OneDrive, JNJ. Esa es nuestra ubicación personalizada de OneDrive. A partir de entonces, cada vez que abras o guardes un archivo, se guardará automáticamente en tu OneDrive y no intentará guardarlo en el servidor.
Hagamos una demostración rápida. Vayan aquí. Esta es mi pantalla de inicio de sesión en RDS. Voy a iniciar sesión. Se generará un archivo RDP y luego se ejecutará. Si hacen clic derecho aquí, querrán que esté marcado. Abrir siempre archivos de este tipo. Simplemente me conecta aquí. Aquí está Server JMP ejecutándose en nuestra instancia de desarrollo, y puedo abrir algo... Mis datos, y ejecutemos la distribución.
Luego lo guardaremos. Se guardará en mi OneDrive. Lo pondré en una carpeta llamada "temp". Bien. Ya lo guardé en mi disco duro. Parece que sigue guardándose. Tengo JMP ejecutándose localmente en mi computadora, y veamos qué pasa si hago clic y arrastro esto aquí. Aquí está. Lo generé en un servidor y hay una manera de comprobar que funciona.
Bien. Otra cosa que quería mostrarles era el servidor. Aquí estoy conectado al servidor RDS. Tenemos instalados JMP 16 y JMP 18, y esta es mi utilidad, Total Commander.
Solo quería mostrarles un ejemplo de cuando tengo archivos esperando ser copiados al servidor. Esto está en un recurso compartido de archivos. Esta ubicación D es la ubicación del complemento para esta aplicación en particular. Voy a sincronizar directorios con este botón, compararé y ordenaré por fecha. Parece que tenemos un par de archivos que se pueden actualizar.
Solo quiero hacer una cosa. Una de mis funciones favoritas es que puedo hacer clic derecho aquí y comparar izquierda y derecha. Fue un cambio sencillo. Había un comentario en el lugar equivocado, y lo puse aquí, en el lugar correcto. Si quiero sincronizarlo, hago clic en sincronizar. Copiar. Listo. Eso es todo lo que quería mostrar para JMP de servidor. Volvamos a nuestra presentación. En conclusión, ejecutar JMP en un servidor es genial para los complementos. Solo necesitas configurarlo una vez.
El rendimiento para nuestros usuarios internacionales es excelente. Hay niveles de seguridad adicionales y los cambios se implementan una vez por servidor, no una vez por usuario. Básicamente, el servidor JMP con complementos ha salvado a todo el mundo. Eso es todo. Muchas gracias.