欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
场景:用户发送数据查询请求给ESB,ESB中介根据用户的请求对数据库进行操作,查询用户所需数据,并返回给用户。
本示例数据库操作对象为Oracle,表名USERINFO,数据如下所示:
打开ESB studio目录\server\EOS\_srv\config下user-config.xml,修改<group name = “default”>下内容为如下所示:
本示例要求ESB访问oracle数据库,配置数据源为oracle,用户根据实际需要配置,参考帮助文档数据源配置。
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图元,编辑参数:
中介编排完成,点击保存。项目如下所示:
启动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>
运行结果如下所示:
根据构件库中的几个操作数据库的类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),传入分页查询逻辑。
返回的数据主要有两种:
1.DataObject数组使用table节点来表示
2. out节点表示各种基本数据返回值
<data name="">
<table>
<row>
<column><name></name><value></value></column>
</row>
......
</table>
<out></out>
</data>
1
2
2.1
2.1.1
2.1.2
2.1.3
<?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>
<?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>
<?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
{"@name":"","@nameSqlId":"","@datasource":"","xpath":"","property":"","index":"","isCheckEntityType":"","parameterObject":{"@style":"","row":{"key":"","value":""}},"table":{"th":{"columnName":""},"row":{"column":""}},"begin":"","length":"","pagecond":"","where":{"column":{"name":"","value":""}}}
{"@name":"","table":{"th":{"columnName":[]},"row":{"column":[]}},"out":[]}
2.2
2.2.1
2.2.2
2.2.3
{"@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"]]}}
{"@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"]}}}
{\"@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"}}}
ESB项目及相关模块创建:参考ESB帮助文档。
构件库操作:参考EOS相关文档或者直接将鼠标放在构件上查看详情。