文档章节

Hibernate core 3.3.2.GA 与 3.6.0.Final引发的一个血案

appoule
 appoule
发布于 2016/03/29 16:01
字数 401
阅读 263
收藏 1

一、背景

  Web项目M 引用Sub工程,Sub工程打包成Jar形式被M引用。

Sub里有这样一段获取服务器时间的代码;

Date date = null;

Session session =  this.getSessionFactory().openSession();

 

String sql = "select sysdate as mydate from dual";

SQLQuery query = session.createSQLQuery(sql);

 

try {

query.addScalar("mydate",Hibernate.TIMESTAMP);

date = (Date) query.uniqueResult();

System.out.println("XXXX:"+org.hibernate.Hibernate.TIMESTAMP.getClass());

} catch (HibernateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

date = new Date();

} finally {

session.close();

}

Sub中用的是Hibernate 3.6.0 Final版本,IVY依赖如下

<dependency org="org.hibernate" name="hibernate-core" rev=" 3.6.0 Final" conf="compile->default"/>

只是参与编译,不会编译到Sub jar中。

M依赖的是Hibernate 3.3.2.GA版本,

<dependency org="org.hibernate" name="hibernate-core" rev=" 3.3.2.GA" conf="zip->default"/>

二,现象。

那么,问题来了,目前依赖情况会导致M 项目起不来,报错为:

信息: Illegal access: this web application instance has been stopped already.  Could not load org.apache.commons.pool2.impl.DefaultPooledObject.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.

java.lang.IllegalStateException

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1750)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1709)

at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:80)

at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:836)

at org.apache.commons.pool2.impl.GenericObjectPool.ensureIdle(GenericObjectPool.java:895)

at org.apache.commons.pool2.impl.GenericObjectPool.ensureMinIdle(GenericObjectPool.java:874)

at org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor.run(BaseGenericObjectPool.java:1055)

at java.util.TimerThread.mainLoop(Unknown Source)

at java.util.TimerThread.run(Unknown Source)

如果把M中对Hibernate的依赖也换成 3.6.0.Final则在运行到上边代码段时会出现  java.lang.NoSuchFieldError: TIMESTAMP。

三、应对策略

之前有同事提醒我说,Sub中Hibernate Core只参与编译,所以一直没往sub中考虑,无奈怎么试都有问题,最后想到把Sub中HibernateCore换成3.3.2.GA版本,问题消失,然后,为啥会这样?留个尾巴,继续找吧,找到了再来更新。

© 著作权归作者所有

共有 人打赏支持
上一篇: 搬家!
下一篇: Hessian 500错误
appoule
粉丝 0
博文 8
码字总数 1434
作品 0
南京
私信 提问
将C3P0链接池更换成druid之后,原来的创建临时表的语句在执行时,log报error,但是不影响执行结果,是druid的bug?

@wenshao 你好,想跟你请教个问题: 将C3P0链接池更换成druid之后,原来的创建临时表的语句在执行时,log报error,但是不影响执行结果,是druid的bug? 数据库采用 mysql5.1 以下是错误日志:...

27号
2013/01/23
1K
7
Hibernate Core 3.6.0.Final 来了

JBoss 宣布完成了 Hibernate Core 3.6 GA 的开发,该版本在作为 JBoss 应用服务器的 JPA 提供者时做了大量的测试工作,并且通过的所有的测试。 Hibernate 3.6 主要改进内容: 不再支持 JDK ...

红薯
2010/10/15
3.4K
3
hibernate学习笔记01--在eclipse环境下搭建hibernate框架

下载并解压 hibernate-distribution-3.3.2.GA.zip 和 slf4j-1.5.8.zip 2. 在 hibernate-distribution-3.3.2.GA 文件夹中找到: hibernate3.jar 3. 在 hibernate-distribution-3.3.2.GA/lib/......

风中海岸
2015/08/29
0
0
Hibernate的主配置文件hibernate.cfg.xml

1:Hibernate的主配置文件的名字必须是hibernate.cfg.xml(主要配置文件中主要配置:数据库连接信息,其他参数,映射信息): 常用配置查看源码:Hibernatehibernate-distribution-3.6.0.Fin...

别叫小伙
2017/03/10
0
0
简述Hibernate下如何实现log4j的日志输出方法

1.在Hibernate的基础下,原来是依靠slf4j-api-1.5.8.jar与slf4j-nop-1.5.8.jar实现日志输出的,下面我们要做的是先下载一个叫log4j-1.2.14.jar,用这个包替代原来的slf4j-nop-1.5.8.jar。 2....

aqu-spring
2013/09/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
4
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部