转自:http://blog.csdn.net/chaozhiping/archive/2006/05/29/759949.aspx
原创作者:晁智平 (如转贴请保留这行)
由于公司的CICS服务器是AIX的操作系统,不方便回家学习,所以想在2000下安装一下CICS服务程序。
虽然已经开发了近一年的CICS中间层的程序了,但大部分底层的代码都被封装好了,开发时的确很容易,可对真正的CICS的运作机制不是很清楚,于是在安装前阅读了关于CICS的一些文章。其中收益最大的是IBM网站的Txseries NT 中文版及刘睿的easycics相关的文章。结果发现在文章的最近居然有我们技术总监的名字。大概总结一下有以下几点:
1:CICS是基于事务的中间件同Tuexdo相同,而MQ是基于消息的中间件。
2:由于历史上的原因(主要开始不是IBM开发的)CICS用到了Encina的一些代码,而Encina又利用了DCE的代码。所以在安装CICS服务端之前必需要安装DCE,(Encina是和CICS在一起的)。
3: CICS服务器又分两大类:一是普通的连接方式,另外一种是支持XA协议(XA是一种标准,其功能是将本地程序的操作看成一个事务,可以回退本次程序中所以的数据库操作),而支持XA的在启动时会和数据库建立连接。CICS又支持两种XA,一是两阶段提交,即要先prepare,再commit,另外一种是一阶段提交,只做commint。
4:在CICS服务器上运行的程序是内嵌在cicsas进程中的,cicsas是服务器启动时生成的进程。程序动行完之后会让出cicsas以便其它的进程来运行。注意的是cicsas并不会退出,所以在XA的环增中,对数据库运行环境的修改应在退出之前恢复,否则会对后来的程序产生影响。
5:CICS提供的一些API函数供调用,但相对来说比较复杂,而easycics便是对这些复杂的API封装后的结晶。使得CICS现在仍有一小部分的市场。
得知以上几点CICS的性质后,就准备以下的必要的安装软件
1:Txseries Nt 4.3其中包括CICS,和Enina
2:DCE2.2
3:informix client 2.7
4:Txseries和DCE的最新prf(pack)
首先安装DCE2.2 for nt,但在安装的过程中总是报netbios interface must be install,起初以为是杀毒软件的问题。于是卸载了杀毒软件。还是不行,又去IBM网站上查看关于CICS FOR NT 的文档,说在安装前要先安装NETBIOS服务。(这个是NT操作系统下的操作),于是在2000下将所有的协议,服务都安装上去了发理还是不行。历经几天的查找,最后在IBM网站的一个文档中找到了解决的方法。原来是要先设置环境变量先。设置如下 DCEKitDebug=-NoChecks COPYCMD=/Y。搞定后安装Txseries,然后再打上PACK,安装就基本结束。
接下了需要做的是配置CICS。
安装的详细说明
1:安装DCE2.2之后重启。
2:再安装TXSERIES4.3其中在安装过程中后报一个错误不用理会,按OK继续,重启。
3:打补丁顺序依次为DCE,CICS,ENCINA重启N次。
4:创建DCE:
cicscp -v create dce -R
创建SFS_Server:
cicscp -v create sfs_server /.:/cics/sfs/MARS
启动SFS_Server:
cicscp -v start sfs_server /.:/cics/sfs/MARS
注:第一次启动时后报无法访问类 ssd 的运行时数据库节文件没关系。
创建区域(region):
cicsdefault -r Test -S
cicsupdate -c rd -r Test DefaultFileServer=/.:/cics/sfs/MARS
cicscp -v start region Test StartType=cold
请注意大小写,参数是区分大小写的。用cicstail -r Test查看日志,如果有
CICS已成功启动则说明非XA的CICS安装成功。TXSERIES管理界面上的状态有时
候不准确。
5:创建XA连接的CICS。
XA连接的CICS是指在CICS启动子进程时就连接数据并启动一个事务。为编写中间层程序减少
了一定的工作量。CICS是通过开关装入文件(switch load file)按约定好的接口调用以达到连接数
据库的目的。所以如何生成switch load file 是最重要的环节。在CICS目录的scr/example下有db2,
oracle生成开关装入文件的源代码,编译的时候只需注意一下路径就行了。下面举的例子是如何
生成informix的开关装入文件。
a:首先安装informix client和encina的开发包。
b:再查看一下db2的源代码,因为informix和db2都是IBM的产品,想必相似性会非常大。发现源代
码里的内容并不复杂,大体上是提供了几个方法以供CICS调用,于是将db2的源代码拷过来,
然后将框架拷贝过来。根据ESQL的语法将源代码的实现部分替代掉(也可以参数AIX的CICS版本
在CICS目录的src\example\RM_support\Informix下面有inform1pc.ec)。编译的时候需要增加的include
目录为informix/incl/esql,cics/include,encina/include.需要增加的lib目录为informix/lib,cics/lib,encina/lib,
需要增加的引用lib为isqlt09a.lib libcicsrt.lib libEncina.lib regxa_swxa.obj libEncServer.lib。由于开关装入
文件是以DLL形式使用的所以Use run-time library 要选 Multithreaded DLL,即编译选项为/MD。需要注
意的一点是开关装入文件的函数调用方式必须要是__cdecl否则在启动的时候会产生异常。编译的时
候会在struct xa_switch_t noxaswitch 后的那几个函数处报调用类型不匹配的错误。(可能是我的PACK
不够新)这样就要修改encina\include\tmxa\xa.h内的struct xa_switch_t {定义里ENCINA_XA_CALLING的改
为__cdecl。生成成功后将其拷入CICS目录内。
c:在增加的CICS域上增加产品,将开关装入文件加进来,初始化字符串就是在开关装入文件中的
no_xa_open方法的参数,反正能连上数据库就行这里用的是test@ontest。完成后单击永久就OK了,
当然还可以用命令的方式来添加,这里我就不详细描述了。还要配置环增变量,在
var/cics_region/Test/environment下增加两行,INFORMIXSERVER=ontest,INFORMIXDIR=$(INFORMIX)
(客户端的安装路径)。
d:用启动CICS域的命令启动CICS,发现有连接到 'Single Phase Informix',XA OPEN 已完成,并CICS启动
成功则说明已成功建立XA的CICS连接的域了。
欢迎共同学习chaozhiping1亿唐邮箱 晁智平。
没有评论:
发表评论