0.文章导读
本文档针对Cordys BOP-4 WS-AppServer基础功能进行验证和快速开发指导。(高级实践文档请参考后续文档)。
0.1.WS-AppServer概述
WS-AppServer是Web Service Application Server的简称,是Cordys平台中基于数据库的Java业务逻辑开发层,其最根本的特性如下:
(1)连接数据库
- WS-Apps通过连接池访问数据库,可以从数据库表结构直接产生相应的Java代码,并发布成Web服务;
- 提供事务处理(transaction)和查询(query)的API,便于面向数据库开发。
(2)实现Java应用逻辑
- 可以在自动产生的Java代码以外,编写独立的逻辑作为新的Java方法,并发布成Web服务。新的Java方法甚至可以不访问数据库,相当于一个Javacall;
- 更重要的是,Ws-Apps提供一种事件驱动的编程模式,数据库事务、记录、字段的变化都可以有相应的event handler,可供嵌入各种逻辑。
(3)与XForm紧密集成,可以用后端逻辑控制前端展现,比如某页面控件是否隐藏或只读,某个下拉列表有哪些选择,某个字段输入是否合法
- 在WS-Apps中,具体的逻辑在相应event handler中实现;
- 触发event handler,并按照结果进行展现,由Xform负责。具体的接口通过SOAP request/response中传递的额外信息描述。自己开发的connector,如果实现了这些接口,也可以达到同样的效果。
(4)与Orchestrator的紧密集成
- 对于WS-Apps管理的数据库对象模板,也可以定义Orchestrator的规则。这样,对于数据库记录的增删改,不但能触发Java编程的业务逻辑,也可以同时触发业务规则。可以分别针对性能和灵活性作优化,实现复杂的业务需求Orchestrator的全套Java API,都可以在Ws-AppServer中调用。
0.2.文档导读目录及结构
0.3.WS-AppServer结构
WS-AppServer组件相互依赖,主要由如下几部分组成:
- Database Metadata
- WS-AppServer Package
- Object Schema
- Java Model
- Java Archive Package
- Web Service
1. Workspace的新建
(1)在租户中新建Workspace
新建Workspace,如下图所示,填写“Name”,我这里新建名称是“Training_xiaoyw201503”。
(2)为Workspace配置SVN
2. WS-Appserver Container的配置
(1.1)首先选择“System Resource Manager”
(1.2)选择Application Connectors新建
Application Connectors链接点是WS-AppServer。
(2)配置Service Group细节
(3)配置Service Container细节
(4)为WS-AppServer配置细项
(4.1).配置数据库连接
(5).配置连接点Connection Point
手动启动新建Service Container
3. DB Metadata的新建
通常在项目中建立如下文件夹:
WEB
Java
DB Meterdata
BPM
Web Service
WS-AppServer Packeage
(1)在DB Meterdata上,点击鼠标右键,如下图操作,新建DB Meterdata。
上图中,第4步输入“data”是为了快速查询对象,鼠标点击“Database Metadata”,配置数据库链接。
如上图所示,输入“Database Metadata”名称为“xiaoyw Database Metadata”,WS-AppServer Service选择新建的“test_xiaoyw” Service Container(数据库链接)。
接着,选择数据源,通过鼠标点击“Retrieve all tables”可以检索所以数据库表,也可以通过中间的Search in database输入框检索,输入“*”,也是表示全部表的检索,如果检索某个或某些表,直接输入名称或部分,再鼠标点击“Search in database”按钮查询检索即可。
按上图所示,选中dept、test_zss表,使用按钮“>”转移到右侧。
4. 基于WS-Appserver的开发和使用
(1)新建WS-AppServer Packeage
(2)基于新建的WS-AppServer生成Java源代码、Jar包
在上图中,鼠标点击图标,弹出下图所示窗口“Update Packeage from Database Metadata”,从数据库对象“Select Database Matadata”中选择“xiaoyw Database Metadata”。
在上图中选择表dept、test_zss,鼠标点击“Update”按钮。
按上图,通过选择框来选择由Cordys平台生成所需get方法。
按上图,通过Cordys平台生成Java及其JAR包代码,鼠标点击图标,弹出如下图所示。
按上图所示,先选择数据表对象dept、test_zss,再鼠标点击图中下部按钮“Generate”,生成Java代码。如下图所示,通过操作界面页底,鼠标点击“Workspace Documents”页面来回看Java代码。
上图展示出生成Java代码。
(3)基于新建的WS-AppServer生成Webservices
按上图所示,鼠标点击图标,由Cordys平台来自动生成Webservices代码。
按上图所示,先通过选择框选择数据库表对象dept和test_zss,再鼠标点击“Next”按钮。
按上图所示,先输入Web Service Name为“getDept”,然后调整Web Services Folder Name为“WebService”(图中第3步)。最后,鼠标点击“Generate”按钮。
通过操作界面页底,鼠标点击“Workspace Documents”页面来切换回看Webservices列表。
(4)发布Java类到租户中(当前开发环境)
注意,最好选中整个“Java”文件夹进行Java代码发布,按鼠标右键弹出上图发布菜单,鼠标点击“Publish to Organization”发布。
(5)发布Webservice到租户中
按上图所示,选中整个WebService文件夹,击鼠标右键弹出如图所示菜单,鼠标点击“Publish to Organization”选项,发布Webservices。
(6)自动/手动绑定到Web Service Interfaces中
正常顺序操作时,Webservices自动绑定到Web Service Interfaces中,但是,本次实践过程中,频繁删除已经发布的Webservices,这样,会有Webservices残留。
如上图所示,我所建立的“test_xiaoyw” Service Groups,通过鼠标右键弹出菜单选择“Properties”选项,可以看到先前所绑定大量Webservices,选中所有选择框,点击“红叉”操作,删除涉及到我的Webservices。
(7)手动绑定到Web Service Interfaces中
在删除相应的Webservices后,鼠标点击“绿色加号”,如图所示弹出窗口,通过“-Select Organization/Package-”选择开发者所处的租户“mssoa”,从其海量Webservices中,选择我所开发的Webservices “getDept.xiaoyw...”,通过添加按钮“Add”,加入到下表中,最后鼠标点击“Done”按钮,完成绑定工作。
按上图所示方式,重新启动Service Containers “xiaoyw_WS_AppServer”。
5.通过SVN使用Eclipse
代码导入到Eclipse中
(1)上传代码到SVN
为了保证代码最新及准确,请先更新代码到本地再提交。
(2)在Eclipse中,检出代码(首次需要检出项目)
(2.1)从SVN中检出项目到Eclipse中新建项目
(2.2)把Java代码导入src为源文件
(2.3)配置Build Path资源(依赖类库和外部包)
(2.4)更新代码
6. 单表的增删改查
(1)测试所发布的Webservices有效性,查询
在Webservice文件夹中要进行测试的Web service,按右键弹出窗口,选中“Test Web Service Operation”。(注:重建Webservices名称为getDept,自此不重新更新插图)
如上图所示选中GetDeptObject,击鼠标右键弹出菜单,选择“Test Web Service Operation”进行测试。
如上图所示,把SOAP Request中<ID>中的Parameter替换成“5”,再鼠标点击按钮“Invoke”,然后查看SOAP Response。
(2)插入操作
测试请求报文如下:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<UpdateDept xmlns="http://schemas.cordys.com/xiaoywWSAppServerPackage" reply="yes" commandUpdate="no" preserveSpace="no" batchUpdate="no">
<tuple>
<old>
<dept qConstraint="0">
<id>5</id>
<name>xiaoyw</name>
</dept>
</old>
<new>
<dept qAccess="0" qConstraint="0" qInit="0" qValues="">
<id>5</id>
<name>xiaoyw20150329</name>
</dept>
</new>
</tuple>
</UpdateDept>
</SOAP:Body>
</SOAP:Envelope>
在测试查询结果如上图所示,id=5的更新name为xiaoyw20150329。
上面报文中<old>为删除操作,<new>为插入操作。
7.自定义Webservices开发
(1)自定义插入操作Webservice。
仍回到“xiaoywWSAppServerPackage” WS-AppServer Packeage操作窗口。
按上图所示,选择dept表,击鼠标右键弹出如图所示菜单,选择“Add”菜单,再选“Method”选项。
(2)编辑新方法属性
注:上图为旧图,Package是“xiaoywWSAppServerPackage”。方法命名为insertDept,插入操作无返回值,并选中“SOAP”选择框。
(3)为方法提供参数
按上图所示操作,鼠标点击绿色“+”,增加输入参数,本例使用两个参数,分别为v_id和v_name,最后保存。
(4)接下来生产Java代码、Webservices。
由于本次是新增方法,这样需要重写扩展类,需要选中“Overwrite Extension Classes”,也要选中相关的表,最后鼠标点击“Generate”按钮,生成Java代码。
(注:此图代码中第一个参数设置时错误,更新为int)
如上图所示,新的Java代码中新增insertDept方法,需要在此编写自定义代码,新增内容如下所示:
public static void insertDept(int v_id, String v_name)
{
// TODO implement body
String sql="insert into dept (id,name) values("+v_id+",'"+v_name+"')";
DMLStatement DML = new DMLStatement(sql);
DML.execute();
}
并且需要导入:
import com.cordys.cpc.bsf.busobject.DMLStatement;
上述代码编写,最好是Eclipse,以及配合SVN协调代码同步。
(5)发布Webservice
由于Webservices已经存在,在上图中需要选中“Existing”,再通过弹出窗口选择Web Service Interface。
如上图所示,在WebService中,可以看到新增“insertDept”方法,接着再对WebService进行整体发布。发布结果如下图所示。
(6)测试插入操作
选中WebService中insertDept方法进行测试,测试报文如下。
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<InsertDept xmlns="http://schemas.cordys.com/xiaoywWSAppServerPackage" preserveSpace="no" qAccess="0" qValues="">
<v_id>51</v_id>
<v_name>new xiaoyw</v_name>
</InsertDept>
</SOAP:Body>
</SOAP:Envelope>
再查询测试刚刚插入内容,结果如下,成功。
草稿完成于2015年3月29日。
完善于2015年4月1日
参考:
《WS-AppServer Fundamental Practice in BOP-4》Cordys公司 2012年