客户通过HTTP协议接入APIGateway,通过中介服务将接入的HTTP协议转换为EJB服务。本节讲述了HTTP-EJB协议转换场景的创建过程,包括创建工程、创建HTTP和EJB协议相关的服务和运行。通过本节你将了解到如下内容:
- 如何创建HTTP-EJB协议转换场景;
- 如何在Studio中测试开发的业务逻辑;
首先准备好EJB的测试服务器,本示例采用JBoss-4.2.2.GA,并确保JBoss服务器可在远程通过IP地址访问,将相应的EJB应用jar部署在服务器中,同时将该jar包部署在ESB Server_homelibs中;由于在使用ESB Studio开发相应模型的过程中,需要构造EJB远程调用方法的参数,所以在创建好工程后,需要将开发的EJB jar包导入到工程中。 本示例中通过浏览器模拟调用者,用HTTP请求到达APIGateway后会转化成为EJB协议所对应的请求服务。
# 创建工程
ESB Studio,在资源管理器中,点击右键,选择"创建->ESB项目"菜单项,创建工程,如下图所示。
在工程创建向导中,填写工程的基本信息,如工程名称等,如下所示。
点击下一步,设置工程的引用库,这里使用缺省设置,如下所示。
点击"完成"按钮,完成创建工程。创建工程后,资源管理器如下所示。
至此ESB项目创建完成。
# 创建公共Module
1.在资源管理器中,选中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,如下所示。
打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
# 创建EJB Endpoint
在资源管理器中,选中新建的公共Module中的"Endpoint",点击右键,选择"创建->EJB类型Endpoint"菜单项,创建EJBEndpoint,如下图所示。
2.在"创建EJB类型Endpoint"向导中,输入EJBEndpoint的相关信息,点击"完成"按钮,创建EJBEndpoint,如下图所示。
打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
参数名称 参数描述 上下文工厂 不同的EJB server需要配置不同的工厂串 提供着URL EJB Server的地址和端口 提供着JNDI EJB调用的JNDI 用户名 EJB Server的口令(如果安全要求强制) 密码 EJB Server的登录密码,(如果安全要求强制) 调用接口 EJB对应的jar包所调用的远程接口 方法 EJB对应的jar包所调用的远程方法
# 创建业务Module
在资源管理器中,选中project,点击右键,选择"创建->业务Module"菜单项,创建业务Module,如下图所示。
在"业务Module"向导中,输入业务Module的相关信息,点击"完成"按钮,创建业务Module,如下图所示。
业务Module创建完毕,展开新创建的业务Module,如下所示。
# 创建EJB业务服务
在资源管理器中,选中新建的业务Module中的"业务服务",点击右键,选择"创建->EJB业务服务"菜单项,创建EJB业务服务,如下图所示。
在"创建EJB业务服务"向导中,输入相应的信息,点击"完成"按钮,完成EJB业务服务的创建,如下图所示。
编辑生成的EJB业务服务的文件。选择刚刚创建的EJBEndpoint,如下图所示。
# 创建JAVA方法
创建Java方法。在资源管理器中右键点击业务Module中的Java,选择"创建->类" 菜单项,如下图所示。
2.在弹出的"新建Java类"向导中输入相应信息后,点击"完成"按钮即可,如下图所示。
3.完整的EJBBusiness代码如下所示。
package com.primeton.esb.ejb;
import com.ejb.model.Address;
import com.ejb.model.Person;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
public class EJBBusiness {
public ITipMessagePayload convertBusiness(ITipMessagePayload msg) {
Object[] a = new Object[2];
a[0] = "nandy+abc";
Address add = new Address("山西省", "西安市", "高新区", "唐延路", "710075");
Person p = new Person("王三三", "03E10917", add);
a[1] = p;
msg.getMessagePayload();
TipMessageBuilder<Object[]> mBuilder = TipMessageBuilder.withPayload(a);
mBuilder.copySystemHeaders(msg.getSystemHeaders());// 放置系统头
mBuilder.setMessageHeaders(msg.getMessageHeaders());// 设置消息头
mBuilder.setProtocolHeaders(msg.getProtocolHeaders());// 设置协议头
ITipMessagePayload newPayload = mBuilder.build();// 构建出ITipMessagePayload
return newPayload;
}
}
代码解析: 本段源代码的主要功能是构造EJB调用远程方法的参数值,由于远程接口的参数类型为String和Person(自定义类型),所以我们在方法开始构造对象数组a[2],这里注意,参数放入数组的顺序应该和方法中参数类型的排列顺序相同。
# 创建中介服务
在资源管理器中,选中新建的业务Module的"中介服务"项,点击右键,选择"创建->中介服务"菜单项,创建中介服务,如下图所示。
在"创建中介服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
生成中介服务,如下图所示。
4.在"中介服务"编辑页面点击"服务编排"链接,进入编排中介服务的界面。在"选用板"中将"JAVA方法"和"JAVA业务服务"图元拖拽到右边的编辑区,并用"连接线"依次连接,如下图所示。
5.双击编辑区中的"Java方法"图元,弹出"JAVA方法属性设置"窗口,如下图所示。
6.在"JAVA方法属性设置"窗口中,点击"浏览...",弹出"选择java方法"窗口,在"选择要打开的类型:"的输入框中输入类名"EJB..",在"匹配的类型"中选中EJBBusiness,再选中convertBusiness方法. 7. 在"JAVA方法属性设置"中设置"参数配置表",如下图所示。
8.双击编辑区中的"EJB业务服务"图元,弹出JMS业务服务的"设置对话框",点击"浏览..."按钮,选择刚创建的EJB业务服务。 9.在"设置对话框"中设置"参数配置表",并点击"确定"按钮,如下图所示。
注意:步骤7中参数的"返回值"和步骤9中的"参数",由于Java图元的返回至是下一个图元的输入参数,所以参数值"outMeg"一定要对应一致,否则会出错。 至此,中介服务创建完成。
# 创建HTTP代理服务
在资源管理器中,选中新建的业务Module的代理服务项,点击右键,选择"创建->HTTP代理服务"菜单项,创建HTTP代理服务,如下图所示。
在"创建HTTP代理服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
在HTTP代理服务的编辑界面中,需要输入"UrlPattern"并设置引用的中介服务,如下图所示。
4.至此,HTTP-EJB协议转换场景中所涉及到的开发工作已经完成,可以启动ESB,并进行测试。
# 启动和测试
1.在ESB Studio中启动ESB Server,如下图所示。
通过浏览器发送HTTP请求,ESB返回请求对应的响应,如下图所示。
这里地址栏中输入的地址,根据工程中配置的具体情况而定,如:ESB Server的IP地址:Transport中配置的端口/代理服务中配置URI。 注意:如果在启动正常,通过浏览器访问时报错,请确认是否将jboss-4.2.2.GAclient中的jbossall-client.jar已经拷贝到ESB Server_home\libs中。