SDO/DAS研究(2): SDO目标和技术特点
2007-03-18 16:29
204 查看
1. 对异构数据源的统一数据访问。
当前的数据编程技术或多或少都是特定于数据源类型的。但是,在实际应用程序中,数据通常来自于各种数据源,包括关系数据库(通过JDBC、实体EJB或其他持久性框架访问)、定制的数据访问层(使用各种常见的设计模式来实现)、 Web服务(通过JAXRPC或其他方法访问)、XML数据存储区、JMS消息和企业信息系统(通过JCA Resource Adapter或通过一些定制的API访问)。这种异质性对应用程序开发人员提出了严重的挑战,因为他们需要学习和使用大量不同的编程模型。过多的数据访问API也对试图自动化诸如绑定UI组件到后端数据源(例如:JSR227)之类的常见数据编程任务的工具和框架造成了很大挑战。因此,一个与数据源类型无关的、表示数据集合的通用工具可以为应用程序员提供更简单的统一编程模型,并为工具和框架提供在不同的数据源中以一致的方式使用的机会。
2. 对静态和动态数据API的统一支持
静态的强类型接口可以为应用程序员提供一种使用编程模型的简单方式。例如,实体EJB、JDO、Hibernate以及其他对象/关系持久性机制提供类型化的Java数据接口(例如,account.getFirstName()或account.getBalance()),这为开发人员提供了一种方便的编程模型。相比之下,JDBC的ResultSet 和RowSet 接口只提供了动态的非类型化数据API。类似地,JAXB为XML数据提供了代码生成的Java接口,这使XML数据编程比使用DOM或SAX API更简单。
只有静态数据API或只有动态数据API是不够的:两者都是必需的。静态数据API提供应用程序员所需的易用性。但是在某些情况下,静态Java数据接口既不可行也不适合。例如,对于事先不知道结果数据的类型的动态查询,静态Java数据接口就不可行。因此,统一的数据编程技术需要同时无缝地支持静态和动态数据API。
3. 对断开编程模型的支持
许多应用程序自然地包含数据访问的断开使用模式:应用程序读取一组数据,将其在本地保留一段短的时间,操纵数据,然后再将更改应用到数据源。例如,这在基于Web的应用程序中是非常常见的模式:一个Web客户端请求查看一个表单,一个Servlet或JSP请求本地读事务中的数据,并将数据呈现在HTML表单中,Web客户端提交对表单的更新,Servlet或JSP使用新的事务更新数据。最佳实践通常要求对该场景使用乐观并发语义,从而提供具有适当业务级语义的高级别并发。
目前没有哪一种数据访问技术能够同时提供这种断开的乐观模型以及前述的其他特性。JDBC扩展(通过JSR114中的CachedRowSet,“RowSet Implementations”)提供了断开模型,但是如前所述,JDBC不能满足异构数据访问或易用性的要求。类似地,许多对象/关系持久性机制(例如,许多实体EJB实现、JDO、Hibernate等等)虽然支持乐观并发语义,但是它们不提供必需的统一数据访问特性。
4. 应用代码与数据访问代码的去耦合性
为了获得可重用性和可维护性,应用代码应该与数据访问代码分离。数据访问技术应该服从这一关注点分离。
当前的数据编程技术或多或少都是特定于数据源类型的。但是,在实际应用程序中,数据通常来自于各种数据源,包括关系数据库(通过JDBC、实体EJB或其他持久性框架访问)、定制的数据访问层(使用各种常见的设计模式来实现)、 Web服务(通过JAXRPC或其他方法访问)、XML数据存储区、JMS消息和企业信息系统(通过JCA Resource Adapter或通过一些定制的API访问)。这种异质性对应用程序开发人员提出了严重的挑战,因为他们需要学习和使用大量不同的编程模型。过多的数据访问API也对试图自动化诸如绑定UI组件到后端数据源(例如:JSR227)之类的常见数据编程任务的工具和框架造成了很大挑战。因此,一个与数据源类型无关的、表示数据集合的通用工具可以为应用程序员提供更简单的统一编程模型,并为工具和框架提供在不同的数据源中以一致的方式使用的机会。
2. 对静态和动态数据API的统一支持
静态的强类型接口可以为应用程序员提供一种使用编程模型的简单方式。例如,实体EJB、JDO、Hibernate以及其他对象/关系持久性机制提供类型化的Java数据接口(例如,account.getFirstName()或account.getBalance()),这为开发人员提供了一种方便的编程模型。相比之下,JDBC的ResultSet 和RowSet 接口只提供了动态的非类型化数据API。类似地,JAXB为XML数据提供了代码生成的Java接口,这使XML数据编程比使用DOM或SAX API更简单。
只有静态数据API或只有动态数据API是不够的:两者都是必需的。静态数据API提供应用程序员所需的易用性。但是在某些情况下,静态Java数据接口既不可行也不适合。例如,对于事先不知道结果数据的类型的动态查询,静态Java数据接口就不可行。因此,统一的数据编程技术需要同时无缝地支持静态和动态数据API。
3. 对断开编程模型的支持
许多应用程序自然地包含数据访问的断开使用模式:应用程序读取一组数据,将其在本地保留一段短的时间,操纵数据,然后再将更改应用到数据源。例如,这在基于Web的应用程序中是非常常见的模式:一个Web客户端请求查看一个表单,一个Servlet或JSP请求本地读事务中的数据,并将数据呈现在HTML表单中,Web客户端提交对表单的更新,Servlet或JSP使用新的事务更新数据。最佳实践通常要求对该场景使用乐观并发语义,从而提供具有适当业务级语义的高级别并发。
目前没有哪一种数据访问技术能够同时提供这种断开的乐观模型以及前述的其他特性。JDBC扩展(通过JSR114中的CachedRowSet,“RowSet Implementations”)提供了断开模型,但是如前所述,JDBC不能满足异构数据访问或易用性的要求。类似地,许多对象/关系持久性机制(例如,许多实体EJB实现、JDO、Hibernate等等)虽然支持乐观并发语义,但是它们不提供必需的统一数据访问特性。
4. 应用代码与数据访问代码的去耦合性
为了获得可重用性和可维护性,应用代码应该与数据访问代码分离。数据访问技术应该服从这一关注点分离。
相关文章推荐
- SAR图像目标识别技术研究170713
- 引擎技术研究之渲染到目标
- SDO/DAS研究(1): SDO规范
- 引擎技术研究之渲染到目标
- 基于高维视觉特征模型的目标图像检测与图像分割技术研究---论文摘录
- 2017年技术和生活的目标
- 3D游戏引擎中的室外大场景渲染技术研究与实现
- 请有意研究c#、xml、wap技术的朋友留下联系方式
- 基于深度学习的目标检测研究进展
- 嵌入式Linux系统中的快速启动技术研究
- Linux虚拟化技术Xen和KVM的优势特点对比
- 关于信息安全技术体系结构内容的研究
- 51CTO技术沙龙之从菜鸟到CTO,你的目标需要管理
- 深入Spring AOP技术研究
- UMBOY信息安全研究:RMS开发QQ群(24893581)技术推广计划
- EMV技术学习和研究-脱机数据认证之SDA
- 微信端开发研究与技术调研(一)
- AOP技术研究
- 网页栅格系统研究(4):技术实现
- 【读书笔记-数据挖掘概念与技术】数据挖掘的发展趋势和研究前沿