[技術分享] 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畫面:
(待續)
參考資料