客户通过HTTP协议接入TUXEDO,通过中介服务将接入的HTTP协议转换为TUXEDO服务;本节讲述了HTTP-TUXEDO协议转换场景的创建过程,包括创建工程、创建HTTP和TUXEDO协议相关的服务和运行。通过本节你将了解到如下内容:
- 如何创建HTTP-TUXEDO协议转换场景;
- 如何在Studio中测试开发的业务逻辑;
本节中的例子使用Tuxedo自带的"TOUPPER"--即大小写转换(用户输入一串字符,Tuxedo服务端将其转换为全部大写返回);由于服务端是C语言写的,首先按照Tuxedo帮助文档中的步骤,配置服务器、设置正确的IP和端口,编译服务端代码,并启动Tuxedo服务器,ESB采用的是JOLT方式与Tuxedo进行交互。 本示例中通过浏览器模拟调用者,用HTTP请求到达ESB后会转化成为TUXEDO协议所对应的请求服务;由于TUXEDO并不是一个独立的协议,而是属于自定义CUST协议的一种,所以要使用TUXEDO服务,首先创建CUST,在配置中选择TUXEDO。
# 创建工程
打开ESB Studio,在资源管理器中,点击右键,选择"创建->ESB项目"菜单项,创建工程,如下图所示。
在工程创建向导中,填写工程的基本信息,如工程名称等,如下所示。
点击下一步,设置工程的引用库,这里使用缺省设置,如下所示。
点击"完成"按钮,完成创建工程。创建工程后,资源管理器如下所示。
至此ESB项目创建完成。
# 创建公共Module
在资源管理器中,选中project,点击右键,选择"创建->公共Module"菜单项,创建公共Module,如下图所示。
2.在"公共Module"向导中,输入公共Module的相关信息,点击"完成"按钮,创建公共Module,如下图所示。
公共Module创建完毕,展开新创建的公共Module,如下所示。
# 创建Http Transport
1.在资源管理器中,选中新建的公共Module中的"Transport",点击右键,选择"创建->Http类型Transport"菜单项,创建HttpTransport,如下图所示。
2.在"创建Http类型Transport"向导中,输入HttpTransport的相关信息,点击"完成"按钮,创建HttpTransport。
3.HttpTranport创建完毕,展开新创建的HttpTranport,如下所示。
打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
# 创建TUXEDO Endpoint
在资源管理器中,选中新建的公共Module中的"Endpoint",点击右键,选择"创建->CUST类型Endpoint"菜单项,创建CUSTEndpoint,如下图所示。
2.在"创建CUST类型Endpoint"向导中,输入CUSTEndpoint的相关信息,点击"完成"按钮,创建CUSTEndpoint,如下图所示。
打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
上图中的"协议类型"是可以选择的,由于我们创建的时tuxedo服务,所以这里选择TUXEDO。
参数名称 | 描述 |
---|---|
hostName | Tuxedo服务器的IP |
port | 一个十进制的端口数值 |
userRole | Tuxedo的用户角色,(默认为:admin,如果安全要求强制) |
appPassword | Tuxedo 超级管理员的口令 |
username | Tuxedo用户标识,(默认为你的帐户名称,如果安全要求强制) |
userPasswd | Tuxedo 的口令 |
idletimeout | 服务请求超时时间 |
# 创建业务Module
在资源管理器中,选中project,点击右键,选择"创建->业务Module"菜单项,创建业务Module,如下图所示。
在"业务Module"向导中,输入业务Module的相关信息,点击"完成"按钮,创建业务Module,如下图所示。
业务Module创建完毕,展开新创建的业务Module,如下所示。
# 创建TUXEDO业务服务
在资源管理器中,选中新建的业务Module中的"业务服务",点击右键,选择"创建->CUST业务服务"菜单项,创建CUST业务服务,如下图所示。
在"创建CUST业务服务"向导中,输入相应的信息,点击"完成"按钮,完成CUST业务服务的创建,如下图所示。
编辑生成的TUXEDO业务服务的文件。选择刚刚创建的CUSTEndpoint,如下图所示。
在"协议类型"下拉列表中选择TUXEDO。
# 创建JAVA方法
创建Java方法。在资源管理器中右键点击业务Module中的Java,选择"创建->类" 菜单项,如下图所示。
2.在弹出的"新建Java类"向导中输入相应信息后,点击"完成"按钮即可,如下图所示。
- 完整的HelloTuxedo代码如下所示。
package com.nandy.tuxedo;
import java.util.Map;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
public class HelloTuxedo {
public ITipMessagePayload firstTuxedo(ITipMessagePayload mesg){
TipMessageBuilder<Object> mBuilder = TipMessageBuilder.withPayload(mesg.getMessagePayload());
mBuilder.copySystemHeaders(mesg.getSystemHeaders());//放置系统头
mBuilder.setMessageHeaders(mesg.getMessageHeaders()); //设置消息头
@SuppressWarnings("unchecked")
Map<String, Object> protocolHeaders = (Map<String, Object>) mesg.getProtocolHeaders();//设置协议头
protocolHeaders.put("#tuxedo.jolt.service.name", "TOUPPER");
protocolHeaders.put("#tuxedo.jolt.service.prepare", "com.nandy.tuxedo.PrepareClazz");
mBuilder.setProtocolHeaders(protocolHeaders);
ITipMessagePayload message=mBuilder.build();//构建出ITipMessagePayload
return message;
}
}
代码解析: 本实例代码的主要作用是把中介服务中Java图元中传递的参数inMessage进行消息转换,向protocolHeaders中放入需要调用的Tuxedo服务端服务名称,这里的两个Key值是约定好的,不能改动(#tuxedo.jolt.service.name、#tuxedo.jolt.service.prepare),而"com.nandy.tuxedo.PrepareClazz"为下面规则中定义的类的完整路径,此类的报名和类名可以自行定义,向protocolHeaders中put时要特别注意。 规则: 同时需要创建一个类包含以下两个方法,并且该类编写完成后,需要打成jar包,导出到ESB_homelibs public JoltRemoteService prepareParams(JoltRemoteService tuxedoService); public Object prepareResults(JoltRemoteService tuxedoService); 我们该实例是以Tuxedo中的"TOUPPER"服务器代码为例进行讲解,所以给出的规定中该类的示例代码为PrepareClazz.java。
package com.nandy.tuxedo;
import bea.jolt.JoltRemoteService;
public class PrepareClazz {
public JoltRemoteService prepareParams(JoltRemoteService tuxedoService){
tuxedoService.setStringItem("STRING",0, "Yesterday once more!");
return tuxedoService;
}
public Object prepareResults(JoltRemoteService tuxedoService) {
Object obj = tuxedoService.getStringDef("STRING", "");
return obj;
}
}
# 创建中介服务
在资源管理器中,选中新建的业务Module的"中介服务"项,点击右键,选择"创建->中介服务"菜单项,创建中介服务,如下图所示。
在"创建中介服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
生成中介服务,如下图所示。
4.在"中介服务"编辑页面点击"服务编排"链接,进入编排中介服务的界面。在"选用板"中将"JAVA方法"和"CUST业务服务"图元拖拽到右边的编辑区,并用"连接线"依次连接,如下图所示。
5.双击编辑区中的"Java方法"图元,弹出"JAVA方法属性设置"窗口,如下图所示。
在"JAVA方法属性设置"窗口中,点击"浏览...",弹出"选择java方法"窗口,在"选择要打开的类型:"的输入框中输入类名"TUXEDO..",在"匹配的类型"中选中HelloTuxedo ,再选中firstTuxedo方法。
在"JAVA方法属性设置"中设置"参数配置表",如下图所示。
8.双击编辑区中的"CUST业务服务"图元,弹出JMS业务服务的"设置对话框",点击"浏览..."按钮,选择刚创建的CUST业务服务。 9.在"设置对话框"中设置"参数配置表",并点击"确定"按钮,如下图所示。
注意:步骤7中参数的"返回值"和步骤9中的"参数",由于Java图元的返回至是下一个图元的输入参数,所以参数值"outMeg"一定要对应一致,否则会出错。 至此,中介服务创建完成。
# 创建HTTP代理服务
在资源管理器中,选中新建的业务Module的代理服务项,点击右键,选择"创建->HTTP代理服务"菜单项,创建HTTP代理服务,如下图所示。
在"创建HTTP代理服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
在HTTP代理服务的编辑界面中,需要输入"Url"并设置引用的中介服务,如下图所示。
4.至此,HTTP-TUXEDO协议转换场景中所涉及到的开发工作已经完成,可以启动ESB Server,并进行测试。
# 启动和测试
在ESB Studio中启动ESB Server,如下图所示。
这里地址栏中输入的地址,根据工程中配置的具体情况而定,如:ESB Server的IP地址:Transport中配置的端口/代理服务中配置URI 。