在大型主機環境中,開發者需要熟悉 ISPF 和 JCL 等工具來管理資料集和執行批次作業。ISPF 提供了互動式介面,方便建立、編輯和管理檔案,而 JCL 則是用於控制作業流程和資源分配的指令碼語言。理解 SDSF 的功能對於監控系統活動和作業排程至關重要。同時,Unix 系統服務(USS)的整合,讓開發者可以在大型主機上使用 Unix 工具和應用程式,提升開發效率。
使用ISPF建立檔案與管理資料集
在大型主機開發環境中,ISPF(Interactive System Productivity Facility)是一個重要的工具,用於建立和管理資料集、編輯檔案以及執行各種開發任務。本章節將介紹如何使用ISPF建立檔案、管理資料集,並探討相關的命令和功能。
建立資料集
首先,需要在ISPF中建立一個新的資料集。具體步驟如下:
- 在ISPF主選單中選擇相關選項以進入建立資料集的介面。
- 在建立資料集的介面中,需要填寫資料集的名稱、專案名稱和群組名稱。其中,資料集的名稱是唯一的識別符號,而專案名稱和群組名稱則用於組織和管理資料集。
- 在“Type”欄位中指設定檔案的型別,例如COBOL。這樣可以確保在編輯檔案時使用正確的編輯器。
- 完成上述設定後,按下Enter鍵進入“Allocate New Data Set”畫面。
設定資料集引數
在“Allocate New Data Set”畫面中,需要設定資料集的大小、記錄長度和記錄格式等重要引數。同時,必須確保“Data set name type”被設定為PDS(Partitioned Data Set),否則系統會預設為順序檔案。
完成引數設定後,按下Enter鍵。如果畫面右上角顯示“dataset allocated”,則表示資料集已成功建立。
建立資料整合員
雖然資料集已經建立,但其中尚未包含任何成員。因此,需要在ISPF主選單中選擇選項2,以進入“Edit Entry”面板。
在“Member”欄位中輸入成員的名稱,例如“PROGS”。按下Enter鍵後,將進入檔案的編輯器介面。
使用ISPF編輯器
ISPF編輯器具有三個主要區域:標題區、行命令區和螢幕視窗。
- 標題區:顯示程式的名稱,並提供輸入編輯命令的空間。
- 行命令區:允許使用者輸入編輯陳述式,例如插入或刪除行。
- 螢幕視窗:用於輸入和編輯程式碼。
在編輯器中,可以使用多種命令,例如SAVE、COPY、CHANGE、CREATE、SORT、LOCATE、END、UNDO和RETURN等,以實作各種編輯功能。
常用命令
- SAVE:將原始碼儲存到磁碟。
- COPY:將另一個資料集複製到當前編輯器中。
- CHANGE:執行查詢/替換操作,例如更改所有出現的特定欄位名稱。
- CREATE:在分割資料集中建立新的成員。
- SORT:對資料集中的資料進行排序。
系統顯示和搜尋功能(SDSF)
SDSF是z/OS中的一個系統工具,可以透過ISPF存取。它提供了多種功能,例如取消和清除作業、檢視和搜尋系統日誌、監控正在處理的作業以及控制作業的排程。
要存取SDSF,可以在ISPF主選單中輸入“SD”,然後進入SDSF主選單。在SDSF中,可以使用Log命令檢視主機系統的活動日誌。
工作控制語言(JCL)
在大型主機應用程式開發中,JCL是一種用於指令z/OS執行程式、管理資料讀寫和分配資源的指令碼語言。JCL對於批次處理作業至關重要。
JCL範例與解說
//SORTJOB JOB MSGLEVEL=1,CLASS=A,MSGCLASS=A,TIME=1,NOTIFY=&SYSUID
//MYSORT EXEC PGM=SORT
//SORTIN DD DISP=SHR,DSN=CUST.FILE
//SORTOUT DD SYSOUT=*
//*This is the JCL for a sort program
內容解密:
//SORTJOB JOB MSGLEVEL=1,CLASS=A,MSGCLASS=A,TIME=1,NOTIFY=&SYSUID:這是JCL的第一行,定義了一個名為SORTJOB的作業。MSGLEVEL=1表示輸出訊息的層級,CLASS=A指定了作業的類別,MSGCLASS=A定義了訊息輸出的類別,TIME=1設定了作業允許的最大CPU時間,NOTIFY=&SYSUID表示當作業完成時通知提交作業的使用者。//MYSORT EXEC PGM=SORT:這行指示z/OS執行一個名為SORT的程式。EXEC PGM表示執行一個特定的程式,而SORT是程式的名稱。//SORTIN DD DISP=SHR,DSN=CUST.FILE:這行定義了一個名為SORTIN的DD(Data Definition)名稱,用於指定輸入資料集。DISP=SHR表示資料集可以被多個作業分享讀取,而DSN=CUST.FILE則指定了輸入資料集的名稱。//SORTOUT DD SYSOUT=*:這行定義了一個名為SORTOUT的DD名稱,用於指定輸出目的地。SYSOUT=*表示輸出將被送到預設的輸出裝置,通常是螢幕或指定的輸出類別。//*This is the JCL for a sort program:這是一行註解,用於解釋JCL的目的和功能。註解以//*開頭,直到行尾。
JCL的重要性
JCL是大型主機開發中的關鍵組成部分,它允許開發者控制程式的執行、管理資料資源並排程批次作業。儘管JCL看似複雜,但掌握其基本語法和結構對於開發高效的大型主機應用程式至關重要。
主機開發環境深度解析
JCL 技術深度分析
Job Control Language(JCL)是大型主機系統中的關鍵指令碼語言,用於定義和管理批處理作業的執行。JCL 的結構嚴謹,每個 JCL 指令碼都由多個陳述式組成,用於控制作業流程、資源分配和輸出管理。
JCL 語法與結構解析
一個典型的 JCL 指令碼包含以下核心元素:
JOB 陳述式:定義作業的基本屬性
- MSGLEVEL=1:控制輸出訊息的型別
- CLASS=A:將作業歸類別以便排程
- MSGCLASS=A:指定作業日誌的輸出類別
- TIME=1:設定作業的最大 CPU 使用時間(1 分鐘)
- NOTIFY=&SYSUID:作業完成時通知提交者
EXEC 陳述式:執行特定的程式或程式
- 用於執行如 SORT 這樣的程式
- 可在單一 JCL 中多次使用以執行多個步驟
DD 陳述式:定義資料集的特性和輸入輸出設定
//SORTIN DD DSN=輸入資料集名稱,DISP=SHR //SORTOUT DD SYSOUT=*- SORTIN:定義排序操作的輸入資料集
- SORTOUT:將排序結果輸出到 SYSOUT(系統輸出)
內容解密:
MSGLEVEL=1的作用是控制 JCL 執行的訊息輸出層級,幫助開發者除錯。CLASS=A將作業歸類別為 A 類別,方便系統管理員根據類別進行排程和資源分配。TIME=1限制了作業的最大 CPU 時間,防止失控的作業佔用過多資源。NOTIFY=&SYSUID確保提交者能收到作業完成的通知,這對於監控和追蹤作業狀態至關重要。
JCL 的進階特性
- 續行處理:當單行超過 80 字元時,使用逗號作為續行符號。
- 程式與 INCLUDE 陳述式:可使用 PROC 命令執行程式碼區塊,並透過 INCLUDE 引入外部程式碼,類別似 COBOL 的 copybook。
Unix 系統服務整合
Unix 系統服務(USS)為大型主機提供了強大的 Unix 環境相容性。IBM 將 Unix OS 整合到其主機平台上,使企業能夠無縫使用 Unix 工具和應用程式。
USS 的關鍵特性
- 階層式檔案系統:USS 使用階層式檔案系統(HFS 或 zFS),與傳統的主機 PDS 資料集不同。
- 與其他系統的整合:USS 可與 CICS、IMS、Db2 等系統無縫協作,提供靈活的開發和運作環境。
主機開發工具集
大型主機開發涉及多種專業工具,用於簡化開發、測試和除錯流程。常見工具包括:
- DFSORT 和 Syncsort:用於資料排序、合併和複製的高效工具。
- BMC Compuware Abend-AID:協助識別和解決應用程式異常終止的問題。
- CA Easytrieve Report Generator:根據類別自然語言的報表生成工具。
- ChangeMan ZMF:提供應用程式的版本控制功能。
內容解密:
- DFSORT 用於高效處理大量資料的排序和合併任務。
- Abend-AID 能夠自動捕捉並分析異常終止的原因,幫助快速定位問題。
- Easytrieve 簡化了報表生成的流程,降低了報表開發的複雜度。
現代 IDE 在主機開發中的應用
隨著開發需求的演變,現代 IDE(如 Eclipse 為基礎的 IBM Developer for z/OS 和 BMC Compuware Topaz Workbench)提供了更豐富的功能,如程式碼自動完成、除錯工具和 DevOps 整合。
主要 IDE 功能比較
| IDE | 主要特性 | |
–|
–| | IBM Developer for z/OS | 根據 Eclipse,提供 Git 整合和單元測試支援 | | BMC Compuware Topaz Workbench | 提供視覺化除錯、程式碼覆寫率分析和效能調校 | | Che4z | 開源專案,支援 COBOL 和組譯語言開發,提供語法高亮和自動修正 |
內容解密:
- IBM Developer for z/OS 為團隊開發提供了完整的工具鏈,包括版本控制和測試框架。
- Topaz Workbench 的視覺化功能幫助開發者直觀理解程式的執行流程和資料存取路徑。
- Che4z 作為開源專案,降低了主機開發工具的取得門檻,促進了社群協作。
Visual Studio Code 在大型主機開發的應用
2015年,微軟推出了Visual Studio Code(VS Code),目標是開發一個輕量級的開源IDE,能夠跨平台支援Windows、macOS和Linux。這對微軟來說是一個重要的策略轉變,因為其旗艦IDE Visual Studio長期以來僅支援Windows。
VS Code的策略非常成功。根據Stack Overflow在2019年的調查,它在超過87,000名受訪者的反饋中排名第一。VS Code支援多種程式語言,包括Python、C/C++、C#、Java、Go、Dart、PHP和Ruby等。對於大型主機語言如COBOL,VS Code提供了擴充套件支援,只需點選安裝按鈕即可啟用。其他大型主機應用程式的擴充套件,如Zowe(允許連線大型主機),也可在VS Code中使用。
VS Code 的功能特點
VS Code雖然輕量,但功能強大。它包含了豐富的互動式偵錯工具,用於檢查變數、檢視呼叫堆積疊、逐步執行程式碼、透過控制檯執行程式碼等。此外,VS Code還具有以下特點:
- 對Git版本控制的原生支援
- 可編寫COBOL 6.3、PL/I 5.3、TSO/E REXX和High Level Assembler for z/OS 2.4等大型主機語言程式
- 可嵌入IMS 15.1.0、CICS 5.6和SQL Db2 for z/OS 12.1等系統的程式碼
使用 VS Code 和 Zowe 進行大型主機開發
本文將示範如何使用VS Code和Zowe進行大型主機開發。首先,需要安裝以下工具:
- Node.js:一個開源環境。如果已經安裝Node.js,請確保版本為8或更高。
- Java SDK:允許在電腦系統上使用Java。需要使用版本8或更高的SDK,並需要註冊一個免費的Oracle帳戶。
接下來,安裝VS Code,並安裝Zowe Explorer擴充套件。安裝完成後,點選VS Code左側的擴充套件圖示,搜尋Zowe Explorer並安裝。
連線大型主機
要連線大型主機,需要點選Zowe Explorer圖示,然後在DATA SETS區段點選+號建立連線。選擇z/OSMF選項,並輸入從Open Mainframe Project獲得的URL、使用者名稱和密碼。
操作大型主機資料集
連線成功後,您的主機設定檔將顯示在DATA SETS區段。點選>展開該區段,並選擇搜尋圖示。然後輸入您的使用者ID,即可檢視可用的資料集。
編譯和執行 COBOL 程式
在DATA SETS區段,點選.CBL資料夾,即可檢視COBOL程式的原始碼。選擇HELLO程式,即可檢視“Hello World”的基本程式碼。
要執行程式,需要提交JCL作業。在JOBS區段,選擇HELLO並右鍵點選,選擇Submit Job。作業提交後,可以在JOBS區段檢視輸出結果。
檢視輸出結果
在JOBS區段,選擇HELLO作業,即可檢視編譯結果。如果編譯成功,將顯示CC 0000。要檢視程式輸出結果,請選擇SYSOUT(104)檔案,即可檢視“Hello World!”。
程式碼解析
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
MAIN-PROGRAM.
DISPLAY "Hello World!".
STOP RUN.
內容解密:
IDENTIFICATION DIVISION.:這是COBOL程式的第一個部分,用於標識程式。PROGRAM-ID. HELLO.:定義程式名稱為HELLO,這與檔案名稱必須一致。PROCEDURE DIVISION.:定義程式的邏輯部分。MAIN-PROGRAM.:程式的主要邏輯入口。DISPLAY "Hello World!".:輸出“Hello World!”到螢幕。STOP RUN.:終止程式執行。
綜上所述,VS Code和Zowe為大型主機開發提供了便捷的工具和環境,使得開發者能夠更輕鬆地進行大型主機應用程式的開發和維護。
主機開發環境的多樣性與演進
在主機開發的世界中,開發者有多種工具可供選擇以提升工作效率。這些工具不僅包含傳統的TSO和ISPF,還包括現代化的IDE(整合開發環境),如Visual Studio Code(VS Code)。本章將探討這些工具的特點及其在主機開發中的應用。
命令列介面(CLI)與Zowe
Zowe提供了一個命令列介面(CLI),允許開發者在本地端電腦的終端機上進行開發作業。這個CLI支援Windows、Linux和Mac平台,其使用方式與Amazon Web Services(AWS)、Microsoft Azure或Google Cloud等雲端服務類別似。
# 使用Zowe CLI進行主機檔案操作
zowe zos-files list data-set "MY.DATASET"
#### 內容解密:
此命令列舉了主機上名為`MY.DATASET`的資料集。Zowe CLI提供了一種便捷的方式來管理和操作主機上的檔案和資料集。
Visual Studio Code(VS Code)的主機開發支援
多家頂尖的主機開發軟體公司已經將其技術移植到了Microsoft的VS Code平台上。例如,Micro Focus提供了Visual COBOL for Visual Studio,具備先進的編輯、偵錯、持續背景編譯、程式碼分析和搜尋等功能。這些工具不僅支援COBOL語言,還允許混合使用Visual Basic、C#等.NET語言進行開發。
Broadcom同樣選擇了VS Code作為其主機開發的標準化平台,並在市場上提供了多項免費擴充套件。這些擴充套件提供了企業級的支援,並且透過CA Brightside系統進行管理。
// 使用VS Code擴充功能進行COBOL偵錯
const cobolDebugger = require('cobol-debugger');
cobolDebugger.startDebugging({
program: 'MYCOBOLPROGRAM',
params: ['param1', 'param2']
});
#### 內容解密:
此範例展示瞭如何使用VS Code的COBOL偵錯擴充功能來啟動偵錯程式。透過這種方式,開發者可以逐步執行COBOL程式,檢查變數值,並進行錯誤診斷。
簡易IDE:OpenCobolIDE
對於一些簡單的開發任務,開發者可能不需要使用功能全面的IDE。OpenCobolIDE是一個免費、開源的COBOL IDE,支援Linux、Windows和macOS等平台。它提供了語法突顯、程式碼自動完成等現代化IDE的功能,並且具備COBOL特有的功能,如計算PIC偏移量。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY 'Hello, World!'.
STOP RUN.
#### 內容解密:
這是一個簡單的COBOL程式,使用OpenCobolIDE編寫並執行。該程式在螢幕上顯示`Hello, World!`,然後停止執行。OpenCobolIDE提供了一個直觀的介面來編寫和執行COBOL程式。
網頁式編輯器:Coding Ground
對於初學者或簡單的COBOL程式設計任務,網頁式編輯器如Coding Ground提供了一個便捷的選擇。Coding Ground允許使用者儲存檔案並使用GitHub儲存函式庫。然而,它對於需要處理檔案的專案可能不是最佳選擇。
IDENTIFICATION DIVISION.
PROGRAM-ID. USER-INPUT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-NAME PIC A(20).
PROCEDURE DIVISION.
DISPLAY 'Enter your name: '.
ACCEPT USER-NAME.
DISPLAY 'Hello, ', USER-NAME.
STOP RUN.
#### 內容解密:
此COBOL程式示範瞭如何接受使用者輸入。在Coding Ground中,使用者需要在STDIN區段預先輸入資料,然後執行程式以檢視輸出結果。
主機開發流程
主機開發通常涉及維護現有的程式。由於許多公司長期依賴主機系統,它們往往不願進行重大變更。因此,主機開發者經常需要遵循嚴格的開發流程,包括詳細的規格制定、程式設計、單元測試和偵錯等步驟。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 大型主機開發檔案與資料集管理
package "系統架構" {
package "前端層" {
component [使用者介面] as ui
component [API 客戶端] as client
}
package "後端層" {
component [API 服務] as api
component [業務邏輯] as logic
component [資料存取] as dao
}
package "資料層" {
database [主資料庫] as db
database [快取] as cache
}
}
ui --> client : 使用者操作
client --> api : HTTP 請求
api --> logic : 處理邏輯
logic --> dao : 資料操作
dao --> db : 持久化
dao --> cache : 快取
note right of api
RESTful API
或 GraphQL
end note
@enduml