2 高级数据存取框架设计
采用会话外观(Session Facade,简称SF)模式实现业务逻辑与持久性逻辑的关联。会话外观模式主要用于处理集中的工作流,为表示层提供统一、粗粒度的对象访问。
实体组件可提供一种特殊的数据处理方法,但无标准Java接口,缺乏灵活性。因此会话组件利用通用的Java数据存取接口访问数据。使用实体组件存在诸多问题:复杂性导致的性能降低;BMP中的n+l查询发现者等。虽然使用JDBC容易出错,代码量大,但将操作JDBC的代码封装成高级API,大大抑制相应缺陷,并提供使用存储过程。这样就可以跨越多个数据库表的更新;RDBMS从非J2EE环境移植到J2EE环境等。
为了能应用于多种数据库,保证设计的可移植性,将业务逻辑与JDBC相应成份分离,把JDBC的使用封装到一个抽象层中,屏蔽对JDBC和具体RDBMS的依赖性。这样不仅保持了系统的灵活性,而且层次分明,易于维护。
3 高级数据存取框架模型与实现
封装数据存取接口和实现,以熟知的产品表Product和销售明细表SellDetail为例,其中,Product具有产品标识ID和产品名NAME;SellDetail具有产品ID,销售日期DATE和销售量AMOUNT的字段。这样可根据产品ID查询产品的销售清单。
3.1 根据业务需求设置数值传递对象类Value Object
对于查询操作,输入产品ID,则输出产品名、销售日期和销售数量:而对于插入操作,输入产品ID、销售日期和销售数量。数值传递对象类构造如下:
传递数据有两种方法:一是将输入数据直接设置到值对象类的相应变量中,再将该类实例作为参数,调用EJB端会话Bean中的相应方法;二是只传递输入数据的变量,在会话Bean中再将输入数据的变量值设置到值对象类中进行数据存取。通常在会话Bean中设有合法性检验功能,仅当用户身份合法且具有授权才允许查询,否则会拒绝请求。采用第二种方法效率高。不设数值传递对象类,直接使用动态数组接收并传递数据也可实现相应的功能。
3.2 SellDataDAFramework类
该类为关键类,包含具体数据存取接口实现类的对象。
在大多数问题中都使用了异常SOLException,从SOLExcep—tion中提取信息,一般用户很难理解,只有通过检查数据库供应商提供的特有代码,才能弄清异常原委。
4 DAccess类
DAccess类实现了SelIDataDAccess接口,一个接口中CRUD方法是唯一的,针对不同方法,需要重新派生一个实现类,例如DAccess01、DAccess02等。SellDataDAFramework使用DAccess类的对象起索引或指针的作用,并将其加入到vecDAccess中,通过getDAccess方法来实现,从而执行具体的CRUD操作。下面以DAccess0l为例进行说明。