Wir haben mehrere JMP-Add-Ins, die von über 100 Benutzern verwendet werden. Die Add-Ins benötigen JMP, einen Oracle ODBC-Client und benutzerdefinierte Menüs. Anfangs installierten wir die Add-Ins auf den PCs der einzelnen Benutzer. Dies erforderte die Installation von JMP und Oracle sowie die Konfiguration der ODBC-Treiber und der Add-In-Menüs auf jedem einzelnen PC. Die Wartung war extrem aufwendig, da fast wöchentlich die Festplatte eines Benutzers ausfiel oder sein PC neu aufgesetzt werden musste.
Um diesen Aufwand zu reduzieren, haben wir uns entschieden, Citrix-Server für JMP und die Add-Ins zu nutzen. Wir sind gerade dabei, von Citrix auf das Microsoft Remote Desktop Protocol (RDP) umzustellen. Zu den Vorteilen gehören:
Dieser Vortrag bietet detaillierte Informationen zur Servereinrichtung, Sicherheit, Konfiguration von Oracle, Konfiguration von JMP-Add-Ins, Code-Wartung und wie Benutzer Dateien von Citrix oder RDP speichern.
Mein Name ist Peter Mroz. Ich arbeite für Johnson & Johnson. Heute halte ich einen Vortrag über den Server JMP und wie er mir das Leben gerettet hat. Teilen Sie meinen Bildschirm.
Mein Name ist Peter Mroz. Ich arbeite für Johnson & Johnson Innovative Medicine. Heute möchte ich darüber sprechen, wie ich Server JMP mit Add-Ins verwendet habe, um „Save My World“ zu retten. Vorab: Diese Präsentation spiegelt meine persönliche Meinung wider. Sie stellt keine offizielle Empfehlung für Produkte von Johnson & Johnson dar.
Wer sind wir? Wir sind Johnson & Johnson Innovative Medicine. Unser Ziel ist es, innovative Medikamente und Lösungen zu erforschen und zu entwickeln, die das Leben von Menschen verändern und die wichtigsten ungedeckten medizinischen Bedürfnisse unserer Zeit erfüllen. Meine Abteilung heißt Globale Medizinische Sicherheit. Wir haben die Aufgabe, Patienten durch höchste Standards in der medizinischen Sicherheit und sorgfältige Nutzen-Risiko-Bewertungen zu schützen.
Meine Gruppe heißt „Methoden und Analyse“. Unser Ziel ist die Entwicklung und Implementierung von Analysetools, um die Effizienz und die analytischen Fähigkeiten zur Erkennung und Bewertung von Sicherheitssignalen zu verbessern. Kurz gesagt: Wir erfassen, verarbeiten, berichten und analysieren Sicherheitsdaten für die meisten Medikamente von Johnson & Johnson. Der Rest meines Teams befindet sich hier rechts. Mich sehen Sie hier. Das sind meine vier Enkelkinder, darunter eine ganz kleine Enkelin hier unten.
Was steht heute auf dem Programm? Ich werde über das Problem und die Lösung sprechen und anschließend auf die Serverumgebung, die Sicherheit, die Konfiguration von Oracle und JMP-Add-Ins sowie Tipps zur Code-Wartung eingehen. Außerdem erkläre ich, wie Benutzer Dateien von Citrix oder RDS speichern. Unser Problem war, dass wir mehrere JMP-Add-Ins haben, die von über 100 Benutzern verwendet werden. Diese benötigen JMP, eine Verbindung zu Oracle und benutzerdefinierte Menüs. Anfangs haben wir sie als Add-Ins auf einzelnen PCs installiert. Jeder PC benötigte also JMP, Oracle, die Konfiguration der ODBC-Treiber und die jeweiligen Menüs. Das funktionierte zwar, war aber ein Albtraum für die Wartung, da fast wöchentlich Festplattenausfälle, Neuinstallationen von PCs oder neue, unbenutzte Rechner auftraten. Es war einfach sehr viel Arbeit.
Wir sind auf Citrix-Server für JMP und die Add-Ins umgestiegen. Aktuell migrieren wir von Citrix zu Microsoft Remote Desktop Services (RDS), aber im Prinzip ist es dasselbe. Ein Vorteil ist, dass die Einrichtung nur einmal nötig ist. Die Performance für unsere internationalen Nutzer ist hervorragend, da lediglich Bildschirmfotos übertragen werden. Daten werden nur dann gesendet, wenn etwas gespeichert wird.
Es gibt zusätzliche Sicherheitsebenen. Änderungen werden nur einmal pro Server und nicht pro Benutzer bereitgestellt. Wir wechseln zu RDS, weil es günstiger als Citrix ist, eine Windows-Komponente darstellt, das sogenannte Remote Desktop Protocol nutzt und dafür eine Microsoft-Computerzugriffslizenz benötigt wird.
Das ist unsere Umgebung. Wir haben eine Oracle-Datenbank und aktuell drei Citrix-Server, die demnächst auf RDS umgestellt werden und auf denen JMP läuft. Unsere Benutzer verbinden sich über einen Weblink mit den Servern, woraufhin JMP ausgeführt und die Ausgabe an ihre Bildschirme gesendet wird.
Citrix ist ein amerikanisches multinationales Unternehmen für Cloud-Computing und Virtualisierungstechnologien, das Serveranwendungen bis hin zu Desktop-Virtualisierung, Netzwerktechnik, Software-as-a-Service und Cloud-Computing-Technologien anbietet. Microsoft Remote Desktop Services (RDS) ermöglicht die Anwendungsvirtualisierung. Sie können Laufwerke und Drucker einbinden. RDS ist ein von Microsoft entwickeltes proprietäres Protokoll und bietet Benutzern eine grafische Oberfläche für die Verbindung zu einem anderen Computer über ein Netzwerk. Der Benutzer verwendet die in RDS integrierte Client-Software, und auf dem Host-Computer muss die RDS-Dienstsoftware aktiviert sein.
Wir haben mehrere Server. Lastverteilung ist im Spiel. Ein paar Worte zur RDS-Konfiguration – und das ist so ziemlich das Technischste, was ich zu RDS sagen möchte. Es gibt ein Verbindungsportal, das den Server für die Lastverteilung auswählt. Für RDS gibt es ein Web-Frontend auf einem separaten Server. Es ist eine Komponente, die auf RDS aufbaut. Es zeigt eine Liste der verfügbaren Anwendungen an. Hier sind ein paar Beispiele für Anwendungen, die Benutzern zur Verfügung stehen. Die Webseite nutzt Microsoft IIS. Das ist so ziemlich das Technischste, was ich dazu sagen möchte. Wenn Sie RDS oder Citrix für Ihr Unternehmen einrichten möchten, wenden Sie sich bitte an Ihre IT-Abteilung.
Aus Sicherheitsgründen verwenden wir ein Identitätsmanagementsystem. Nach einer Anfrage werden Sie einer Gruppe für Entwicklung, Qualitätssicherung oder Produktion zugewiesen. JMP kann nur ausgeführt werden, wenn Sie Zugriff auf die entsprechende Gruppe haben. Zusätzlich gibt es Oracle-Tabellen, die die Add-Ins, Benutzer und Rollen auflisten. Außerdem existieren Konnektoren für verschiedene Sicherheitsstufen für jeden Benutzer innerhalb jedes Add-Ins. Für die Wartung verwenden wir ein Administratorkonto, um uns remote am Server anzumelden. Kommen wir nun zur Oracle-Konfiguration.
Auf dem Server müssen Sie einen Oracle-Client installieren und zwei Umgebungsvariablen festlegen: Oracle Home (das Verzeichnis Ihres Oracle-Clients) und TNS_ADMIN (das Verzeichnis Ihrer Dateien TNSNAMES.ORA und SQLNET.ORA). TNSNAMES.ORA enthält alle Aliase für Ihre Datenbanken und teilt Oracle mit, wo diese Datenbanken zu finden sind. Sie müssen den Namen des Oracle-Treibers für die ODBC-Verbindung ermitteln. Am einfachsten geht das, indem Sie die Windows-Taste drücken, ODBC auswählen und dann „ODBC-Datenquellen (64 Bit)“ anklicken. Klicken Sie anschließend auf die Registerkarte „Treiber“. Dort wird der Name des Oracle-Treibers angezeigt: „Oracle in OraClient19Home1“.
Wie verwende ich diesen Oracle-Treibernamen, um eine Verbindung herzustellen? Hier ist ein einfaches JSL-Skript. Ich habe ein Objekt namens `tns_alias`. Das ist meine Datenbank. So ist sie in der Datei `TNSNAMES.ORA` aufgeführt.
Dann folgt der Verbindungstext „DBQ“ (mein TNS-Alias). Hier sind mein Benutzername und mein Passwort. Anschließend folgt der Treibertext „driver“ und hier meine Oracle-Konfiguration in OraClient19Home1. Diese Informationen können schwer zu finden sein. Dies ist ein hilfreicher Tipp, wie man sie findet.
Anschließend kombinieren wir diese beiden Daten zu einer DSN-Zeichenkette, erstellen damit eine Datenbankverbindung und weisen sie der Variablen `1DBC` zu. Die fertige Verbindungszeichenkette sieht dann so aus. Um SQL-Anweisungen damit auszuführen, rufen Sie `execute_sql` mit einer Verbindungszeichenkette und einer einfachen SQL-Anweisung auf und schließen anschließend die Datenbankverbindung. Wie konfiguriert man JMP-Add-Ins? Sie installieren JMP auf dem Server und erstellen dann Add-In-Ordner in diesem Verzeichnis.
C:\ProgramData\SAS\JMP\addIns. Die Groß-/Kleinschreibung ist wichtig. Also großes P, großes D, alles in Großbuchstaben, großes I. Wir brauchten mehrere Rückfragen beim JMP-Support, um herauszufinden, dass es sich hier um ein großes I handelt und die anderen um ein großes P und ein großes D. Nachdem wir das geklärt hatten, funktionierte es einwandfrei.
Wir verwenden die Add-In-ID als Ordnernamen. Hier sehen Sie ein Beispiel mit fünf Add-Ins, die sich auf diesem Remote-Server befinden. Jeder Ordner enthält eine Datei: addin.def. Hier ist ein Beispiel für eine solche Datei.
Die ID identifiziert den Alias für das Add-In „com.jnj.gms.pv-analyze-prism“. Es gibt einen Namen, ein Verzeichnis und eine minimale Jump-Version. Was bedeutet dieses Verzeichnis? Im Verzeichnis befindet sich der Kern des Add-Ins. Dort sind alle JSL-Skripte für das Add-In gespeichert.
Hier ist der Ordner, und hier befinden sich meine JSL-Skripte. Die Datei addin.jmpcust enthält das Menü für das Add-In. Alle unsere Add-Ins verwenden benutzerdefinierte Menüs. Aber sprechen wir über Menüs. Wir haben es so eingerichtet, dass niemand ohne entsprechende Sicherheitsberechtigungen auf die Menüoptionen zugreifen kann.
Jeder Menüpunkt deklariert eine globale Variable, die auf ein Programm verweist, darunter auch ein Startprogramm zur Sicherheitsprüfung. Um dies anzuzeigen, klicken Sie auf „Ansicht“, dann auf „Menüs und Symbolleisten anpassen“ und anschließend oben rechts auf „Ändern“. Wählen Sie „JMP-Add-In“ und anschließend das gewünschte Add-In aus. Klicken Sie dann auf „OK“. Nun ist das Menü für dieses Add-In hervorgehoben. Sie können die Einstellungen anpassen. Hier ist ein typischer Menüpunkt: Eine globale Variable verweist auf das auszuführende Programm „datatable.jsl“.
Dieses Add-In-Verzeichnis enthält die ID, sodass Sie JMP diese nicht mitteilen müssen. Sie müssen den tatsächlichen Speicherort auf der Festplatte nicht angeben. JMP sucht einfach hier und dekodiert die Daten aus Ihrer addin.dev-Datei. Die zweite Zeile weist darauf hin, das Skript launch_pva_menu.jsl einzubinden. Dieses Skript ist im Menü „Aktionen“ enthalten. Führen Sie einfach diese JSL-Datei aus. Aktivieren Sie außerdem die Option „Verwenden Sie das Add-In-Verzeichnis com.jnj.gms.pv-analyze-prism“. Hier ist das Startprogramm. Wir binden einige Funktionen und ein Datenbankzugriffsskript ein. Anschließend rufe ich einen gültigen PPA-Benutzer auf.
Es sucht den Benutzer in den Oracle-Sicherheitstabellen. Falls die Daten dort nicht korrekt vorhanden sind, wird eine Fehlermeldung ausgegeben und die Anwendung abgemeldet. Es gibt einige Abhängigkeiten von der JMP-Version. Ich glaube, das wurde geschrieben, bevor die Mindestversion von JMP in der Datei addin.dev festgelegt war, oder vielleicht wusste ich das einfach nicht.
Sobald wir das geschafft haben, prüfen wir, ob der Programmname etwas enthält. Wenn er die Erweiterung „JMP“ (Anwendungsgenerator) enthält, öffnen wir das Programm. Andernfalls handelt es sich um ein JSL-Skript, das wir einbinden. Für die Code-Wartung nutzen wir drei Umgebungen: Entwicklung, Qualitätssicherung und Produktion. Wir verwenden jeweils einen Server für die Entwicklung, die Qualitätssicherung und drei für die Produktion.
Nach erfolgreicher Validierung werden die aktualisierten Dateien auf die entsprechenden Server kopiert. Ich verwende ein Programm namens Total Commander, um diese Ordner zu synchronisieren, worauf wir gleich noch eingehen werden. Citrix und RDS funktionieren etwas anders. Der Zugriff auf Dateien auf Ihrem... Wir verwenden zumindest OneDrive. Das ist anders.
Wenn Sie auf dem Desktop oder im Dokumentenordner des Servers speichern und JMP verwenden, wird die Datei auf dem Server selbst gespeichert, was nicht zulässig ist. Um dies zu vermeiden, klicken wir auf „Dateieinstellungen“ und wählen „Dateispeicherorte“. Anschließend geben wir sowohl für das Datenverzeichnis als auch für das Verzeichnis zum Speichern in diesem Fall unseren OneDrive-Speicherort an. Die Vorgehensweise unterscheidet sich geringfügig zwischen Citrix und RDS. Bei Citrix ist es Client\C$, hier ist es tsclient\C.
Der Rest sind Benutzername, OneDrive und JNJ. Das ist unser benutzerdefinierter OneDrive-Speicherort. Ab sofort werden alle Dateien, die Sie öffnen oder speichern, standardmäßig in Ihrem OneDrive-Konto gespeichert und nicht mehr auf dem Server.
Machen wir eine kurze Demo. Gehen Sie hierher. Das ist mein Anmeldebildschirm für RDS. Ich melde mich jetzt an. Es wird eine RDP-Datei generiert und anschließend ausgeführt. Wenn Sie hier mit der rechten Maustaste klicken, aktivieren Sie die Option „Dateien dieses Typs immer öffnen“. Dadurch wird die Verbindung hergestellt. Hier läuft Server JMP auf unserer Entwicklungsinstanz, und ich kann etwas öffnen … Meine Daten, und jetzt starten wir die Verteilung.
Dann speichern wir es. Es wird auf meinem OneDrive gespeichert. Ich lege es in einen Ordner namens „temp“. Okay. Jetzt habe ich es auf meiner Festplatte gespeichert. Es scheint noch zu speichern. Ich habe JMP lokal auf meinem Computer laufen, mal sehen, was passiert, wenn ich es hierher ziehe. Da ist es. Ich habe es auf einem Server generiert, und es gibt nur eine Möglichkeit zu beweisen, dass es tatsächlich funktioniert.
Okay. Als Nächstes wollte ich Ihnen den Server selbst zeigen. Hier bin ich am eigentlichen RDS-Server angemeldet. JMP 16 und JMP 18 sind installiert, und dies ist mein Tool namens Total Commander.
Ich wollte Ihnen nur ein Beispiel zeigen, wenn Dateien auf den Server kopiert werden müssen. Diese befinden sich auf einer Dateifreigabe. Das Laufwerk
ist der Speicherort des Add-Ins für diese Anwendung. Ich werde die Verzeichnisse mit dieser Schaltfläche synchronisieren, sie vergleichen und nach Datum sortieren. Es sieht so aus, als ob hier einige Dateien aktualisiert werden können.
Ich möchte aber nur eine Sache machen. Eine meiner Lieblingsfunktionen ist, dass ich hier mit der rechten Maustaste klicken und „Links und Rechts vergleichen“ auswählen kann. Das war eine einfache Änderung. Ein Kommentar war an der falschen Stelle, und ich habe ihn hier an die richtige Stelle verschoben. Zum Synchronisieren klicke ich auf „Synchronisieren“. Alles kopieren. Fertig. Das war alles, was ich für Server-JMP demonstrieren wollte. Kommen wir zurück zu unserer Präsentation. Zusammenfassend lässt sich sagen, dass die Ausführung von JMP auf einem Server ideal für Add-Ins ist. Man muss alles nur einmal einrichten.
Die Performance für unsere internationalen Nutzer ist hervorragend. Es gibt zusätzliche Sicherheitsebenen, und Änderungen werden nur einmal pro Server und nicht pro Nutzer bereitgestellt. Kurz gesagt: Server JMP plus Add-Ins haben uns gerettet. Das war's. Vielen Dank.