您的位置:首页 > 编程语言 > Delphi

DA26 – 升级到Data Abstract 'Vinci' 的Delphi版本

2008-05-04 14:40 579 查看
DA26 – 升级到Data Abstract 'Vinci' Delphi版本


本文讨论从Data Abstract 3.0到Data Abstract 5.0 ('Vinci') for Delphi主要的库的变化.其中说明了如果将你的项目从版本3或版本4 迁移到新版本并说明了迁移的原因及优势.
重点:主要的转换发生在3.0版到4.0版.从4.0到Vinci的转换是可选的,涉及到使用新的TDAMemTableBin2DataStreamer 功能.提供的DAConverter工具可以自动转换3.0 和 4.0项目.
如果你没有3.0项目,你可以跳过本文的绝大部分,直接查看Using the DAConverter Tool.
升级服务端应用程序
Data Abstract 4.0 的Delphi版本已经为服务端应用程序提供了两种模式.一方面,提供了在3.0已经接触过的服务接口,从而允许你做很少的修改就可以重新生成服务端应用程序.另外, Data Abstract 4.0提供了新的服务接口,与.NET版本共享, 改进数据存取并使跨平台开发客户端及服务端解决方案更容易.
默认,所有通过向导建立的新Data Abstract项目都使用这个新的v4.0接口,但是"Data Abstract v3.0 Legacy Application"模板使你可以基于V3.0接口创建一个新的项目.



新的Data Abstract 4.0 或 'Vinci' 客户端可以存取v3.0以及v4.0的服务端,但是使用V3.0接口的客户端不如使用V4.0的容易维护.
重新生成已存在的v3.0服务
在Data Abstract 'Vinci'中重新生成已存在的V3.0服务主要就是打开项目中所有的窗体和数据模块向其中的User子句中加入一组单元引用.
一些类已经移到独立的单元中, 所以当你遇到特定类型无法识别的错误,如data adapters* 或 Deltas: uDADelta, uDADataStreamer,你可能需要向Uses子句中加入这些单元的引用. 同时, DataAbstract_Intf单元重命名为DataAbstract3_Intf.
将你已存在的服务端应用程序转换到v4.0 接口
这里, 4.0版接口是指4.0版本和Vinci版本,因为它们相互兼容.
将你现在的服务转换为4.0版接口意味着要修改数据服务或服务使之继承于新的DataAbstractService 基类(见DataAbstractService_Impl.pas),其在DataAbstract4.RODL文件中定义的接口可同时应用在Delphi和.NET版本.
将服务升级到4.0版本接口有如下优点:
新的接口比3.0接口提供了更多改进的数据存取方法. 通常,在一个服务调用中获取或更新多表数据将更容易.

使用4.0接口实现客户端将更容易,客户端组件(TDADataTable 和新的 TDARemoteDataAdapter) 在拖放到窗体后就可以自动与新接口通讯.

由于新的接口共享给了Data Abstract的.NET版本, .NET 和 Mono客户端可以在不需要自定义动态方法绑定的情况下直接与4.0版本的服务通讯.同时可以应用在ASP.NET和精简框架集客户端.

很多新的高级数据存取特性,如Unions,只能在4.0版本的服务中使用. (更多详细信息见 DA30).

作为对新的4.0服务接口变更的唯一影响,现存的Data Abstract 3.0客户端不能直接同4.0版服务端通讯,必须加以改造.
改造服务端需要的工作当然与你的服务应用程序自定义代码和使用Data Abstract 的方式有关.下面的步骤基于标准的无代码服务应用程序.
使用新的4.0 RODL
第一步,需要使服务端应用程序使用新的RODL库定义新风格的服务接口和相关类.
在Delphi IDE中激活服务端应用程序并在主菜单中选择RemObjects|Service Builder启动Service Builder.库打开后,从可用库列表中删除原来的DataAbstract.RODL ,并点击Edit | Use Existing RODL菜单使用新的Data Abstract 4.0替换原来的库.


下一步,查找RODL文件中每个数据服务(本例中只用一个服务,但是更复杂的通用服务可能会将数据存取分为多个服务)并将其父类由DARemoteService改为DataAbstractService ..


完成之后关闭Service Builder返回Delphi IDE,然后在主菜单中选择RemObjects | Regenerate Units from RODL.



更新数据服务
库中定义的每个数据服务,都会在项目中有一个命名为<ServiceName>_Impl.pas的实现源文件.对每个需要更新为4.0接口的服务做如下步骤.
打开服务单元做如下修改:
在Uses 子句中将DataAbstract_Intf (或 DataAbstract3_Intf) 替换为DataAbstract4_Intf单元.

将 DARemoteService_Impl 替换为 DataAbstractService_Impl.

将其父类由TDARemoteService替换为TDataAbstractService.

完成后保持并关闭源文件,在重新打开.
IDE试图打开服务设计器时提示一些属性丢失的警告.这些原来TDARemoteService类中的属性和事件已经不存在(或被重命名)于TDataAbstractService.对每个警告选择Ignore(忽略), 直到服务模块设计器弹出.


最后,可能需要在新的DataAbstractService子类中调整更新一些属性,或重新指定事件处理.如果你对原来服务模块不做任何变动,那么就只需要将其新的属性DataStreamer指定为Data Adapter组件.如果不确定,那么就需要去检查属性列表保证这些属性都被设置好了.
好了,现在服务端应用程序已经改造为新的4.0接口并可以向新的Data Abstract 4.0 Delphi.NET客户端提供服务.如果你的客户端还是Data Abstract 3.0应用程序,确保同时做一系列改进使之可与新的服务通讯.
更新客户端应用程序
Data Abstract 4.0的Delphi版本对客户端组件架构做出了一些基本的调整,通过DataTable关联的新的Remote Data Adapter组件分离动态方法绑定及其服务调用的逻辑.
.NET版本的用户可以认识到,通过这种变更, Data Abstract 的Delphi版更像平台上提供的组件集,然而在架构级别上修正平台只是这种变更的优点之一.
通过新的TDARemoteDataAdapter 组件封装数据获取,提供了一个在一个地方去配置多个或所有DataTable的服务存取和动态方法绑定的解决方案.在Data Abstract 3.0, 对每个DataTable都需要运行向导去适当的连接到服务,现在不需要这样了.
手动转换窗体和数据模块
将窗体和数据模块中包含的Data Abstract组件转换为4.0版的过程很直接,可通过几个简单的步骤完成.
然而,虽然简单却很繁琐,我们提供了一个DAConverter工具简化了这个过程.如果你希望自己实现并想了解内部原理请继续阅读本节;否则直接到Using the DAConverter Tool.
首先,在IDE中打开所有的数据模块.如服务端转换一样,这里也会出现一些DataTable属性被移除的警告.特别是一些数据存取调用和对DataAdaper及远程服务的直接引用;一些被移除或重命名的事件也需要引起重视. 对所有的警告选择Ignore (忽略)直到打开窗体或数据模块.
下一步,向数据模块中拖放一个新的TDARemoteDataAdapter组件并连接到DataTable上.设置这种连接的一种方式是手动设置每个DataTable的RemoteDataDapter属性.另一种方式是右击TDARemoteDataAdapter,在上下文菜单中选择Hook up Data Tables然后选择你希望连接的DataTable.


最后,将Remote Data Adapter 连接到远程服务和Data Streamer* 组件.


动态方法绑定
第三步,需要配置到服务的动态方法绑定. 如果服务是4.0风格的,这些都会自动处理不需要手动设置.如果你希望去连接3.0风格的服务,右击Remote Data Adapter在上下文菜单中选择Reset Calls to Default (Legacy v3.0).自动将DMB配置为老式接口.


(您会发现上下文菜单中还提供了一个Reset Calls to Default的菜单项可以在需要的时候点击一下鼠标重置DMB为4.0默认的设置).
当然你也可以手动指定自定义方法去匹配服务可能用到的自定义服务接口. 对象观察器中的动态方法绑定目录中包含四个分隔的调用属性,可以用来指定方法名称和参数列表并挑选出默认功能的参数如表名,输入/输出参数等. 请在在线帮助中订阅DMB专题查看更多使用自定义动态方法绑定的详细信息.
结束语
最后,你要确定所有的DataTable的LogicalName属性都被设置为其所代表的表名.
在3.0中这个属性不是必须的,因为表名经常经过DMB的表名参数进行配置.由于现在方法调用集中于Remote Data Adapter, 每个表都要维护其自己的LogicalName和OutgoingTableNamesParameter数据调用的属性,用以确定如何向服务端传输名称.
其他从v3.04.0值得注意的变动
其他变动,你可能注意到我们将Data Adapter命名为Data Streamer. 在Data Abstract 4.0中提供了两个Data Streamer分别是TDABinDataStreamer (二进制同.NET兼容) 和 TDAXmlDataStreamer.
为了向后兼容,两个使用原来名称的子类(TDABinDataAdapter 和 TDAXmlAdapter)仍然被注册在IDE的Data Abstract (Legacy)组件面板中.这样基于3.0组件的窗体还能打开,但是在开发新应用时我们强烈推荐使用新的组件,在应用程序中拖放新的Streamer.
'Vinci'版本
Bin2DataStreamer 格式与新的TDAMemDataTable同时推出,这两个卓越的对象提供了无与伦比的数据获取效率,尤其是在获取大数据集时. TDAMemDataTable 能够直接使用从Bin2DataStreamer获取的数据,而不需要将数据一条一条地处理加载为内部数据存储,瞬间完成Open()操作.
使用DAConverter 工具
用户会使用很多自定义的动态方法绑定,使得转换非常繁琐,因此我们提供了一个小工具帮助处理这个过程: DAConverter.exe (在产品发布是装载: C:/Program Files/RemObjects Software/Data Abstract (Common)/Bin).
DAConverter.exe 是一个命令行工具,可以更新基于3.0的.Pas/.dfm文件生成Remote Data Adapters并适当的转变动态方法绑定设置.在命令行中使用要更新的.pas文件命启动这个工具,或在Windows资源管理器中简单的拖动一个文件到.Exe上.
For 'Vinci', DAConverter已经扩展支持转换新的Bin2DataStreamer和TDAMemDataTable组件.
重点: 为安全起见,推荐在应用转换器前备份项目文件.同时,你可能希望查看发生的变化 (见下面的/wait开关). 我们相信产品中包括很多无法预测的问题,我们无法精确的估计每个用户如何使用我们的产品. 如果你对这个工具有什么问题或建议请写信到 support@remobjects.com.
语法:
DAConverter [/wait] [/moveevents] [/usebin2] [/usememtable] /folder:<folder>
DAConverter [/wait] [/moveevents] [/usebin2] [/usememtable] <file1> [<file2> [...]]
where:
/wait
:
在点击回车键前控制台窗体一直打开
/moveevents
:
将每个DataTable的事件转移到相关的Remote Data Adapter上
/usebin2
:
使用TDABin2DataStreamers去替换 TDABinAdapter 和 TDABinDataStreamer 组件. (new for 'Vinci')
/usememtable
:
使用TDAMemDataTables去替换TDACDSDataTable 和 TDAADODataTable组件. (new for 'Vinci')

注意:
1) TDAMemDataTable 组件的最初版本不支持索引和筛选. DAConverter将检查需要的工具以及是否可以转换,不能转换将记录错误信息(这种情况下推荐使用/wait 选项获取警告信息).对索引和筛选的支持很受重视将很快推出.
2) TDABin2DataStreamer is able to be more stringent when checking and storing field datatypes and sizes, so it is possible that you may need to refresh the client-side schema to match the server (select the datatable and select 'Retrieve Datatable Schema' from its context menu).
总结
总之,从本文可见, Data Abstract 4.0 引入了一些基本的组件架构库的变化,将你现有的应用程序转换到新版本是一个很直接的过程.
除了对Data Abstract的.NET版的两种方式兼容性,还有广泛增强易用的库,改进的设计时和开发体验和更快的数据存取.
本文也说明了如何使用DAConverter 工具.
最后, 对于'Vinci', 讨论了新的 Bin2DataStreamerTDAMemDataTable 组件, 连同拓展的DAConverter 工具提供了简单的转换.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐