ESB 中介服务快速发布数据库表服务

6个月前

ESB 中介服务快速发布数据库表服务

访问普元产品知识库(doc.primeton.com),查看本文原文,获得更多普元产品知识,点击此处


1    ESB中介数据操作示例

场景:用户发送数据查询请求给ESB,ESB中介根据用户的请求对数据库进行操作,查询用户所需数据,并返回给用户。

1.1   数据库准备:

本示例数据库操作对象为Oracle,表名USERINFO,数据如下所示:

 

1.2   ESB配置数据库连接

打开ESB studio目录\server\EOS\_srv\config下user-config.xml,修改<group name = “default”>下内容为如下所示:

 

本示例要求ESB访问oracle数据库,配置数据源为oracle,用户根据实际需要配置,参考帮助文档数据源配置。

1.3   创建ESB项目

l  新建ESB项目(ESB项目创建可以参考ESB帮助手册)。

 

点击下一步,选择添加系统引用库

 

将富页面框架和基础构件库加入项目

 

l  右键项目,创建公共Module和业务Module,操作完成如下所示:

 

l  创建Transport。点击公共module,右键Transport,创建HTTP类型Transport

 

此处保留默认值,不做修改,点击保存。

l  创建中介服务。点击业务module,右键中介服务,创建中介。

 

    中介服务如下所示:

 

l  创建代理服务。点击业务module,右键代理服务,创建HTTP代理服务。

 

    编辑页面如下所示:

 

注:Transport选择公共module里面的Transport,URL是最后访问ESB服务的路径,关联服务选择中介服务,服务名称选择前面创建的中介。

l  添加数据库连接。在数据库资源管理器界面,右键“连接”—新建数据库连接。操作完成如下所示:

 

l  创建数据集。在业务Module—数据集菜单上,右键新建数据集。创建界面:

 

 

l  导入数据实体。从数据库资源管理器中将所要访问的数据表直接拖到数据集页面。

 

l  显示构件库视图。选择窗口—显示视图—其他—ESB开发—构件库,显示构件视图,如下所示:

 

构件详情查看构件库,或者鼠标停留响应构件上查看相关信息。

 

l  编排中介。(此处开发参考EOS帮助文档—基础构件库参考等

中介实现逻辑:中介解析xml请求,根据请求中的where节点数据查询数据库,然后把查询结果返回。

打开中介服务,点击面板上的“服务编排”,从构件库选择添加以下图元:

 

Ø  parseWhere图元解析ESB消息体中的where节点,将Where节点内容解析转换成DataObject。

Ø  queryEntitiesByTemplate图元根据SDO数据模板查询条件(也就是parseWhere获得查询条件)查询所有记录。

Ø  createXMLToITipMessagePayload图元将查询结果DataObject[]数组中的数据转换成ITipMessagePayload消息。

    双击编辑区空白处,查看中介的输入输出参数:

 

双击parseWhere图元,编辑参数:

 

双击queryEntitiesByTemplate图元,编辑参数:

 

双击createXMLToITipMessagePayload图元,编辑参数:

 

    中介编排完成,点击保存。项目如下所示:

 

1.4   运行测试

启动ESB server,点击工具栏按钮

 

    服务启动成功如下所示:

 

启动SOAPUI,新建请求,编辑访问地址(此处访问地址为代理服务设置的URL),设置xml请求如下:(查询数据库中id=1001的字段)

<?xml version="1.0" encoding="UTF-8"?>

<data name="com.primeton.esb.projectdata.restaurant.data.newdataset.Userinfo">

<where>

<column><name>userid</name><value>1</value></column>

</where>

</data>

    运行结果如下所示:

 

 

 

2    消息格式

2.1   XML格式规定

    

2.1.1   输入格式

根据构件库中的几个操作数据库的类DataObjectUtil、DatabaseUtil、DataContextUtil、DatabaseExt、CriteriaUtil几个类,从中抽取出比较常用的输入参数形成统一的格式。

<data name="" nameSqlId=""datasource="">

   <xpath></xpath>

   <property></property>

       <index></index>

       <isCheckEntityType></isCheckEntityType>

       <parameterObjectstyle="base/map">

          <row>

          <key></key><value></value>

          </row>

       </parameterObject>

   <table name="">

       <th>

          <columnName></columnName>

       </th>

       <row>

          <column></column>

       </row>

       ......

   </table>

   <begin></begin>

       <length></length>

       <pagecond></pagecond>

   <where>

       <column><name></name><value></value></column>

       .....

   </where>

</data>

数据格式说明:

data是文档的根节点,它有三个属性参数分别是:

   name          数据集中所引用的实体全名称

   nameSqlId     命名SQL的唯一标识

       datasource    数据源名称

table节点的主要作用是用于形成DataObjcet中的数据,由于可能有多个DataObjet数据形成数组这里使用row标记来分隔各个DataObject的数据。row节点有多个column节点,这个节点表示数据表中每一列的数据。

where节点的主要作用是形成用于作为条件的DataObjet。一般条件只有一个DataObjcet,所以这里只有一个column节点。

xpath节点代表SDO数组或者list所在xpath例如criteria/expr[1]/id

property节点代表SDO的属性名

parameterObject作为一些基本参数可以是一个HashMap,或者基本类型的值,这个节点在DatabaseExt的countByNamedSql中用到

index节点代表需要插入的位置,这个节点在DataContextUtil的insertObject中用到

isCheckEntityType节点代表缺省false:不检查将要添加的SDO对象实体名称和SDO数组或者list中的已有元素的实体名称是否匹配;
true:检查是否匹配。
如果是向SDO数组或list添加第一个元素,则自动忽略检查。

这个节点在DataContextUtil的appendObject中用到

begin节点代表开始记录编号(从0开始)

length节点代表length查询记录数量

这两个节点在DatabaseUtil的queryEntitiesByTemplate中用到

pagecond节点代表分页条件,这个节点在DatabaseExt的commonQueryWithPage中用到

用户设置分页PageCond对象的属性,包括从第几条记录开始(begin)、查询多少条记录(length)、是否统计总记录数(isCount),传入分页查询逻辑。

2.1.2   输出格式

返回的数据主要有两种:

1.DataObject数组使用table节点来表示

2. out节点表示各种基本数据返回值

<data name="">

   <table>

       <row>

          <column><name></name><value></value></column>

       </row>

       ......

   </table>

       <out></out>

</data>

2.1.3   数据示例

1      

2      

2.1      

2.1.1      

2.1.2      

2.1.3      

2.1.3.1     数据体示例

<?xml version="1.0" encoding="UTF-8"?>

<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">

   <table name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">

       <th>

          <columnName>tableid</columnName>

          <columnName>tablename</columnName>

          <columnName>age</columnName>

          <columnName>sex</columnName>

       </th>

       <row>

          <column>1</column>

          <column>zhangsan</column>

          <column>34</column>

          <column>n</column>

       </row>

       <row>

          <column>2</column>

          <column>lisi</column>

          <column>22</column>

          <column>y</column>

       </row>

       <row>

          <column>3</column>

          <column>wangwu</column>

          <column>45</column>

          <column>n</column>

       </row>

   </table>

</data>

2.1.3.2     条件示例

<?xml version="1.0" encoding="UTF-8"?>

<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">

   <table name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">

       <th>

          <columnName>tableid</columnName>

          <columnName>tablename</columnName>

          <columnName>age</columnName>

          <columnName>sex</columnName>

       </th>

       <row>

          <column>1</column>

          <column>zhangsan</column>

          <column>34</column>

          <column>n</column>

       </row>

   </table>

   <where>

       <column><name>tableid</name><value>5</value></column>

   </where>

</data>

2.1.3.3     parameter参数示例

<?xml version="1.0" encoding="UTF-8"?>

<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">

   <parameterObject style="map">

          <row>

              <key>tableid</key><value>1</value>

          </row>

          <row>

              <key>tablename</key><value>zhangsan</value>

          </row>

       </parameterObject>

</data>

 

<?xml version="1.0" encoding="UTF-8"?>

<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">

   <parameterObject style="base">

       hello

       </parameterObject>

</data>

2.2   JSON格式规定

2.2    

2.2.1   输入格式

{"@name":"","@nameSqlId":"","@datasource":"","xpath":"","property":"","index":"","isCheckEntityType":"","parameterObject":{"@style":"","row":{"key":"","value":""}},"table":{"th":{"columnName":""},"row":{"column":""}},"begin":"","length":"","pagecond":"","where":{"column":{"name":"","value":""}}}

2.2.2   输出格式

{"@name":"","table":{"th":{"columnName":[]},"row":{"column":[]}},"out":[]}

2.2.3   数据示例

2.2      

2.2.1      

2.2.2      

2.2.3      

2.2.3.1     数据体示例

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","table":{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","th":["tableid","tablename","age","sex"],"row":["1","zhangsan","34","n"]}}

 

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","table":{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","th":["tableid","tablename","age","sex"],"row":[["1","zhangsan","22","n"],["2","lisi","23","y"],["3","wangwu","32","n"]]}}

2.2.3.2     条件示例

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","where":{"column":{"name":"tableid","value":"1"}},"table":{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","th":["tableid","tablename","age","sex"],"row":["1","ssss","55","n"]}}}

2.2.3.3     parameter参数示例

{\"@name\":\"com.primeton.esb.project.restaurant.data.newdataset.Eostable\",\"parameterObject\":{\"@style\":\"map\",\"row\":{\"tableid\":\"1\",\"tablename\":\"json\"}}}}

 

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","parameterObject":{"@style":"base","row":"zhangsan"}}}

 

 

3    技术参考

ESB项目及相关模块创建:参考ESB帮助文档。

构件库操作:参考EOS相关文档或者直接将鼠标放在构件上查看详情。

COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。