
XMLink提供了一个资源适配器并且支持两种情形的部署场景。J2EE资源适配器不但能够在有应用服务器(比如IBM WebSphere Application Server)的环境中运行,而且能够在独立的Java应用程序中被调用执行。就像J2C架构一样,XMLink架构也同样提供了相应的访问方式:JavaBean、Servlet、JSPs和EJB。
XMLink Tuxedo Adapter允许用户将任何已有的BEA Tuxedo应用无缝地集成到一个Java应用中,无论该应用是否部署在应用服务器上。XMLink只需要标准的Tuxedo配置就能完成相关功能。这使得用户可以方便快捷地访问Tuxedo标准层中的相关服务。
在Tuxedo中,使用IPC(Inter-Process Communication)消息队列等方式实现了在客户端和服务器端之间服务请求的传递。这些消息被封装在相应的缓冲区中。XMLink使用已有的IPC等配置方式,来跟相应的数据缓冲区交互数据,从而连接到Tuxedo的指定服务。
在这个过程中,XMLink就像其它Tuxedo客户端一样,使用ATMI (Application to Transaction Monitor Interface) 层来连接到Tuxedo。相应的,ATMI接口来控制信息交互、事务处理、数据缓冲区管理等功能。

|
代码:/**初始化连接池**/ Context initctx = new InitialContext(); ConnectionFactory connectionFactory = (ConnectionFactory) initctx.lookup("jca/xmlink"); /**建立连接**/ Connection conn = connectionFactory.getConnection(); /**建立一个和tuxedo服务交互的实例**/ Interaction interaction = conn.createInteraction(); /**建立一个交互实例的配置属性对象**/ TuxInteractionSpec tux1 = new TuxInteractionSpec(); /**设置调用的tuxedo服务名**/ tux1.setFunctionName("GETDETAIL"); /**设置调用方式:1-同步/0-异步**/ tux1.setInteractionVerb(1); /**设置超时时间-毫秒**/ tux1.setExecutionTimeout(300); /**定义记录工厂--缓冲区**/ RecordFactoryImpl rdf = (RecordFactoryImpl) connectionFactory.getRecordFactory(); /**定义输入、输出参数**/ /**定义传输类型为FML32类型**/ FML32Record rc = (FML32Record) rdf.createMappedRecord("FML32"); /**往缓冲区压入业务输入参数*/ rc.addIn("COUNT",count); rc.addIn("SATIME",satime); /**获取输出结果*/ System.out.println("step 1......"); FML32Record ret = (FML32Record) interaction.execute(tux1, rc); System.out.println("step 2......"); /**中文字符集转换*/ ret.setEncoding("GB2312"); ret.processOutput(0); System.out.println("返回参数个数为:" + ret.size()); System.out.println("用户姓名:" + ret.getField("USRNAME").get(0)); System.out.println("用户卡号:" + ret.getField("COUNT").get(0)); System.out.println("用户存款记录:"); /*取得用户所有存款记录*/ Iterator it = ret.getField("SAID").listIterator(); Iterator it1 = ret.getField("SAADDR").listIterator(); Iterator it2 = ret.getField("SATIME").listIterator(); List all=new ArrayList(); while(it.hasNext()) { Sale use=new Sale(); use.setSaid((String)(it.next())); use.setSaaddr((String)(it1.next())); use.setSatime((String)(it2.next())); all.add(use); } interaction.close(); conn.close(); |
|
代码: /**指定调用的Tuxedo服务名:GETDETAIL*/ TranInDataBean ccx = new TranInDataBean("GETDETAIL"); /**压入输入参数:COUNT,1*/ ccx.setField("COUNT", "1"); /**压入输入参数:SATIME,2001/03/19*/ ccx.setField("SATIME", "2001/03/19"); /*调用Tuxedo服务,得到服务结果*/ TranOutDataBean ut = dd.callSyncService(ccx); /*从服务结果读取所需数据*/ List flds=out.getFields(); for (int i = 0; i < flds.size(); i++) { CommonField cf=(CommonField)flds.get(i); String fldName = cf.getFldName(); String fldValue =cf.getFldValue(); System.out.println( "fldName:" + fldName + "\t" + "fldValue:" + fldValue); } |
我们定义的配置文件callprops.properties格式如下:
|
代码:#calltype:0表示容器环境,无须配置其他属性;1表示非容器环境,需要配置其他属性 calltype=1 #calltype=0时需要配置的其他属性如下: namecontxtfac=com.ibm.websphere.naming.WsnInitialContextFactory contxturl=iiop://localhost:2809 xmlinkjndi=jca/xmlink #calltype=1时需要配置的其他属性如下: WSNADDR=//192.168.102.1:7898 TUXCONFIG=D:\\simpappFML\\tuxconfig FLDTBLDIR= FLDTBLDIR32=D:\\simpappFML FIELDTBLS= FIELDTBLS32=user.fld |
|
代码:OBJLISTDocument d = OBJLISTDocument.Factory.newInstance(); OBJLISTDocument.OBJLIST bj = od.addNewOBJLIST(); /*设定Tuxedo服务名*/ obj.setService("GETDETAIL"); /*增加新的COUNT字段值*/ Fldtype ft = obj.addNewCOUNT(); ft.setStringValue("2"); /*增加新的SATIME字段值*/ ft = obj.addNewSATIME(); ft.setStringValue("2001/03/19"); /*将用户可以识别的DataBean转化为Tuxedo可以识别的Bean*/ TranInDataBean ccx = AutoFormat.xmlTransIn(od); /*调用Tuxedo服务*/ String input = ccx.getDocumentString(); String utput = CallTuxService.getXmlinkService(input); /*从Tuxedo服务结果抽取自己所需的数据,这里是USRNAME*/ Document doc = AutoFormat.xmlTransOut(output); XmlOptions xo = new XmlOptions(); Map ns = new HashMap(); ns.put("", "http://xmlbeans.lan.org/myuser"); xo.setLoadSubstituteNamespaces(ns); OBJLISTDocument obj1 = OBJLISTDocument.Factory.parse(doc, xo); System.out.println(obj1.getOBJLIST().getUSRNAME().getStringValue()); |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14789789/viewspace-374505/ ,如需转载,请注明出处,否则将追究法律责任。