Tips of hibernate +weblogic 8.1 + oracle 9.2 / db2 8.1

原创 2005年05月16日 12:42:00

Tips of  hibernate +weblogic 8.1 + oracle 9.2 / db2 8.1

bromon原创 请尊重版权

 

       最近的工作都是在webligc 8.1 + hibernate的平台上做开发,涉及的数据库是oracle 9.2db2 8.1。对于这两个数据库我的了解都远远不够,所以开发中遇到很多问题,还好问题都解决了,很感谢阿古。有的问题也许大家都会遇到,列出我的解决办法,供大家参考。

 

一、weblogic 8.1下的数据库连接池配置

 

weblogic 8.1下配置连接池是很容易的,通过console全鼠标操作。以前我做过很多次了,驾轻就熟,很快搞定。编写好pojohbmtest一下,结果抛出了一个SQLException,具体信息我没有记录,大概意思是说:“事务没有被提交,因为它处于一个分布式事务中,当分布式事务结束后它会被提交。”打开oracle,确实没有看到测试数据,整个环境中我没有使用JTA,也不存在分布式数据库。Google了一下,看见别人的建议有:

 

1、              选择jdbc驱动的时候,不要使用xa系列驱动。这个其实大家都知道,xa系列驱动是为JTA准备的,我在配置连接池的时候也确实没有选择这类驱动。排除。

2、              修改startWeblogic.cmd,不要启动pointbase。查看startWeblogic.cmd后没有发现有启动pointbase的迹象,在端口列表中也没有发现。排除。

 

后来找到的解决办法是,配置webloigcdata source时,有这么一个选项:

 

Honor Global Transactions

 

它的相关说明是:

 

Specifies whether this data source will participate in existing global (XA) transactions. Unchecking this option while creating the data source should be done rarely and with care. This option can not be changed once the data source is created.

 

       就是它了,把它去掉,try againpassed

      

       上述问题在oracledb2中都存在。

 

二、时间字段的处理

 

开发过程中涉及到了时间的存储和查询,相关的处理要依靠oracledb2自己的函数,有小小区别。

 

一个hibernate中对oracle进行时间查询的例子:

from scene.pojo.TaskInfo as ti where and ti.taskStartTime>=to_date('"+start+"','yyyy-MM-dd HH:mi:ss') and ti.taskEndTime<=to_date('"+end+"','yyyy-MM-dd HH:mi:ss')";

 

       其中的startend变量为java.util.Date()。使用了oracleto_date函数来做日期转换,很多java程序员也许会和我一样,直觉的采用”yyyy-MM-dd HH:mm:ss”的格式作为时间的正则表达式,但是在oracle中会引起错误:”ORA 01810 格式代码出现两次。原因是sql中不区分大小写,MMmm被认为是相同的格式代码,所以oraclesql采用了mi代替分钟。

 

       DB2中的查询语句是:

from scene.pojo.TaskInfo as ti where and ti.taskStartTime>=timestamp('"+s+"')  and ti.taskEndTime<=timestamp('"+e+"')";

 

       DB2中的函数是timestamp,无须指定时间格式。

 

三、Hibernatelazy loading

 

Lazy loading是进行集合映射时很有用处的优化选项,但是使用起来容易遇到问题。比如在我们的应用中,user->post形成一对多的映射,User中有一个包含postList。同时系统采用了一个HibernateSession来管理session,它的逻辑是每进行一次数据库操作,就开新的session,操作完成后立即关闭该session。这样做的好处是可以严格关闭session,避免菜鸟级的错误,但是hibernate.org并不推荐这么做。因为这不适合lazy loading,也不适合跨方法的事务。

 

回到我们的例子,在User中,有多个属性:namepasswordphone等,还有一个List类型的posts。当我们对posts使用lazy laoding的时候,hibernate会在获得User对象的时候,仅仅返回name,password,phone等基本属性,当你访问posts的时候,它才会从数据库中提取posts需要的数据,这就是所谓lazy laoding。但是在我们的系统中,session是被立即关闭的,也就是在读取了name,password,phone等基本属性后,session已经close了,再进行lazy loaiding就会有异常。

 

解决办法是在close session之前,调用Hibernate.initialize(user.getPosts()),告诉系统,user.getPosts()是需要lazy laoding的。但是这样做会破坏HibernateSession类的封装,郁闷。

 

后来采用所谓的OpenSessionInView模式,把session的周期交给servlet filter来管理,每当有request进来,就打开一个sessionresponse结束之后再关闭它,这样可以让session存在于整个请求周期中。但是在实际操作过程中,发现一下问题:

 

Lazy laoding应该是两条select构成的,但是在使用了OpenSessionInView模式后,系统执行了一条selectsession就被关闭了。相同的代码,放到普通环境中,就执行正常,目前这个问题已经在java eye挂了很久,无人解答。望高人指点。

weblogic8.1 license

weblogic8.1 sp2 license问题  向BEA中国申请了Weblogic的license后,替换掉其主目录下license.bea,启动报错。各大论坛发帖子求救,无人应答!只好给毕意辉...
  • happypolo
  • happypolo
  • 2009年04月01日 10:31
  • 1514

安装 DB2 Version 8.1.6

 如何安装和配置 DB2 Personal Edition Version 8.1.6 for Linux 以及 Java 运行时环境级别: 初级Ian Shields (ishields@us.ib...
  • Steven_zhao
  • Steven_zhao
  • 2005年01月13日 21:48
  • 1802

用Eclipse MyEclipse WebLogic8.1开发第一个Web程序

用Eclipse MyEclipse WebLogic8.1开发第一个Web程序- -                                       用Eclipse+MyEclipse...
  • butian
  • butian
  • 2004年12月13日 14:06
  • 2771

weblogic8.1 下载地址

适用于HP-UX (PA-RISC, Simplified Chinese) 的WebLogic Platform 8.1 with SP6 简体中文版 Download Size: 530...
  • muzizhuben
  • muzizhuben
  • 2011年08月12日 15:20
  • 7121

WebLogic 8.1安装配置

ni安装目录我选在D:/Program Files/bea,选择完全安装。                   1."开始->程序->Bea WebLogic Platform 8.1-> Confi...
  • leader_lx
  • leader_lx
  • 2005年11月08日 08:22
  • 2575

weblogic 8.1教程之配置(二)

weblogic 8.1 安装成功之后,你可以在 “开始” 菜单中找一下 weblogic 的安装文件夹(window 7环境下),下图是我机器上的:                     当然了,...
  • samile6899
  • samile6899
  • 2016年04月11日 00:07
  • 666

将项目部署到Weblogic8.1上存在的问题

1.        启动weblogic服务时报错CharScanner; panic: ClassNotFoundException: org.hibernate.hql.ast.HqlToken在...
  • lingofire
  • lingofire
  • 2007年07月08日 12:38
  • 882

在RedHat Linux 9下安装DB2 v8.1

由于DB2的很多设置管理程序都是使用JAVA开发的,因此在安装DB2之前必须JDK,而且请使用IBM的JDK,你可以到 http://www-106.ibm.com/developerworks/ja...
  • Explorerwen
  • Explorerwen
  • 2006年05月21日 15:55
  • 2322

我的DB2 v8.1 使用经历

说起 db2 ,还是第一次使用,作为一位新手,确实遇到了很多问题,现在把使用中的注意点记下来,也是为了以后有个参考。 最开始遇到的问题就是 启动实例一直报错的问题,真是郁闷死了,就是没搞清楚原因。结果...
  • walkingmanc
  • walkingmanc
  • 2009年05月23日 09:28
  • 729

Solaris 10 SPARC WebLogic JSP编译错误解决

http://yulimin.javaeye.com/blog/27417Solaris 10 SPARC WebLogic 8.1.5下Spring 1.2.8Hibernate 3.1.3出现JS...
  • YuLimin
  • YuLimin
  • 2007年02月08日 22:28
  • 3550
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tips of hibernate +weblogic 8.1 + oracle 9.2 / db2 8.1
举报原因:
原因补充:

(最多只允许输入30个字)