现在的位置: 首页 > 综合 > 正文

使用Hibernate在短信银行中实现DAO模式

2013年10月16日 ⁄ 综合 ⁄ 共 2623字 ⁄ 字号 评论关闭
短信银行开发组 刘邦涛

1.短信银行简介

  东方通短信银行平台是一个针对银行的金融服务产品,它是基于J2EE体系结构。短信银行平台作为一个产品,包括以下几个部分:

  TongSMS通信平台:负责与联通,移动等的短信网关进行交互。负责发送和接收短信。如果需要,也可以挂接一个或者多个GSMModem。
  TongSMS业务系统:这是短信银行的核心部分,负责处理用户输入,根据用户输入与前置机或者数据库交互,生成相应的短信。用户需要的通知和定时提醒服务,也在这里处理完成。
  TongSMS管理中心:负责用户签约管理,系统监控。通信平台管理等等。此外,还提供一些附加的功能。
  TongSMS演示系统:模拟银行方业务。实现短信平台的模拟演示。

  这几个部分相互结合,构成了一个完成的短信银行平台产品。

2.短信银行视图
  2.1.部署视图
  下图是短信系统的部署视图,从图中可以看出,各个系统之间的交互,是通过数据库来完成的。所以,能够灵活方便的访问数据库,就成为一个对系统来说至关重要的要求。

  2.2.Hibernate在系统中的位置
  对于短信银行系统,有3种输入输出方式:
  浏览器:主要是管理中心人员,通过HTTP方式输入
  SOCKET: 提供给外部用户扩展功能。目前是TLINKQ。
  手机用户:通过SGIP或者CMPP。
  针对3种输入输出方式,对于每一种,我们基本都采用了MVC的设计模式,只是对于后两种,形式上略有变化。
  流程如下:
  1 用户输入了命令(可能是浏览器用户点击了页面,或者手机用户输入了命令)
  2 控制器(C)分析到来的命令,调用相应的model来负责处理该命令
  3 model进行一些简单的分析处理,调用后端的业务过程来具体处理这个命令
  4 简单的操作,业务过程调用DAO完成,负责的,需要使用一些通用的组件,来进行进一步的处理,然后调用DAO完成
  5 DAO负责存取数据库。DAO主要由Hibernate完成。

3.Hibernate介绍
  Hibernate是一个容易使用的、功能强大的对象/关系映射(O/R mapping)骨架(framework),对于J2EE的3层结构来说,它主要能够协助完成第3层也就是持久层(persistence layter)的功能。
  下图是一张Hibernate的体系结构图,其中Persistent Object是简单的业务实体对象(要被持久化的对象)。通过hibernate被透明的持久化到数据库中。从而减少了繁琐而且容易出错的JDBC的操作。

4.配置Hibernate
  为了能够正确的在j2ee环境下运行hibernate,需要进行如下的配置:
  1 编写hibernate.cfg.xml。对于短信银行来说,这个文件大致如下

"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">



true true java:comp/UserTransaction/ jdbc/informixd net.sf.hibernate.dialect.InformixDialect


将这个文件放到WEB-INF/classpath目录下
  2 将hibernate目录下的lib目录的相关文件(注意:不是所有的)拷贝到WEB-INF/lib目录下
  3 正确的配置TongWEB的数据源,这里名字为jdbc/informixd

配置完成。配置非常简单。

5.一个简单的例子
  在短信银行中,用户可以订制很多服务,比如定时提醒,余额变动通知,支付服务等等。我们有一张表定义了所有的服务类型,叫做Service表。下面就已对service表的操作来举例说明具体使用Hibernate的步骤。
1 定义映射文件,名字为service.hbm.xml.






2 使用Hibernate提供的工具来生成相应的javabean类Service.java和建表的sql语句,注意,建表的sql语句可能需要根据实际情况作修改,生成的可以作为一个基础。
3 使用sql在数据库中建表
4 配置Hibernate
Configuration ds = new Configuration().configure();
5 获得SessionFactory
SessionFactory sessionFactory = ds.buildSessionFactory();
6 使用SessionFactory建立session
Session session = sessionFactory.openSession();
7 使用session存储
Service service = new Service();
service.set(…);

Transaction tx = null;
try {
tx = ses.beginTransaction();
ses.saveOrUpdate(obj);
ses.flush();
tx.commit();
} catch (Exception e) {
try{
if (tx != null) tx.rollback();
} catch (Exception ex) {
//ignore
}
}

非常方便,减少了很多繁琐的工作。

6.总结
  对象关系映射工具有很多,目前比较著名的开放源码的工具是Hibernate和OJB,OJB是apache的产品。
  另一个可选的方案是使用JDO。从理论上来说,对于短信银行这样的应用,这应该是最好的选择,但是,一个问题导致了这样的选择实际上是不可行的:目前,还没有”免费的”、成熟的、经过实践检验的产品。对于我们这样一个产品来说,不能冒险使用。
  还有一种方法,就是使用Entity Bean。我们没有选用,是因为entity bean太复杂。而且,短信银行设计的初衷就是能够在TongWEB, Websphere, Weblogic等多种平台上运行。如果使用entity bean。会加大跨平台的难度。当然,也是可行的。比较好的方法可能是使用xdoclet来自动生成部署描述符。这需要进一步的研究。

  对于J2EE技术,可以使用的数据持久的方法很多,需要根据项目的大小,时间等等要求来进行灵活的选择。通过使用Hibernate,我们最大的感受是表结构的修改对于程序的影响是非常小的。而且非常灵活。针对短信银行平台这样规模的项目来说,使用Hibernate完全满足了我们的要求。达到了比较好的效果。

抱歉!评论已关闭.