论坛首页 Java企业应用论坛

介绍一个hibernate的实际项目

浏览 60904 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-12-06  
测试主页:[url]http://brisoft.vicp.net/smice [/url](需要IE6)

这是我们公司的一个实际产品,主要面向校园一卡通市场,目前
已经有了两个高校案例。不过这里,我主要是想介绍技术层面的
东西,交流一下Hibernate在实际项目中的应用。

我们公司从去年秋天就开始研究Hibernate,并在两个小项目中初步
使用,效果还可以。

因此在今年年初,新的校园一卡通项目启动时,就决定用Hibernate
来代替EJB作为主要的O-R技术。项目到这个星期,才算出了内部测试
版,化费了几乎4个人9个月的时间。九月份时,还用一个中间版本实
施了一个实际项目。

具体技术问题就不说了,只聊一些粗略的体会吧(我在论坛上向来只
喜欢务虚:) )
1. Hibernate的功能还是比较完善的,我们项目的需求还算比较复杂,
只有少量数据库的性能调整工作还需要手工做。
2. Hibernate的性能不错,特别是用了Cache。
3. Hibernate缺点也有很多,不过都不算很严重。唯一可以说是不能
接受的是2.0.3的Callback方法中无法对session操作,很难把一些业务
逻辑放到PO当中。在实际项目中,我们在Hibernate
上又封装了一层API,定义了自己的Callback。
4. 分析模型最重要。由于Hibernate简化了DB操作,闲下来的时间让人
自然提高对模型的要求。我们有相当长的时间花在模型设计和不断的refactor上。
5. 重构的诱惑。由于项目的目标是产品化,所以很多地方刻意追求,
几乎每一块代码都经过了3次以上较大的重构。这样做有好处,但也给
小组成员的配合上带来了问题。

我自己开发的统一认证和授权系统(没最终完成),有对这一块感兴趣的
朋友可以重点看看,多提些意见,谢谢。


开发环境:
Hibernate2.0.3
Eclipse/xdoclet/maven
Tomcat4.13
SQLServer2000
Win2000Server



部署环境:
RedHat 7
Websphere4
Oracle9i


另外,本贴同时贴在Jdon和hibernate中文论坛上,顺便感谢banq和robbin两位
站长对Java社区所作的贡献。

guty@brisoft.com.cn
   发表时间:2003-12-06  
还有一些数据:

数据对象:60多个
数据表: 39张表

系统主要负荷:每天6-7万笔交易流水
交易表数据量:>1000万条记录
0 请登录后投票
   发表时间:2003-12-06  
速度比较慢,不知道正式运行起来怎样?呵呵!
0 请登录后投票
   发表时间:2003-12-06  
我也是用Hibernate做的,用户、部门、职位、组、角色、资源、操作、权限(角色、操作、资源)。
只针对角色授权,但很多人提出直接对用户和部门授权,是不是我弄的太复杂了~~@_@
0 请登录后投票
   发表时间:2003-12-06  
谢谢guty!当初就是guty的帖子让我发现了Hibernate。

软件做的好漂亮! Javascript用的出神入化了,完全的Outlook风格的操作。

不知道你们生成Excel用的是什么API,是JXL,还是POI?

引用
唯一可以说是不能接受的是2.0.3的Callback方法中无法对session操作,很难把一些业务逻辑放到PO当中。在实际项目中,我们在Hibernate上又封装了一层API,定义了自己的Callback


这个问题有些争议。把业务逻辑放到PO当中形成BO,到底是否合适?以及如何调整PO和BO之间的关系,yyanghhong发起过一个讨论,请看这里:

http://forum.hibernate.org.cn/viewtopic.php?t=1116

实际上我原来是倾向于在PO里面添加业务逻辑形成BO的,但是我现在倾向于分开来。因为我发现在PO里面添加业务逻辑的时候必须非常小心,有些代码会破坏Hibernate对PO本来的状态管理。例如你在PO里面对PO的一个集合属性取size()方法,就会破坏one-to-many的lazy loading,这是我们公司一个同事发现的,他在论坛发过贴和yehs220讨论过这个问题。
0 请登录后投票
   发表时间:2003-12-06  
非常漂亮!
0 请登录后投票
   发表时间:2003-12-06  
Dennis 写道
速度比较慢,不知道正式运行起来怎样?呵呵!


是吗·?在局域网内速度还可以。

我们现在通过拨号网络,用windows的虚拟终端为9月份的那个客户做远程维护,速度确实比较慢,但那主要是因为网络速度。
0 请登录后投票
   发表时间:2003-12-06  
deeprising 写道
我也是用Hibernate做的,用户、部门、职位、组、角色、资源、操作、权限(角色、操作、资源)。
只针对角色授权,但很多人提出直接对用户和部门授权,是不是我弄的太复杂了~~@_@


我也是只对角色(组)授权,因为对用户和部门的授权都可以通过增加定义角色(组)来解决。

由于系统是多应用,多单位的系统,我们定义角色(组)由三元素组成:
(应用<application>, 单位<orgRole>, 标识<id>).
有的应用程序是singleton的,例如"统一认证系统",只有一个实例,所以它的角色(组)中没有单位属性。
有的应用程序是多实例的,例如"商户管理系统",如果给一个单位"图书馆"增加了"商户角色",就自然建立了"商户管理系统 - 图书馆"这个实例。
这类系统有两种组,一种和单例应用的组一样,另一种是具有单位属性,可以由单位的管理人员单独设置权限的组。前者是为了简化权限配置,后者是为了满足不同单位各自的授权要求。
0 请登录后投票
   发表时间:2003-12-06  
robbin 写道

软件做的好漂亮! Javascript用的出神入化了,完全的Outlook风格的操作。

谢谢:)我们TEAM中,有一个是javascript高手,所有的界面工作几乎都是他做的。

robbin 写道

不知道你们生成Excel用的是什么API,是JXL,还是POI?。

用的是POI。不过后来报表部分不是用的Excel,而是用Javascript,因为同事发现在IE6中用Javascript打印控件的效果是非常好的。

robbin 写道

这个问题有些争议。把业务逻辑放到PO当中形成BO,到底是否合适?以及如何调整PO和BO之间的关系,yyanghhong发起过一个讨论,请看这里:

http://forum.hibernate.org.cn/viewtopic.php?t=1116

实际上我原来是倾向于在PO里面添加业务逻辑形成BO的,但是我现在倾向于分开来。因为我发现在PO里面添加业务逻辑的时候必须非常小心,有些代码会破坏Hibernate对PO本来的状态管理。例如你在PO里面对PO的一个集合属性取size()方法,就会破坏one-to-many的lazy loading,这是我们公司一个同事发现的,他在论坛发过贴和yehs220讨论过这个问题。


这个问题确实不好选择。但从实际情况来看,经过多次refactor,我们TEAM中几乎到最后都选择了往PO里添加逻辑。
这样作的主要优点是复用性更好,对Object本身行为的封装也更自然和严谨。因为既然Hibernate开放了session接口,可以直接对数据增删改,如果不把逻辑封装到PO中去,是一件比较危险的事情,不可能要求所有地方都通过BO来操作数据。
关于破坏状态,可能也就是我们遇到的问题吧。我们其实封装了hibernate session api,并且定义了Root PO, 定义了自己的CallBack API,就避免了问题。
封装API的好处还在于,1,可以用ThreadLocal变量获取当前Session,避免应用代码方位Session; 2, 将HibernateException转化成RuntimeException,简化了很多应用代码。3, 做一些Hibernate还不能实现的功能:)
0 请登录后投票
   发表时间:2003-12-06  
yehs220 写道
非常漂亮!


谢谢版主:) 你是我见到的非常少的从不高谈阔论,只勤勤肯肯回答技术问题的人,和robbin是两个风格, hehe,robbin两点兼而有之。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics