我們有多個 JMP 插件,供 100 多名用戶使用。這些插件需要 JMP、Oracle ODBC 用戶端和自訂選單。最初,我們把插件部署到每個使用者的電腦上,這需要在每台電腦上安裝 JMP 和 Oracle,並設定 ODBC 驅動程式和插件選單。維護起來簡直是惡夢,因為幾乎每週都有人硬碟故障或電腦需要重裝系統。
為了減輕負擔,我們選擇使用 Citrix 伺服器來執行 JMP 及其外掛程式。目前,我們正在從 Citrix 切換到 Microsoft 遠端桌面協定 (RDP)。這樣做的好處包括:
我叫彼得‧莫羅茲,來自強生公司。今天,我將為大家講解JMP伺服器以及它如何改變了我的工作方式。請分享我的螢幕。
大家好,我叫彼得‧莫羅茲,來自強生創新醫學部門。今天,我將和大家分享我是如何使用伺服器版 JMP 及其插件來拯救我的世界的。需要說明的是,本次演講僅代表我個人觀點,並不代表強生公司對任何產品的正式認可。
我們是誰?我們是強生創新醫學部。我們的使命是發現和開發創新藥物和解決方案,以改善人們的生活,並解決當今最重要的未被滿足的醫療需求。我的部門是全球醫療安全部。我們的任務是透過推動卓越的醫療安全和效益風險評估來保護患者。
我的團隊叫做方法與分析小組,我們的目標是開發和實施分析工具,以提高檢測和評估安全訊號的效率和分析能力。簡而言之,我們負責收集、處理、報告和分析強生公司大部分藥物的安全資料。我的團隊其他成員都在右邊。您可以看到我。這是我的四個孫輩,包括下面這位剛出生不久的孫女。
我們今天的議程是什麼?我將先談談問題,再談談解決方案,然後詳細介紹伺服器環境、安全性、Oracle 配置、JMP 插件配置以及一些程式碼維護技巧,最後講解使用者如何從 Citrix 或 RDS 儲存檔案。我們遇到的問題是,我們有多個 JMP 插件,供 100 多個用戶使用,這些插件需要 JMP、Oracle 連接以及自訂選單。最初,我們將它們作為插件部署到各個 PC 上。因此,每台 PC 都需要安裝 JMP、Oracle、設定 ODBC 驅動程式以及新增自訂選單。這種方法雖然可行,但維護起來卻非常麻煩,因為每週都會有人硬碟故障、重裝系統,或是收到一台空空如也的新電腦。這簡直是工作量龐大。
我們已改用 Citrix 伺服器來執行 JMP 及其外掛程式。目前我們正在從 Citrix 切換到 Microsoft 遠端桌面服務 (RDS),但它們本質上是一樣的。好處之一是只需設定一次。對於海外用戶來說,性能非常出色,因為只需來回發送螢幕即可。除非保存內容,否則不會發送任何資料。
它還提供了額外的安全保障。當您進行變更時,變更只會部署到每台伺服器一次,而不是每個使用者一次。我們之所以切換到 RDS,是因為它比 Citrix 更經濟實惠,它是 Windows 的一個元件,它使用一種稱為遠端桌面協定的技術,而使用遠端桌面協定需要 Microsoft 電腦存取授權。
這就是我們的環境。我們有一個Oracle資料庫,目前有三台Citrix伺服器,但它們很快就會遷移到RDS,並且運行JMP。我們的用戶透過Web連結連接到伺服器,伺服器運行JMP並將輸出結果傳送到他們的螢幕上。
Citrix 是一家美國跨國雲端運算和虛擬化技術公司,提供從伺服器應用到桌面虛擬化、網路、軟體即服務 (SaaS) 和雲端運算技術。微軟遠端桌面服務 (RDS) 提供應用虛擬化功能,可對磁碟機和印表機進行對應。 RDS 是微軟開發的專有協議,它為用戶提供圖形介面,使用戶能夠透過網路連接連接到另一台電腦。使用者使用 RDS 內建的客戶端軟體,而主機必須啟用 RDS 服務軟體。
我們有多個伺服器,其中涉及負載平衡。關於 RDS 配置,我只能簡單介紹到這裡。 RDS 有一個連接門戶,用於選擇用於負載平衡的伺服器。 RDS 還有一個 Web 前端,運行在單獨的伺服器上,它是 RDS 的一個元件。它顯示應用程式列表。這裡列出了幾個用戶可用的應用程序,它使用 Microsoft IIS 來建立網頁。這就是我能講到的最深入的技術細節了。如果您想為公司部署 RDS 或 Citrix,需要聯絡您的 IT 部門。
為了安全起見,我們使用一種稱為身分管理系統的工具。您提交申請後,系統會將您指派到開發、測試或生產組。只有擁有特定開發、測試或生產群組存取權限的使用者才能執行 JMP。此外,我們還有 Oracle 表,其中列出了插件、使用者和角色,並且每個插件都為每個使用者配備了不同安全等級的連接器。然後,我們使用管理員帳戶進行維護,以便遠端登入伺服器。接下來我們來談談 Oracle 配置。
在伺服器上,您需要安裝 Oracle 用戶端,並且需要設定兩個環境變數:Oracle Home(Oracle 用戶端的安裝位置)和 TNS_ADMIN(TNSNAMES.ORA 和 SQLNET.ORA 檔案所在的位置)。 TNSNAMES.ORA 檔案包含所有資料庫的別名,並告訴 Oracle 在哪裡尋找這些資料庫。您還需要確定 ODBC 連線的 Oracle 驅動程式名稱。最簡單的方法是按下 Windows 鍵,選擇“ODBC”,然後選擇“ODBC 資料來源 64 位元”,點擊“驅動程式”標籤,即可看到 Oracle 驅動程式名稱,即“Oracle in OraClient19Home1”。
如何使用這個 Oracle 驅動程式名稱建立連線?這裡有一個簡單的 JSL 腳本。我有一個名為 tns_alias 的東西,它代表我的資料庫。它在 TNSNAMES.ORA 檔案中就是這樣列出的。
然後是連接器文本,DBQ 是我的 TNS 別名。這是我的用戶名和密碼。接下來是驅動程式文本,然後是我的 Oracle 資料庫,位於 OraClient19Home1。這可能不太容易找到。以下是尋找方法的實用技巧。
然後我們將這兩個字串合併成一個 DSN 字串,並使用該字串建立一個資料庫連接,並將連接結果賦值給變數 1 DBC。完成後,連接器字串如下所示。要使用此連線執行 SQL,您需要呼叫 execute_sql 函數,並傳入一個連接器和一個類似這樣的簡單 SQL 語句,然後關閉資料庫連線。如何配置 JMP 插件?您需要在伺服器上安裝 JMP,然後在相應的目錄中建立插件資料夾。
C:\ProgramData\SAS\JMP\addIns。大小寫很重要。所以 P、D 都要大寫,全部大寫,I 也要大寫。我跟 JMP 技術支援溝通了好幾次才搞清楚,原來 I 是大寫,P 和 D 是大寫。搞清楚之後,一切就正常了。
我們使用插件的“id”作為資料夾名稱。這裡您可以看到一個範例,其中包含位於此遠端伺服器上的 5 個外掛程式。每個資料夾都包含一個文件,即 addin.def 文件。以下是 addin.def 檔案的範例。
此 ID 標識了插件的別名,即 com.jnj.gms.pv-analyze-prism。它包含名稱、主目錄和最小版本號。這個主目錄是什麼意思呢?主目錄是核心所在。插件的所有 JSL 腳本都儲存在主目錄中。
這就是這個資料夾,然後這裡是我所有的 JSL 腳本。 addin.jmpcust 檔案儲存了插件的選單。我們所有的插件都是自訂選單。但我們先來談談菜單。按照我們的設置,我們不希望任何沒有適當安全設定的用戶運行選單選項。
每個選單項目都聲明了一個指向程式的全域變量,其中包含一個用於檢查安全性的啟動程序。要查看此設置,您可以點擊“視圖”,選擇“自訂選單和工具列”,然後在右上角點擊“更改”,選擇“JMP 加載項”,然後選擇所需的加載項,最後點擊“確定”。現在您會看到該加載項的選單已亮起。您可以進行一些更改。以下是一個典型的選單項目範例。我有一個指向要運行的程式的全域變量,即“打開 datatable.jsl”。
這個資料插件主目錄裡包含了ID,這意味著你不需要告訴JMP實際的硬碟位置。它會自動尋找並解碼addin.dev檔案中的資訊。第二行指示包含launch_pva_menu.jsl腳本。這就是選單操作部分的內容。只需運行這個jsl腳本即可。你還需要檢查並使用插件主資料夾com.jnj.gms.pv-analyze-prism。這是啟動程序。我們包含了幾個函數和一個資料庫存取腳本。然後我調用了有效的PPA用戶。
它會在 Oracle 安全表中尋找使用者。如果使用者不在表中,則會收到錯誤訊息並被強制退出。這涉及到一些 JMP 版本依賴關係。我記得這段程式碼是在 addin.dev 檔案中新增最低 JMP 版本要求之前寫的,或者可能是我當時並不知情。
總之,一旦我們通過了那一步,我們就會查看程式名稱中是否包含特定內容。如果包含 JMP 應用程式副檔名(即應用程式建構器),我們就會開啟該程式。否則,它是一個 JSL 腳本,我們將其包含進來。為了進行程式碼維護,我們設定了三個環境:開發環境、測試環境和生產環境,以及一台用於開發、一台用於測試、三台用於生產環境的伺服器。
驗證成功後,更新後的檔案會被複製到對應的伺服器。我使用一款名為 Total Commander 的程式來同步這些資料夾,我們稍後會看到它。 Citrix 和 RDS 的情況略有不同。實際上,存取文件的方式……至少我們使用 OneDrive。它有所不同。
如果使用 JMP 將檔案儲存到伺服器的桌面或文件中,檔案實際上會儲存到伺服器本身,這是不允許的。為了解決這個問題,我們點擊檔案首選項中的檔案位置。然後,在「資料檔案目錄」和「儲存目錄」中,我們指定 OneDrive 的位置。 Citrix 和 RDS 的路徑略有不同。 Citrix 的路徑是 Client\C$,而這裡是 tsclient\C。
其餘部分是用戶、您的用戶名、OneDrive 和 JNJ。這是我們自訂的 OneDrive 位置。從此以後,您每次開啟或儲存檔案時,預設都會儲存到您的 OneDrive,而不會嘗試儲存到伺服器上。
我們來做個快速示範。點這裡。這是我的 RDS 登入介面。我這就登入。它會產生一個 RDP 文件,然後運行它。如果你右鍵點擊這裡,請確保選取「始終開啟此類檔案」選項。它現在只是連接我到這裡。這裡是運行在我們開發實例上的 JMP 伺服器,我可以打開一些東西…我的數據,我們來運行 distribution 命令。
然後我們保存它。它會保存到我的 OneDrive。我把它放在一個名為 temp 的資料夾裡。好的。現在我已經把它保存到我的硬碟了。看起來還在保存。現在我的電腦本地運行著 JMP,我們來看看如果我點擊並把它拖到這裡會發生什麼。找到了。它是我在伺服器上產生的,只是有一種方法可以證明它確實有效。
好的。我還想給你們展示一下伺服器本身。我現在登入的是RDS伺服器。伺服器上安裝了JMP 16和JMP 18,這是我常用的工具,叫做Total Commander。
我只是想向您展示我有一些文件需要複製到伺服器的情況。這是在文件共享上。這個 D 碟是這個應用程式的插件所在位置。我將使用這裡的按鈕同步目錄,然後進行比較,並按日期排序。看起來這裡有幾個文件要更新。
不過我只想示範一個。我最喜歡的功能之一是,我可以在這裡右鍵點擊,然後選擇“比較左右”。這只是一個簡單的改變。之前有個註解放錯了位置,我把它放到正確的位置了。如果我想同步,就點選「同步」。複製內容。搞定。這就是我想演示的伺服器版 JMP 的全部內容。我們繼續演示吧。總之,在伺服器上運行 JMP 對插件來說非常棒。你只需要設定一次。
海外用戶體驗極佳。安全措施更加完善,變更只需在伺服器上部署一次,無需針對每個使用者單獨部署。總之,JMP 伺服器及其插件拯救了世界。就是這樣。非常感謝。