[技術分享] HPE NonStop主機上的現代化開發方式(上)

作者/莊佳哲

作者簡歷 作者現職凌群電腦金控軟體研發總處軟體工程師,主要負責期貨系統軟體,專長為COBOL、JAVA、C#軟體開發。 前言 在 NonStop 系統環境中,除了傳統的COBOL開發,NonStop也有支援現代的開發工具,像是Java、SQL/MX等等。本期我們將介紹如何在NonStop主機上使用Java開發,依照主機系統版本不同,分別支援Java 8、Java 11、Java 17。以下說明以Java 11為例。 NSJ11 NSJ11由以下標準Java組件組成::
  • 基於OpenJDK 11.0.18的Java虛擬機。
  • OpenJDK 11.0.18核心包。
  • OpenJDK 11.0.18工具。支持所有標準工具,除了GUI,如appltviewer。
  • policytool和jconsole,以及客戶端工具,如javaws和HtmlConverter。不支持實驗工具。
  • OpenJDK 11.0.18 API包。
一、安裝NSJ11
    == Guardian環境 == 切換至資料夾$SYSTEM.ZOSSUTL, 輸入指令PINSTALL -rvf /G/tsvvol/zossutl/T3066PAX 此命令將會把T3066PAX內容安裝到/usr/tandem/nssjava/javainstall/(VPROC_STR) 其中VPROC_STR範例為: T3066L11_17APR2023_jdk110_AAF == OSS環境 == 執行NSJ11安裝檔: sh /usr/tandem/nssjava/javainstall/(VPROC_STR)/NSJInstall -timezone 為時區設定,可為: 0 Asia/Brunei 1 Asia/Choibalsan 2 Asia/Chongqing 3 Asia/Chungking 4 Asia/Harbin 5 Asia/Hong_Kong 6 Asia/Irkutsk 7 Asia/Kuala_Lumpur 8 Asia/Kuching 9 Asia/Macao 10 Asia/Macau 11 Asia/Makassar 12 Asia/Manila 13 Asia/Shanghai 14 Asia/Singapore 15 Asia/Taipei 16 Asia/Ujung_Pandang 17 Asia/Ulaanbaatar 18 Asia/Ulan_Bator 19 Australia/Perth 20 Australia/West 21 CTT 22 Etc/GMT-8 23 Hongkong 24 PRC 25 Singapore 執行完會將NSJ11安裝到/usr/tandem/nssjava/jdk110_l11 若需要更改時區,輸入: sh /usr/tandem/nssjava/jdk110_l11/install/UpdateTimeZone 到此完成Java安裝: /usr/tandem/nssjava/jdk110_l11: ls -l total 46 -r--r--r-- 1 SUPER.SUPER SUPER 3750 Apr 24 12:08 COPYRIGHT -r--r--r-- 1 SUPER.SUPER SUPER 304 Apr 24 12:08 LICENSE drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Jun 25 11:09 bin drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 conf drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 demo drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 ext drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 include drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Jun 25 11:02 install drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 jmods drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 legal drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 lib drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Apr 24 12:08 man -r--r--r-- 1 SUPER.SUPER SUPER 1219 Apr 24 12:08 release
二、驗證Java安裝
  • 在OSS中將Java加入環境變數 export PATH=/usr/tandem/nssjava/jdk110_l11/bin:$PATH
  • 確認安裝路徑 /usr/tandem/nssjava/jdk110_l11: 輸入指令whence java /usr/tandem/nssjava/jdk110_l11/bin/java
  • 確認安裝的NSJ版本 /usr/tandem/nssjava/jdk110_l11: 輸入指令 vproc /usr/tandem/nssjava/jdk110_l11/bin/java VPROC - T9617H01 - (03 MAY 2016) SYSTEM \NSX Date 18 SEP 2024, 11:30:24 Copyright 1986-2016 Hewlett Packard Enterprise Development LP /usr/tandem/nssjava/jdk110_l11/bin/java Binder timestamp: 24MAY2023 15:49:56 LCT, 24MAY2023 07:49:56 GMT Version procedure: T3066L11_17APR2023_jdk110_AAF_24May2023 Version procedure: T8432L01_01FEB2017_CCPMAINX_24JAN2017_ACE TNS/X Native Mode: runnable file
  • 確認Java Runtime Environment及VM /usr/tandem/nssjava/jdk110_l11: 輸入指令java -version openjdk version "11.0.18" 2023-01-17 LTS OpenJDK Runtime Environment (build 11.0.18+0-LTS) OpenJDK 64-Bit Server VM (build 11.0.18+0-LTS, mixed mode)
執行Java 一、新增Java程式碼
    在OSS環境中建立檔案HelloWorld.java並新增內容 /java/test: 輸入指令touch HelloWorld.java /java/test: ls -l -rw-rw-rw- 1 JAVA.JJ JAVA 121 Sep 18 13:49 輸入指令HelloWorld.java 新增HelloWorld.java內容: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
二、編譯Java,產生可執行程式
    產出.class檔 /java/test: 輸入指令 javac HelloWorld.java -rw-r--r-- 1 JAVA.JJ JAVA 426 Sep 18 14:19 輸入指令HelloWorld.class -rw-rw-rw- 1 JAVA.JJ JAVA 121 Sep 18 13:49 HelloWorld.java
三、執行程式
  • 第一種方式,直接執行 /java/test: 輸入指令 java HelloWorld Hello World! 若出現 Error: Could not find or load main class HelloWorld Caused by: java.lang.ClassNotFoundException: HelloWorld 改為使用: /java/test: 輸入指令 java -cp . HelloWorld Hello World!
  • 第二種方式,使用run指令,可指定process name和執行cpu: run [-name=/G/] [-cpu=] java /java/test: 輸入指令 run -name=/G/appj -cpu=1 java -cp . HelloWorld Hello World!
  • 第三種方式,打包成jar檔執行: jar cfe /java/test: 輸入指令 jar cfe Hello.jar HelloWorld *.class -rw-r--r-- 1 JAVA.JJ JAVA 784 Sep 18 15:09 Hello.jar -rw-r--r-- 1 JAVA.JJ JAVA 426 Sep 18 14:19 HelloWorld.class -rw-rw-rw- 1 JAVA.JJ JAVA 121 Sep 18 13:49 HelloWorld.java /java/test: 輸入指令java -jar Hello.jar Hello World!
Java Debug 一、啟用Debug模式
    java -Xdebug -Xnoagent -agentlib:jdwp=transport=dt_socket,server=y,address=[ip]:[port],suspend=y 可為: 1. class_name,例如HelloWorld 2. -jar Hello.jar 範例: /java/test: java -Xdebug -Xnoagent -agentlib:jdwp=transport=dt_socket,server=y,a ddress=*:8181,suspend=y -cp . HelloWorld Listening for transport dt_socket at address: 8181 到此Debug模式啟用完成,再來可選擇使用Command Line或IDE進行Debug。
二、Command Line Debug
    開啟另一個視窗進入OSS環境。 輸入jdb -attach : /java/sam: 輸入指令jdb -attach 127.0.0.1:8181 Set uncaught java.lang.Throwable Set deferred uncaught java.lang.Throwable Initializing jdb ... > VM Started: No frames on the current call stack main[1] 開始Debug,詳細操作指令可輸入help查看。
三、IDE Debug
    可以在個人電腦上使用Java IDE執行遠端Debug,比Command Line模式更方便。 將NonStop上的Java Source Code下載到電腦並用IDE開啟,再依照啟用Debug模式時輸入的參數,填入IDE的Remote Debug設定。 下圖為使用IntelliJ IDEA遠端Debug畫面:
(待續) 參考資料