客户通过HTTP协议接入APIGateway,通过中介服务将接入的HTTP协议转换为EJB服务。本节讲述了HTTP-EJB协议转换场景的创建过程,包括创建工程、创建HTTP和EJB协议相关的服务和运行。通过本节你将了解到如下内容:

  1. 如何创建HTTP-EJB协议转换场景;
  2. 如何在Studio中测试开发的业务逻辑;

首先准备好EJB的测试服务器,本示例采用JBoss-4.2.2.GA,并确保JBoss服务器可在远程通过IP地址访问,将相应的EJB应用jar部署在服务器中,同时将该jar包部署在APIGateway ESBServer_homelibs中;由于在使用APIGateway Studio开发相应模型的过程中,需要构造EJB远程调用方法的参数,所以在创建好工程后,需要将开发的EJB jar包导入到工程中。 本示例中通过浏览器模拟调用者,用HTTP请求到达APIGateway后会转化成为EJB协议所对应的请求服务。

# 创建工程

  1. APIGateway Studio,在资源管理器中,点击右键,选择"创建->ESB项目"菜单项,创建工程,如下图所示。
    worddav8395c08861953fc38c496916fa375326.png

  2. 在工程创建向导中,填写工程的基本信息,如工程名称等,如下所示。
    worddav7b799bc2ac87a46b625efbbf92eb6267.png

  3. 点击下一步,设置工程的引用库,这里使用缺省设置,如下所示。
    worddav93d8d9ee8a74a21ee316e46707c12c56.png

  4. 点击"完成"按钮,完成创建工程。创建工程后,资源管理器如下所示。
    worddavbd5ef58666831842bf0f7aa9b79f6b4e.png

  5. 至此ESB项目创建完成。

# 创建公共Module

1.在资源管理器中,选中project,点击右键,选择"创建->公共Module"菜单项,创建公共Module,如下图所示。
worddav86a0f7a9d124b122ae69d113194b0502.png

2.在"公共Module"向导中,输入公共Module的相关信息,点击"完成"按钮,创建公共Module,如下图所示。
worddav37fb2ee7bbab6514b8e45aa95a367a9d.png

  1. 公共Module创建完毕,展开新创建的公共Module,如下所示。
    worddavfb1071ab8be7da2f154fd0f39510ad5b.png

# 创建Http Transport

1.在资源管理器中,选中新建的公共Module中的"Transport",点击右键,选择"创建->Http类型Transport"菜单项,创建HttpTransport,如下图所示。
worddavbd8e4498ee588dc33070d023e8234743.png

2.在"创建Http类型Transport"向导中,输入HttpTransport的相关信息,点击"完成"按钮,创建HttpTransport。
worddavc25a55dd14522dcab31f384491527f49.png

3.HttpTranport创建完毕,展开新创建的HttpTranport,如下所示。
worddav557e07d57ecb0ca4de8bbff6b6a95935.png

  1. 打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
    image2020-7-10 16:46:47.png

# 创建EJB Endpoint

  1. 在资源管理器中,选中新建的公共Module中的"Endpoint",点击右键,选择"创建->EJB类型Endpoint"菜单项,创建EJBEndpoint,如下图所示。
    worddav88f1edd1ab81405e969db02ea9019332.png

2.在"创建EJB类型Endpoint"向导中,输入EJBEndpoint的相关信息,点击"完成"按钮,创建EJBEndpoint,如下图所示。
worddav6cc4d1b6e9853b3363646b6c86c7b065.png

  1. 打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
    worddav9162d591114df689413b7b709593a894.png
参数名称 参数描述
上下文工厂 不同的EJB server需要配置不同的工厂串
提供着URL EJB Server的地址和端口
提供着JNDI EJB调用的JNDI
用户名 EJB Server的口令(如果安全要求强制)
密码 EJB Server的登陆密码,(如果安全要求强制)
调用接口 EJB对应的jar包所调用的远程接口
方法 EJB对应的jar包所调用的远程方法

# 创建业务Module

  1. 在资源管理器中,选中project,点击右键,选择"创建->业务Module"菜单项,创建业务Module,如下图所示。
    worddav66d5daa174e27252583e99f83c3d00a9.png

  2. 在"业务Module"向导中,输入业务Module的相关信息,点击"完成"按钮,创建业务Module,如下图所示。
    worddav4383140707a7afd2387deda240e85cbe.png

  3. 业务Module创建完毕,展开新创建的业务Module,如下所示。
    worddav7069ea517ac5b3bb1151f099c53fcbf1.png

# 创建EJB业务服务

  1. 在资源管理器中,选中新建的业务Module中的"业务服务",点击右键,选择"创建->EJB业务服务"菜单项,创建EJB业务服务,如下图所示。
    worddav645e7260444cfe7d2bf926b2050c56c5.png

  2. 在"创建EJB业务服务"向导中,输入相应的信息,点击"完成"按钮,完成EJB业务服务的创建,如下图所示。
    worddaveee2647d110c0cf00a677a50e79ab846.png

  3. 编辑生成的EJB业务服务的文件。选择刚刚创建的EJBEndpoint,如下图所示。
    worddavf6afe0d8d4e2923633f0d5d0857e7fda.png

# 创建JAVA方法

  1. 创建Java方法。在资源管理器中右键点击业务Module中的Java,选择"创建->类" 菜单项,如下图所示。
    worddav3f412c88575c78b5960105e8127b61f5.png

2.在弹出的"新建Java类"向导中输入相应信息后,点击"完成"按钮即可,如下图所示。
worddavdad1c1bff2058dd872f92e8c0bb195a8.png

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],这里注意,参数放入数组的顺序应该和方法中参数类型的排列顺序相同。

# 创建中介服务

  1. 在资源管理器中,选中新建的业务Module的"中介服务"项,点击右键,选择"创建->中介服务"菜单项,创建中介服务,如下图所示。
    worddav841af243b9d3b069f9474792db4ac9f7.png

  2. 在"创建中介服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
    worddaveccdbc1ed4affb3921b3d780ae330722.png

  3. 生成中介服务,如下图所示。
    worddav3673714511e5956c0494ffddeda72f62.png

4.在"中介服务"编辑页面点击"服务编排"链接,进入编排中介服务的界面。在"选用板"中将"JAVA方法"和"JAVA业务服务"图元拖拽到右边的编辑区,并用"连接线"依次连接,如下图所示。
worddavafd6e85303fdb835780ff17c9708972d.png

5.双击编辑区中的"Java方法"图元,弹出"JAVA方法属性设置"窗口,如下图所示。
worddavf3f1607a2c97eb3ebb50fea794e424dd.png

6.在"JAVA方法属性设置"窗口中,点击"浏览...",弹出"选择java方法"窗口,在"选择要打开的类型:"的输入框中输入类名"EJB..",在"匹配的类型"中选中EJBBusiness,再选中convertBusiness方法. 7. 在"JAVA方法属性设置"中设置"参数配置表",如下图所示。
worddavb6ff55747ed08081ece3c91e3c5f935d.png

8.双击编辑区中的"EJB业务服务"图元,弹出JMS业务服务的"设置对话框",点击"浏览..."按钮,选择刚创建的EJB业务服务。 9.在"设置对话框"中设置"参数配置表",并点击"确定"按钮,如下图所示。
worddav7bee02b474cafa5a65100a5d198932dc.png

注意:步骤7中参数的"返回值"和步骤9中的"参数",由于Java图元的返回至是下一个图元的输入参数,所以参数值"outMeg"一定要对应一致,否则会出错。 至此,中介服务创建完成。

# 创建HTTP代理服务

  1. 在资源管理器中,选中新建的业务Module的代理服务项,点击右键,选择"创建->HTTP代理服务"菜单项,创建HTTP代理服务,如下图所示。
    worddavd87170969ded8368ba7bb7557b0bac10.png

  2. 在"创建HTTP代理服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
    worddav89b8f29845aa1915b72dd6210189fb06.png

  3. 在HTTP代理服务的编辑界面中,需要输入"UrlPattern"并设置引用的中介服务,如下图所示。
    worddav369ba126d80d7eba5402f58ae5b772d6.png

4.至此,HTTP-EJB协议转换场景中所涉及到的开发工作已经完成,可以启动ESB,并进行测试。

# 启动和测试

1.在APIGateway Studio中启动APIGateway ESBServer,如下图所示。
worddavea4be9b0cb4994d1b52c4c45a6dac3b1.png

  1. 通过浏览器发送HTTP请求,ESB返回请求对应的响应,如下图所示。
    worddav0cebcbcf22a9a6d47ba9e0ccda55aa51.png

这里地址栏中输入的地址,根据工程中配置的具体情况而定,如:APIGateway ESBServer的IP地址:Transport中配置的端口/代理服务中配置URI。 注意:如果在启动正常,通过浏览器访问时报错,请确认是否将jboss-4.2.2.GAclient中的jbossall-client.jar已经拷贝到APIGateway ESBServer_home\libs中。