Flex blazeds数据管理的实现和问题

来源:互联网 发布:手机淘宝如何查看评价 编辑:程序博客网 时间:2024/06/07 04:47

本文适应于对Flex、blazeds有一定认识(当然对lcds熟悉也可,本文提到的balzeds完全可由lcds替代),尤其对于blazeds至少要熟悉其remoting-config.xml、service-config.xml等文件的配置,可参考adobe的官方文档“BLAZEDS

Developer Guide”。本文强调的是datamanager和datastore的了解和使用。

1、 flex客户端快速配置数据服务

开发人员在flex开发环境中(插件或者builder)的数据/服务视图中,点击“数据连接/服务”按钮,选择服务类型,这里选择blazeds,会自动列出service-config.xml配置文件中配置的所有service,这里需要注意的是需要在java web项目的web.xml配置文件增加如下配置,否则可能出错。

<servlet>

<servlet-name>RDSDispatchServlet</servlet-name>

<display-name>RDSDispatchServlet</display-name> <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>

<init-param>

<param-name>useAppserverSecurity</param-name>

<param-value>false</param-value>

</init-param>

<load-on-startup>10</load-on-startup>

</servlet>

<servlet-mapping id="RDS_DISPATCH_MAPPING">

<servlet-name>RDSDispatchServlet</servlet-name>

<url-pattern>/CFIDE/main/ide.cfm</url-pattern>

</servlet-mapping>

当用户选择了某个server(假设为TestService)之后,用户即可拖动该service与datagrid等进行绑定,可实现快速的数据查询,增、删、改变更提交。

Flex_4_Tutorials,Chapter 6: Using data management to synchronize server updates,详细地并且图形并茂地描述了step操作,唯一遗憾是其基于

ColdFusion。

2、 数据管理的实现

数据管理在我看来就是查、增、删、改,简单来说就是数据查询和变动数据提交,通常情况下flex UI是用datagrid来展示数据的,因此可以说数据管理就是datagrid如何填充数据,datagrid的数据变动如何抓取出来并且提交到java服务,直至数据库,这里重点强调的是增、删、改数据如何提交及数据如何恢复。

1) 启用数据服务的数据类型的数据管理功能,所谓数据类型可以简单理解为填充datagrid的item(行记录,比如订单行项目、用户信息等);

2) 指定其创建项的操作,1中选定的数据服务的某个函数,建议命名为insertItem;

3) 指定其更新项的操作,1中选定的数据服务的某个函数,建议命名为updateItem;

4) 指定其删除项的操作,1中选定的数据服务的某个函数,建议命名为deleteItem;

至此,datagrid的数据变动已经可以提交给java服务了,有2种提交方式。

1)DataManager.autocommit = true时,通过调用TestService. insertItem, TestService. updateItem, TestService. deleteItem即可将增删改的item提交给java服务,每次只提交一个item;

2)DataManager.autocommit = false时,用户调用TestService.commit(),即可把所有的增、删、改记录都提交给java服务。

用户可以调用testService.revertChanges();来恢复任何变动的数据,恢复到上次查询的显示结果。

3、 使用注意事项

虽然flex blazeds提供的这个数据管理功能一定程度上给开发人员带来了方便、特别是有利于制定flex开发规范,但是个人觉得flex blazeds提供的数据管理太鸡肋,想用好的话还不如参考此思想自行实现。

1) 每次只提交一条记录,假设对datagrid新增了5条记录、修改了4条记录、删除了1条记录,那么做数据提交的时候flex就需要访问java服务10次,大大增加连接开销。

2) 可扩展性极差,用户无法在flex端获取变更记录(虽可通过datastore. uncommittedBatches获取所有未提交的变更项,但是没有增、删、改的标记),因此用户无法自行批量提交变更项(除非java服务中cache了原始记录集合)。

3) 状态管理没开放,既然其可抓取变更项,一定是有状态改变的,但是flex未开放状态管理api,只是说存在如下状态变更:

testService查出数据后其状态为初始状态;

有增、删、改时其状态变为未提交;

Commit成功后状态变回初始状态;

revertChanges之后也变回初始状态;

原创粉丝点击