7. 答案
(1)修改ECI v1示例源代码,客户端应用发送消息:”Hello, I am client!“,服务器程序响应:”Receive: Hello, I am client! Response: Hello, I am server!“。
服务器端,(9.119.154.229,只有TXSeries服务器):
#cicsadd -c pd -r RGN1 HELO PathName=helloprg RSLKey=public
#cicsadd -c ld -r RGN1 LSN1 Protocol=TCP TCPService=test_43211
#vi /etc/services
添加:test_43211 43211/tcp
客户端(CTG和客户端应用程序):
#vi /etc/profile
添加:export CICSCLI=/opt/ibm/cicstg/bin/cicstg.ini
#. /etc/profile
#vi /opt/ibm/cicstg/bin/cicstg.ini
添加如下内容:
SECTION SERVER = RGN1
PROTOCOL=TCPIP
NETNAME=9.119.154.229
PORT=43211
ENDSECTION
#cicscli -s=RGN1
生成应用程序(请查看”/Unit 4/Exercise 1/“中的源代码):
对于服务器程序”helloprg“:
#cicstcl -lC -e -d helloprg.ccs
对于客户端应用”client“:
#make -f client.mk
测试:
./client
如果一切正常,会出现下列消息(服务器列表可能会不同):
CICS Transaction Gateway Basic ECI V1 Sample
Servers defined in the Client daemon:
1.PRD
2.IMAT
3.DB2
4.ORACLE
5.RGN1
Choose server to connect to:
5
Send Message:Hello, I am client!
Program HELO returned with data: Receive:Hello, I am client! Response:Hello, I am server!
(2)修改ECI v2示例源代码, 客户端应用发送消息:”Hello, I am client!“,服务器程序响应:”Receive:Hello, I am client! Response:Hello, I am server!“。
服务器端(9.119.154.229,TXSeries服务器和CTG):
#cicsadd -c pd -r RGN1 HELO PathName=helloprg RSLKey=public
#cicsadd -c ld -r RGN1 LSN1 Protocol=TCP TCPService=test_43211
#vi /etc/services
添加:test_43211 43211/tcp
#vi /etc/profile
添加:export CICSCLI=/opt/ibm/cicstg/bin/cicstg.ini
#. /etc/profile
#vi /opt/ibm/cicstg/bin/cicstg.ini
向GATEWAY部分添加如下两行:
protocol@tcp.handler=com.ibm.ctg.server.TCPHandler
protocol@tcp.parameters=connecttimeout=2000;idletimeout=600000;pingfrequency=60000;port=2006;bindsolinger=0;
#cicscli -s=RGN1
#ctgstart
客户端(只有客户端应用):
不需要配置。
生成应用程序(请查看”/Unit 4/Exercise 2/“中的源代码):
对于服务器程序”helloprg“:
#cicstcl -lC -e -d helloprg.ccs
对于客户端应用”client“:
#make -f client.mk
测试:
./client
如果一切正常,会出现下列消息:
CICS Transaction Gateway Basic ECI V2 Sample
Usage: client [host name] [port number]
Connected to CICS TG on 9.119.154.229 using port 2006
Servers returned from CICS TG:
1. RGN1 –
Choose server to connect to, or q to quit:
1
An ECI_ERR_SECURITY_ERROR error occurred
Enter your CICS user ID:
a
Enter your CICS password or password phrase:
a
Program HELO returned with data: Receive:Hello, I am client! Response:Hello, I am server!
Closed connection to CICS Transaction Gateway
client completed successfully
TXSeries入门系列文章–单元五
交互通信
五单元 交互通信
关于本单元
region间通信指的是不同region之间互相通信——本地region可以访问其他远程region中的服务,或为远程region提供本地服务。所以多个region可以共享CICS服务从而使得整个系统更有效率。在本单元中,将介绍DPL(Distributed program link) 和FS(Function Shipping)的配置和编程,也会介绍一个新的API“LINK“和”READ“的另一种用法。
1. Distributed program link
(1)什么是DPL
“EXEC CICS LINK“命令允许一个程序链接到其他程序——当使用这条命令时,控制权会被传递给指定的第二个程序(被链接程序)。当第二个程序完成后,控制权会被交还给第一个程序(链接程序),并完成”EXEC CICS LINK“命令后的剩余逻辑。
如果链接程序和被链接程序位于同一region,这就是普通的程序链接。通过扩展”EXEC CICS LINK“,被链接程序(后端程序)可以位于远程region,这就是DPL。
此外,两个程序可以通过COMMAREA传递数据。
DPL可以分离用户接口和业务逻辑,并获得性能收益,因为它更容易获取资源,而且访问数据库的程序也可以分割成更小的程序以减少复杂度和调试时间。
(2)配置DPL
本节会给用户一个简单的示例配置,请遵循这些指令并根据实际环境进行配置。
在开始之前,请在两个不同的机器上(或在同一机器上,但为了便于学习推荐前一种)创建两个region,regionA作为本地region,regionB作为远程region。
a. 向regionA添加链接程序的PD,TD
为了测试DPL, 需要为链接程序添加程序定义(PD)和交易定义(TD)。链接程序将向COMMAREA中放入数据,然后通过”EXEC CICS LINK“命令链接后端程序并通过COMMAREA获得返回数据。下一节将介绍DPL编程的详细信息。
b. 向regionA添加LD
监听器定义(LD)指定被regionA监听的端口号和regionA接收请求的地址。这个定义会在稍后被远程region使用与本地region通信。
语法
cicsadd -c ld -r <regionA’s name> <LD entry name> Protocol=TCP TCPAddress=<regionA’s address> TCPService=”<TCP service name>”
选项
<regionA’s address>: 当regionB中的后端程序返回控制权时,这个地址会被用来与regionA通信。
<TCP Service name>: 在”/etc/services“文件中定义的服务名称。
本步骤中不要忘记在”/etc/services“文件中定义TCP服务名称和端口号。
参阅:
http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_listnr_defns.html?lang=en
c. 向regionA添加CD
通信定义(CD)描述与CICS region通信的其他region的配置,包括 CICS家族其他产品。每个CD描述一个远程region。在本单元,CD会定义与regionB的通信。
语法
cicsadd -c cd -r <regionA’s name> <CD entry> ConnectionType=cics_tcp
RemoteLUName=”<regionB’s name>” RemoteTCPAddress=<regionB’s address>
RemoteTCPPort=<port listened by regionB> ListenerName=”<regionA’s LD entry name>”
选项
RemoteLUName: 如果连接类型是cics_tcp,RemoteLUName是远程region的APPLID。在本示例中,会使用regionB的名称。
RemoteTCPAddress: 远程region所在机器的IP地址。
RemoteTCPPort: 远程region监听的端口号。
以下文章点击率最高
Loading…