最近在學習CICS的時候,沒人指點,走了不少彎路。在大機和CICS中,很多概念和x86和linux、windows等通用平台以及J2EE架構中的一些概念不盡相同。
這里列舉出一些對初學者特別重要的概念,並且以通用平台的概念作為類比,希望對新了解大機和CICS的朋友有些幫助。
- 預備
首先說說CICS和Mainframe(大機)的關系。通常對CICS的定義,都是說:CICS是運行在z/OS上的 交易中間件。其實它不只提供了Transaction管理功能。
在學習CICS之前,首先要搞清楚Transaction指的是什么。CICS是一個很古老的系統。Transaction在這里稱為“交易”。一個交易就是通過終端或其他系統發起的一個業務操作。請注意與我們平時說的“事務”區分。“事務”是具有ACID特性的一系列操作。在CICS中,LUWs(Logical Unit of Works)才是對應“事務”的概念。一個交易包含一個或多個LUWs。但一般來說,一個交易只有一個LUWs。
CICS這個中間件有點兒大。CICS除了能做Transaction管理,還對操作系統封裝了一層,提供了內存操作、隊列、線程等等的API。只要是用CICS API編寫的程序,就能很容易的移植到不同的CICS容器中。現在的CICS容器,除了大機的標准CICS軟件外,還有TXSeries,和MicroFocus Enterprise Sever,這兩種都提供了x86通用服務器上的CICS環境方案。
CICS的核心部件,是TS(Transaction Server)。Transaction之於TS,相當於Application之於AS。
- 入門必看概念
Region: 一個Region相當於CICS中的一個交易服務器實例。Region之間是有隔離性的。多個Region之間可以實現業務級別的負載均衡。Region中需要配置其使用到的各種資源。CICS程序中使用到的Program,Transactoin,File,數據庫等都是資源,都需要在Region中配置。
Program: 程序,就是用CICS語句或者宿主語言編寫的進行業務操作的可加載模塊。程序之間可以通過CICS API互相調用。
Transaction: 交易,由用戶(終端)發起動作,完成一種特定請求。每個Transaction需要有一個ID. 終端通過這個ID來調用指定的Transaction。
Task: 任務,是一個交易(Transaction)的一次具體執行過程。交易是靜態的定義,任務則是動態的實例。任務和交易的關系,類似微機中程序和進程的關系。需要說明的是,Task並不是原生的操作系統進程或線程,而是CICS實現的
。CICS使用TASK-SWITCHING技術,控制task的執行,進行task調度。
LUWs:Logical Unit Of Work,有的地方也寫成UOW。一個LUWs就是一個事務。LUWs是CICS中恢復的基本單位。一個LUWs要具備ACID特性。一個交易一般都是一個LUWs。但是由於業務需要,有些交易會設計成多個LUWs。一個包含多個LUWs的交易失敗或系統故障時,已經commit的LUWs是不會被恢復的。
Logic Unit: 邏輯單元LU。VTAM中關於數據傳輸斷點的屬於。一個LU可以是終端,也可以是主機系統。VTAM有7種終端類別。
- CICS Region中幾個重要的配置表
PPT: Program Process Table,這個表中注冊了所有可用的程序(Program),每個配置項包括Program名字及其對應的二進制文件(如:在MicroFocus中就是DLL)。
PCT: Program Control Table,這個表注冊了所有的交易(Transaction),每個配置項包括交易ID(1~4個字符),以及其對應的入口主程序名稱。
當終端或外部系統通過一個交易ID請求一個事務,CICS先用交易ID查詢PCT表,得到程序名,然后再查PPT表,之后便開始執行程序。
除了PPT,PCT,CICS中還有很多資源類型。由於本篇只是入門,就不一一贅述了。
- CICS編程模型
CICS中,交易是一級公民。因此在系統設計是,必須對一個個交易做好設計。