AWS Mainframe Modernization 自我管理體驗不再開放給新客戶。如需類似 AWS Mainframe Modernization 自我管理體驗的功能,請從廠商導向產品和來源探索功能 AWS Transform。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS 大型主機現代化可用性變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Mainframe Modernization Service (受管執行期環境體驗) 不再向新客戶開放。對於與 AWS Mainframe Modernization Service (受管執行期環境體驗) 類似的功能,請探索 AWS Mainframe Modernization Service (自我管理體驗)。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS 大型主機現代化可用性變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料集公用程式
BLUESAMCOPY/BLUESAMCREATE/BLUESAMDELETE/BLUESAMCLEAR
這些公用程式會在 Blusam 資料集上提供基本資料集操作函數。
bypassBluesamStatus 旗標 (存放在 JobContext 中) 會決定是否略過正常資料集狀態驗證,以防止線上和批次程序之間的並行存取衝突。
當 bypassBluesamStatus 為 true 時:
在操作期間略過一般資料集狀態檢查
允許存取通常可能遭到封鎖的資料集
藍色SAMCOPY
BLUESAMCOPY 程式會將資料和中繼資料結構從一個 Bluesam 資料集複製到另一個資料集。
Parameters
BLUESAMCOPY 程式需要兩個參數:
FROM=<source dataset name>- 要從中複製的來源資料集TO=<target dataset name>- 要複製到的目標資料集
Behavior (行為)
如果目標資料集不存在, 會使用來源的中繼資料結構建立目標資料集
如果目標存在, 會在複製之前將其清除 (覆寫現有資料)
當線上程序未使用資料集或
bypassBluesamStatus將 設為 true 時,操作會繼續進行保留金鑰、壓縮、記錄長度和其他中繼資料屬性
錯誤處理
如果來源資料集不存在或線上程序正在使用任一資料集,則傳回程式碼 1。
範例用量
import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // copy bluesam dataset res = mpr.withArguments("FROM=MYBLUESAMTABLE","TO=MYBLUESAMTABLE2").runProgram("BLUESAMCOPY")
藍色SAMCREATE
BLUESAMCREATE 程式會使用指定的參數建立 Bluesam 資料集。
Parameters
BLUESAMCREATE 程式需要七個參數:
name=<dataset name>- 要建立的資料集 (強制性)compress=<true/false>- 啟用壓縮 (選用,預設:false)fixedLength=<true/false>- 固定長度記錄狀態 (選用,預設值:false)recordLength=<integer>- 以位元組為單位記錄長度 (選用,預設值:-1)primaryKey=<key id>,duplicates=<true/false>,fields=<offset,length,...>- 主索引鍵規格 (選用)key=<altkey id>,duplicates=<true/false>,fields=<offset,length,...>- 備用金鑰 (可以有多個 或 0)clearExisting=true/false- 清除現有的資料集 (選用預設值: true)
特定金鑰參數說明:
duplicates:指定金鑰是否允許重複值;fields:定義金鑰的欄位位置 (1 型) 和長度;
Behavior (行為)
如果資料集不存在, 會使用指定的參數建立資料集
如果資料集存在, 會在
clearExisting=true當線上程序未使用資料集或
bypassBluesamStatus將 設定為 時,操作會繼續進行true
錯誤條件
在所有情況下傳回程式碼 0。
範例用量
import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // create bluesam dataset mpr.withArguments( "name=MYBLUESAMTABLE", "compress=FALSE", "fixedLength=true", "recordLength=54", "primaryKey=MYKEY_PK,duplicates=FALSE,fields=0,6") .runProgram("BLUESAMCREATE")
藍色SAMDELETE
BLUESAMDELETE 程式會刪除 Bluesam 資料集。
Parameters
BLUESAMDELETE 程式需要 1 個或多個參數:
<dataset name>- 要刪除的資料集 (可以有多個)
Behavior (行為)
當線上程序未使用資料集或
bypassBluesamStatus將 設定為 時,操作會繼續進行true如果資料集存在,請將其刪除
錯誤條件
在所有情況下傳回程式碼 0。
範例用量
import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // delete bluesam datasets res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2","MYBLUESAMTABLE3").runProgram("BLUESAMDELETE")
藍色SAMCLEAR
BLUESAMCLEAR 程式會從現有資料集移除所有資料,同時保留其結構和中繼資料。
Parameters
BLUESAMCLEAR 程式需要 1 個或多個參數:
<dataset name>- 要清除的資料集 (可以有多個)
Behavior (行為)
當線上程序未使用資料集或
bypassBluesamStatus將 設定為 時,操作會繼續進行true如果資料集存在,請將其清除
錯誤條件
在所有情況下傳回程式碼 0。
範例用量
import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // clear bluesam datasets res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2").runProgram("BLUESAMCLEAR")
BPXWDYN
此公用程式會模擬動態資料集配置和解除配置的 z/OS BPXWDYN 服務。在現代應用程式中,檔案配置會透過FileConfigurationUtils建置器 API 在 Groovy 指令碼中完成。此程式允許在沒有 Groovy 的情況下動態管理這些配置,這對於現代化應用程式中的互動式或條件式檔案處理至關重要。
Parameters
會保留舊版引數格式。預期單一引數包含 2 位元組大小的標頭,後面接著命令字串。
用於配置的命令字串格式: ALLOC DD(<name>) DSN('<dsn>') SHR?
解除配置的命令字串格式: FREE DD(<name>)
錯誤處理
設定錯誤代碼 0 表示成功,設定 1 表示失敗
針對無效的命令或參數擲回 RuntimeException
範例用量
以下是透過 AWS 轉換進行 COBOL 現代化所產生的 BPXWDYN 程式 Java 範例用量:
COBOL 程式碼:
01 WK-AREA. 03 DS-ALLOC-STRING. 05 DS-LENGTH PIC S9(004) COMP VALUE 100. 05 DS-TEXT PIC X(100) VALUE "ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR". ... 01 RC-RETURN-CODE-AREA. 03 RC-RETURN-CODE PIC S9(008) COMP. ... CALL 'BPXWDYN' USING DS-ALLOC-STRING RETURNING RC-RETURN-CODE.
和相符的 Java 現代化:
private final Group dsAllocString = new Group(root).named("DS-ALLOC-STRING"); private final Elementary dsLength = new Elementary(dsAllocString,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("100")).named("DS-LENGTH"); private final Elementary dsText = new Elementary(dsAllocString,new AlphanumericType(100),"ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR").named("DS-TEXT"); ... private final Group root = new Group(getData()).named("RC-RETURN-CODE-AREA"); private final Elementary rcReturnCode = new Elementary(root,new BinaryType(8, 0, "STD", false, false, true)).named("RC-RETURN-CODE"); ... // Call to utility program BPXWDYN ctrl.callSubProgram( "BPXWDYN", CallBuilder.newInstance().byReference(ctx.getWkArea().getDsAllocStringReference()).getArguments(), ctx); ctx.getRcReturnCodeArea().setRcReturnCode(NumberUtils.convert(ctx.getProgramReturned()).intValue());
GDGUTILS
GDGs(世代資料群組) 允許應用程式使用版本控制的資料集,其中每次執行都會建立新的世代,同時維持對上一代的存取。此公用程式會建立和管理這些資料集的產生。此公用程式旨在以 groovy 指令碼呼叫。
Parameters
參數順序無關緊要
action=<create|refreshevents>- 要執行的操作 (強制性)gdgname=<name>- GDG 基礎的名稱 (強制性)storageProvider=<filesystem|bluesam>- 儲存後端relativeGeneration=<+integer>- 相對世代編號 (例如,下一個為 +1)absoluteGeneration=integer- 絕對產生數量recordLength=<integer>- 在資料集中記錄大小fixedLength=<true/false>- 指定記錄在資料集中有固定的長度ownerPath=<File system path>- 存放資料集的路徑 (檔案系統特定,該案例為必要)compress=<true/false>- 表示如果資料在資料存放區中壓縮 (bluesam 特定),則資料應保持在記憶體中壓縮 (選用,false 是預設值)catalog- 指定要編製目錄的資料集 (選用)warmUp- 表示資料集應在開啟時載入記憶體 (藍本特定) (選用)
relativeGeneration 或 absoluteGeneration:需要設定其中一個屬性。
作業
建立:根據 GDG 中繼資料建立新的 GDG 資料集產生 (同時處理檔案系統和 Bluesam 儲存)
refreshevents:調整產生編號 (Gdg Metadata) 而不建立新的資料集 (在重新啟動已建立資料集的失敗任務時使用)
錯誤處理
設定錯誤代碼 0 表示成功,設定 1 表示失敗
針對無效的命令或參數擲回 RuntimeException
範例用量
Gdg 建立操作:下列程式碼會建立IC.PLI.GDGTEST資料集的 bluesam 產生 (43)
import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) Map params = new Hashtable() params.put("jobContext", jobContext) Object[] args =["action=create","gdgname=IC.PLI.GDGTEST","absoluteGeneration=43","storageProvider=bluesam","recordLength=80"] mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")
Gdg refreshevents 操作:只有 relativeGeneration 與此操作相關。下列程式碼會更新IC.PLI.GDGTEST資料集的產生編號 (+1 相較於目前世代)
import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) Map params = new Hashtable() params.put("jobContext", jobContext) Object[] args =["action=refreshevents","gdgname=IC.PLI.GDGTEST","relativeGeneration=1","storageProvider=bluesam"] mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")
ICEGENER/SYNCGENR
此公用程式程式模擬 z/OS 系統公用程式 ICEGENER 的行為,它會將資料集從輸入 (SYSUT1 資料集) 複製到輸出 (SYSUT2 資料集)。此 Java 實作提供同等功能,同時支援檔案系統和 Bluesam 儲存。
Parameters
無引數
必要的資料集
SYSUT1:輸入資料集/檔案
SYSUT2:輸出資料集/檔案
SYSUT2 資料集的處置處理
新功能:建立新的資料集/檔案
OLD/SHR:使用現有的資料集/檔案 (必須存在)
MOD:修改,如果遺失則建立,如果存在則附加
錯誤處理
如果複製成功,請設定錯誤代碼 0;如果失敗,請設定 1
拋棄
IllegalStateException無效使用 Bluseam 資料集
範例用量
以下是透過 AWS 轉換進行 JCL 現代化所產生的 ICEGENER 程式的 Groovy 範例用量:
JCL 程式碼:
//STEP01 EXEC PGM=ICEGENER //SYSUT1 DD DSN=POI.INPUT,DISP=SHR //SYSUT2 DD DSN=POI.OUTPU, // DISP=(,CATLG,DELETE), // UNIT=3490, // DCB=(RECFM=FB,LRECL=100) /*
和相符的 Groovy 現代化:
mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .bluesam("SYSUT1") .dataset("POI.INPUT") .disposition("SHR") .build() .bluesam("SYSUT2") .dataset("POI.OUTPU") .normalTermination("CATLG") .abnormalTermination("DELETE") .build() .getFileConfigurations()) .withParameters(params) .runProgram("ICEGENER")
IDCAMS/KQCAMS
此公用程式程式模擬舊版程式 IDCAMS 的行為,這是用於 VSAM (虛擬儲存存取方法) 檔案操作的大型主機資料管理工具。它會處理舊版 IDCAMS 命令,維護與原始 SYSIN 輸入相同的語法。
Context
您可以透過 中定義的兩個參數來設定程式行為application-utility-pgm.yml:
jclType:JCL 類型識別符 (vse 或 mvs)。如果非 vse jcl 的檔案為空,IDCAMS 公用程式 PRINT/REPRO 命令會傳回 4
forcedCharsetIdcams:IDCAMS 處理的選用字元集覆寫
Parameters
無引數。操作會透過 SYSIN 資料集傳遞。
必要的資料集
SYSIN - 包含 IDCAMS 命令陳述式
輸入/輸出資料集 - 如 IDCAMS 命令中所參考 (取決於 IDCAMS 陳述式)
主要功能/支援的命令
此處不提供 SYSIN 控制卡中 IDCAMS 命令的詳細資訊,但應從現有的相關舊版平台文件中擷取。
DEFINE - 建立 VSAM 叢集和資料集
DELETE - 移除資料集 (支援萬用字元)
REPRO - 在資料集之間複製資料
列印 - 顯示資料集內容
VERIFY - 驗證資料集是否存在和完整性
ALTER - 修改資料集屬性 (重新命名)
ALLOC - 動態配置資料集
SET - 管理條件代碼 (LASTCC/MAXCC)
IF-THEN-ELSE - 條件式命令執行
CANCEL - 終止任務執行
錯誤處理
如果最後一個命令成功,請設定錯誤碼 0;如果失敗,請設定 -1
SET (LASTCC) 命令可用來覆寫錯誤碼,例如
SET LASTCC = 0
範例用量
以下是透過 AWS 轉換進行 JCL 現代化所產生的 IDCAMS 程式的 Groovy 範例用量:
JCL 程式碼:
//STEP15 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //ACCTDATA DD DISP=SHR, // DSN=AWS.M2.CARDDEMO.ACCTDATA.PS //ACCTVSAM DD DISP=SHR, // DSN=AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS //SYSIN DD * REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM) /*
和相符的 Groovy 現代化:
mpr.withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .systemOut("SYSPRINT") .output("*") .build() .bluesam("ACCTDATA") .dataset("AWS.M2.CARDDEMO.ACCTDATA.PS") .disposition("SHR") .build() .bluesam("ACCTVSAM") .dataset("AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS") .disposition("SHR") .build() .fileSystem("SYSIN") .stream("REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM)", getEncoding()) .build() .getFileConfigurations()) .withParameters(params) .runProgram("IDCAMS")
IEBGENER/JSDGENER
此程式會複寫 IEBGENER 公用程式。它用於複製和操作循序資料集。此實作支援進階資料處理操作的 IEBGENER 控制陳述式,以擴展基本的複製功能。
Parameters
無引數。操作會透過 SYSIN 資料集傳遞。
必要的資料集
SYSIN:包含控制項陳述式 (選用,如果未定義,則 IEBGENER 程式與 ICEGENER 相同)
SYSUT1:輸入資料集/檔案
SYSUT2:輸出資料集/檔案
主要功能/支援的 IEBGENER 控制陳述式
此處不提供 SYSIN 控制卡中 IEBGENER 控制陳述式的詳細資訊,但應從現有的相關舊版平台文件中擷取。
GENERATE - 透過指定要處理的記錄類型 (MAXNAME) 和欄位 (MAXFLDS) 數目上限,定義資料處理程序的整體結構
記錄 - 透過指定將從輸入資料集複製或以特定值產生之個別欄位的位置、長度和格式,定義每個記錄類型的實際配置和內容
不支援 LABEL/MEMBER/EXIT
範例:
GENERATE MAXNAME=3,MAXFLDS=5 RECORD TYPE=1, FIELD=(1,1,CH,VALUE='H'), FIELD=(2,30,CH,VALUE='EMPLOYEE REPORT 2024 ') RECORD TYPE=2, FIELD=(1,1,CH,VALUE='D'), FIELD=(2,10,CH), /* Name */ FIELD=(12,8,CH), /* Birth date */ FIELD=(20,8,CH,VALUE='ACTIVE') RECORD TYPE=3, FIELD=(1,1,CH,VALUE='F'), FIELD=(2,30,CH,VALUE='END OF REPORT ')
錯誤處理
如果複製成功,請設定錯誤代碼 0;如果失敗,請設定 1。
範例用量
以下是透過 AWS 轉換進行 JCL 現代化所產生的 IEBGENER 程式的 Groovy 範例用量:
JCL 程式碼:
//GENDATA EXEC PGM=IEBGENER //SYSUT1 DD DSN=INPUT.EMPLOYEE.DATA, // DISP=SHR //SYSUT2 DD DSN=OUTPUT.EMPLOYEE.FILE, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920) //SYSIN DD * GENERATE MAXNAME=2,MAXFLDS=5 RECORD TYPE=1, FIELD=(1,1,CH,VALUE='H'), FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024 ') RECORD TYPE=2, FIELD=(1,1,CH,VALUE='D'), FIELD=(2,10,CH), /* Name from input */ FIELD=(12,8,CH), /* Birth date from input */ FIELD=(20,8,CH), /* Dept from input */ FIELD=(28,8,CH) /* Salary from input */ /*
和相符的 Groovy 現代化:
mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .systemOut("SYSPRINT") .output("*") .build() .bluesam("SYSUT1") .dataset("INPUT.EMPLOYEE.DATA") .disposition("SHR") .build() .bluesam("SYSUT2") .dataset("OUTPUT.EMPLOYEE.FILE") .disposition("NEW") .normalTermination("CATLG") .abnormalTermination("DELETE") .build() .fileSystem("SYSIN") .stream( """GENERATE MAXNAME=2,MAXFLDS=5 RECORD TYPE=1, FIELD=(1,1,CH,VALUE='H'), FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024 ') RECORD TYPE=2, FIELD=(1,1,CH,VALUE='D'), FIELD=(2,10,CH), /* Name from input */ FIELD=(12,8,CH), /* Birth date from input */ FIELD=(20,8,CH), /* Dept from input */ FIELD=(28,8,CH) /* Salary from input */""", getEncoding()) .build() .getFileConfigurations()) .withParameters(params) .runProgram("IEBGENER")
IEFBR14
IEFBR14 是一個「什麼都不做」程式,只需傳回傳回的傳回碼為 0 (零)。其主要用途是透過 DD 陳述式進行資料集分配、刪除或目錄維護,而無需執行任何實際的資料處理。
Parameters
無引數
錯誤處理
一律設定錯誤代碼 0。
範例用量
以下是透過 AWS 轉換進行 JCL 現代化所產生的 IEFBR14 程式的 Groovy 範例用量:
建立新循序資料集的 JCL 程式碼:
//STEP1 EXEC PGM=IEFBR14 //NEWSEQ DD DSN=USER.NEW.SEQ.DATA, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(10,5)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
和相符的 Groovy 現代化:
mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .bluesam("NEWSEQ") .dataset("USER.NEW.SEQ.DATA") .disposition("NEW") .normalTermination("CATLG") .abnormalTermination("DELETE") .build() .getFileConfigurations()) .withParameters(params) .runProgram("IEFBR14")
刪除現有資料集的 JCL 程式碼:
//STEP3 EXEC PGM=IEFBR14 //DELDD DD DSN=USER.OLD.DATASET, // DISP=(OLD,DELETE,DELETE)
和相符的 Groovy 現代化:
mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .bluesam("DELDD") .dataset("USER.OLD.DATASET") .disposition("OLD") .normalTermination("DELETE") .abnormalTermination("DELETE") .build() .getFileConfigurations()) .withParameters(params) .runProgram("IEFBR14")
JCLBCICS
此程式會管理資料集狀態,並根據組態啟用/停用資料集,同時支援個別檔案和萬用字元模式:它會變更 JICS 資料表 file_table 中的 STATUS 欄位。
Parameters
無引數。操作會透過DatasetsConfiguration物件傳遞,例如
mpr.withDatasetsConfiguration(new DatasetsConfiguration().close(<Dataset Name>)
Context
程式行為可由兩個參數設定:
在 application-utility-pgm.yml 中:
jclbcics.ddname.size(預設值為 8):它會全域設定資料集名稱大小;如果設定此值且資料集名稱長度小於此值,則會截斷資料集名稱。
在呼叫程式的 Groovy 檔案的個別步驟中
JCLBCICS_OVERRIDDEN_SIZE:它會覆寫全域資料集名稱大小:
TreeMap stepMapTransfo = [:] Map stepParams = ["MapTransfo":stepMapTransfo] stepParams["MapTransfo"]["JCLBCICS_OVERRIDDEN_SIZE"] = '6'
如果調整後的 dd 名稱大小 (截斷後) 小於 8,則 dd 名稱會被視為萬用字元,且函數會針對以此 dd 名稱開頭的所有資料集運作。
主要功能
支援的操作包括:
OPEN:將資料集設定為 ENABLED 狀態
CLOSE:將資料集設定為 DISABLED 狀態
這些操作會透過DatasetsConfiguration建置器類別宣告:
new DatasetsConfiguration().close(<DD name>).open(<DD name>)
DD 名稱:資料集的名稱,如果 dd 名稱大小小於 dd 名稱大小上限 (8),則會接受萬用字元 *。
錯誤處理
設定錯誤代碼 0
範例用量
以下是 JCLBCICS 計劃的 Groovy 範例用量:
它會停用資料集 UFOLJ3P,啟用以 AX 開頭的所有資料集,啟用以 DX 開頭的所有資料集
import com.netfective.bluage.gapwalk.rt.call.MainProgramRunner import com.netfective.bluage.gapwalk.rt.call.ProgramExecutionResult import com.netfective.bluage.gapwalk.rt.io.support.DatasetsConfiguration MainProgramRunner mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) def TreeMap stepMapTransfo = [:] def Map stepParams = ['MapTransfo':stepMapTransfo] stepParams['MapTransfo']['JCLBCICS_OVERRIDDEN_SIZE'] = '7' ProgramExecutionResult res = mpr .withDatasetsConfiguration(new DatasetsConfiguration().close("UFOLJ3P").open("AX*").open("DX")) .withParameters(stepParams) .runProgram("JCLBCICS")