 |
|
[技術分享] HPE NonStop主機上的現代化開發方式(上)作者/莊佳哲 [發表日期:2024/10/4] 作者簡歷作者現職凌群電腦金控軟體研發總處軟體工程師,主要負責期貨系統軟體,專長為COBOL、JAVA、C#軟體開發。 前言在 NonStop 系統環境中,除了傳統的COBOL開發,NonStop也有支援現代的開發工具,像是Java、SQL/MX等等。本期我們將介紹如何在NonStop主機上使用Java開發,依照主機系統版本不同,分別支援Java 8、Java 11、Java 17。以下說明以Java 11為例。 NSJ11NSJ11由以下標準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畫面:
(待續) 參考資料
|