Skip to content

本节讲述了用户发送数据查询请求给ESB,ESB中介根据用户的请求对数据库进行操作,查询用户所需数据,并返回给用户。

数据库准备

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

ESB Studio配置数据库连接

打开ESB Studio目录\server\EOS_srv\config下user-config.xml,修改<group name = “default">下内容为如下所示。

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

创建ESB项目

  1. 新建ESB项目。

  2. 单击“下一步”,选择添加系统引用库。

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

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

  5. 创建HTTP类型Transport,如下图所示。

  6. 创建中介服务。

  7. 创建HTTP代理服务。

  8. HTTP代理服务编辑页面如下所示。

    说明

  • Transport选择公共module里面的Transport,URL是最后访问ESB服务的路径,关联服务选择中介服务,服务名称选择前面创建的中介。
  1. 添加数据库连接。在数据库资源管理器界面,右键“连接”—新建数据库连接。操作完成如下所示。

  2. 创建数据集。在业务Module—数据集菜单上,右键新建数据集。

text
Transport选择公共module里面的Transport,URL是最后访问ESB服务的路径,关联服务选择中介服务,服务名称选择前面创建的中介。
  1. 导入数据实体。从数据库资源管理器中将所要访问的数据表直接拖到数据集页面。

  1. 显示构件库视图。选择“窗口 > 显示视图 > 其他 > ESB开发 > 构件库”,显示构件视图,如下图所示。

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

  1. 编排中介。中介实现逻辑:中介解析xml请求,根据请求中的where节点数据查询数据库,然后把查询结果返回。打开中介服务,单击面板上的“服务编排”,从构件库选择添加以下图元。

说明
  • parseWhere图元解析ESB消息体中的where节点,将Where节点内容解析转换成DataObject。
  • queryEntitiesByTemplate图元根据SDO数据模板查询条件(也就是parseWhere获得查询条件)查询所有记录。
  • createXMLToITipMessagePayload图元将查询结果DataObject[]数组中的数据转换成ITipMessagePayload消息。
  1. 双击编辑区空白处,查看中介的输入输出参数,如下图所示。

  1. 双击parseWhere图元,编辑参数。

  1. 双击queryEntitiesByTemplate图元,编辑参数。

  1. 双击createXMLToITipMessagePayload图元,编辑参数。

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

运行测试

  1. 启动ESB Server。

  2. 服务启动成功如下所示。

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

xml
<?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>
  1. 运行结果如下所示。

消息格式

XML格式规定

XML输入格式

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

xml
<?xml version="1.0" encoding="UTF-8"?>
<data name="" nameSqlId="" datasource="">
   <xpath> </xpath>
   <property> </property>
       <index> </index>
       <isCheckEntityType> </isCheckEntityType>
       <parameterObject style = "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开始)。在DatabaseUtil的queryEntitiesByTemplate中用到。
length代表length查询记录数量。在DatabaseUtil的queryEntitiesByTemplate中用到。
pagecond代表分页条件,这个节点在DatabaseExt的commonQueryWithPage中用到,用户设置分页PageCond对象的属性,包括从第几条记录开始(begin)、查询多少条记录(length)、是否统计总记录数(isCount),传入分页查询逻辑。

XML输出格式

返回的数据主要有两种。

  1. DataObject数组使用table节点来表示。
  2. out节点表示各种基本数据返回值。
xml
<?xml version="1.0" encoding="UTF-8"?>
<data name="">
   <table>
       <row>
          <column><name> </name><value> </value></column>
       </row>

       ......
   </table>
       <out> </out>
</data>

xml数据示例

xml数据体示例

xml
<?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条件示例

xml
<?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>

xmlparameter参数示例

xml
<?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
<?xml version="1.0" encoding="UTF-8"?>
<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
  <parameterObject style="base">
      hello
      </parameterObject>
</data>

JSON格式规定

JSON输入格式

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

JSON输出格式

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

json数据示例

json数据体示例

json
{
  "@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"]
  }
}
json
{
  "@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"]
    ]
  }
}

JSON条件示例

json
{
  "@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"]
  }
}

parameter参数示例

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