`

今天升级hibernate3.2GA遇到一个很奇怪的问题(谢谢大家,已解决)

阅读更多
今天看到hibernate3.2ga版出来,赶紧更新。

我原来用的是hibernate3.1.3版本+Spring2.0,结果更新后,我配置的c3p0连接池是死活也连接不上了。

数据库是mysql,它在那里一直"Building new Hibernate SessionFactory".

一口气创建了好多。输出信息是这样的:

....-Building new Hibernate SessionFactory
....-Building new Hibernate SessionFactory
....-Building new Hibernate SessionFactory
....-Building new Hibernate SessionFactory
....-Building new Hibernate SessionFactory

然后报错:

WARN  com.mchange.v2.resourcepool.BasicResourcePool - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@16528a2 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30).
2006-10-18 02:07:03,125 [main] WARN  org.hibernate.cfg.SettingsFactory - Could not obtain connection metadata
java.sql.SQLException: Connections could not be acquired from the underlying database!


把jar包换成hibernate3.1.3.jar就完全正常,用hibernate3.2GA的包就出上面的错误。


我的配置如下:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>/domain/Admin.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!--connection-->
<prop key="hibernate.connection.driver_class">${hibernate.connection.driver_class}</prop>
<prop key="hibernate.connection.url">${hibernate.connection.url}</prop>
<prop key="hibernate.connection.username">${hibernate.connection.username}</prop>
<prop key="hibernate.connection.password">${hibernate.connection.password}</prop>
<prop key="hibernate.useUnicode">${hibernate.useUnicode}</prop>
<prop key="hibernate.characterEncoding">${hibernate.characterEncoding}</prop>
<prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.default-lazy-init">${hibernate.default-lazy-init}</prop>
<prop key="hibernate.connection.provider_class">${hibernate.connection.provider_class}</prop>
<!--Connection Pooling-->
<prop key="hibernate.c3p0.max_size">${hibernate.c3p0.max_size}</prop>
<prop key="hibernate.c3p0.min_size">${hibernate.c3p0.min_size}</prop>
<prop key="hibernate.c3p0.timeout">${hibernate.c3p0.timeout}</prop>
<prop key="hibernate.c3p0.max_statements">${hibernate.c3p0.max_statements}</prop>
<prop key="hibernate.c3p0.idle_test_period">${hibernate.c3p0.idle_test_period}</prop>
<prop key="hibernate.c3p0.acquire_increment">${hibernate.c3p0.acquire_increment}</prop>
<prop key="hibernate.c3p0.validate">${hibernate.c3p0.validate}</prop>
</props>
</property>
</bean>



实在是不明白这两个版本的hibernate为什么会造成这种情况,不知道大家有没有出现过这种情况,怎么解决这个问题呢???




问题已解决,谢谢大家!

产生的问题是因为没有配置hibernate.cache.provider_class,很奇怪的问题,在3.1.3版本中缓存提供类并非必须的。而在3.2版本中,则必须配置才可以正常创建连接池。

:) 万分感谢楼下各位的热心!!

分享到:
评论
6 楼 chinarefers 2006-10-23  
谢谢Allen,hibernate的二级缓存定义应该是默认为true的吧,因为我并没有特别配置二级缓存。

最近一直是直接使用最新的包,没有看Reference,嘿嘿。

看到你贴出来的这段,我才发现有这个改变,多谢多谢!!

5 楼 Allen 2006-10-19  
chinarefers 写道
问题已解决,谢谢大家!

产生的问题是因为没有配置hibernate.cache.provider_class,很奇怪的问题,在3.1.3版本中缓存提供类并非必须的。而在3.2版本中,则必须配置才可以正常创建连接池。


今天看了一下Hibernate3.2的Reference,果然如此:

引用
A Hibernate Session is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (SessionFactory-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data).

You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements org.hibernate.cache.CacheProvider using the property hibernate.cache.provider_class. Hibernate comes bundled with a number of built-in integrations with open-source cache providers (listed below); additionally, you could implement your own and plug it in as outlined above. Note that versions prior to 3.2 defaulted to use EhCache as the default cache provider; that is no longer the case as of 3.2.

就是说在3.2版本中,如果hibernate.cache.use_second_level_cache被设定为true,那么我们需要自己设定一下hibernate.cache.provider_class的类名。因为现在的Hibernate已经不再有默认的hibernate.cache.provider_class了。
4 楼 chinarefers 2006-10-18  
c3p0: c3p0-0.9.1-pre9.jar
MySql: mysql-5.0.26

当我换DBCP和spring内置的连接池也出现这个情况。

超级奇怪! 实在是晕了。

3 楼 Allen 2006-10-18  
chinarefers 写道
难道是和MySql的版本有关?


那你用的MySQL数据库版本是?JDBC驱动版本是?

你的c3p0版本是?
可以参考:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2032
2 楼 rrsy23 2006-10-18  
我用DBCP就没有问题
c3p0我一直觉得不爽,个人看法
不知道你为什么选择c3p0
1 楼 chinarefers 2006-10-18  
难道是和MySql的版本有关?

相关推荐

    struts1.2 + spring2.5 + hibernate3.2框架demo

    Hibernate3.2则是一个对象关系映射(ORM)工具,简化了数据库操作。 首先,Struts1.2框架的核心是ActionServlet,它作为MVC模式中的控制器,接收HTTP请求并调用相应的Action类来处理业务逻辑。ActionForm对象用于...

    hibernate3.2

    Hibernate 3.2 是一个非常重要的版本,它是Java开发领域中流行的对象关系映射(ORM)框架之一。这个版本发布于2006年,带来了许多改进和新特性,极大地提升了开发人员在处理数据库操作时的效率和灵活性。以下是关于...

    Hibernate3.2jar包

    总的来说,Hibernate3.2是一个强大的工具,极大地提高了Java开发中数据操作的效率和便捷性。虽然现在的Hibernate已经发展到5.x版本,但对于一些旧项目或者学习历史版本的开发者来说,理解并掌握Hibernate3.2仍然是...

    开发框架 hibernate3.2

    综上所述,Hibernate 3.2是一个强大而灵活的ORM框架,它极大地简化了Java开发中的数据持久化工作,让开发者更专注于业务逻辑,而不是底层的数据库操作。通过熟练掌握Hibernate,可以大幅提升开发效率并减少出错概率...

    hibernate3.2 jar包

    Hibernate 3.2 是一个非常重要的Java持久化框架,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。这个核心jar包包含了实现Hibernate功能所需的所有基本类和接口,是开发...

    hibernate3.2lib及源码jar包纯净版

    源码可以帮助开发者更好地掌握ORM技术,提高开发效率,并且在遇到问题时能更快地定位和解决。 Hibernate 3.2是一个较早的版本,但在当时已经相当成熟,具有以下特点: 1. **对象关系映射**:它提供了从Java对象到...

    Hibernate3.2整套源码

    SessionFactory是线程安全的,通常在整个应用生命周期中只创建一个。 - **Session**:它是与数据库交互的前线接口,用于执行CRUD操作(创建、读取、更新和删除)。 - **Query和Criteria API**:这两者提供了执行...

    hibernate3.2-api

    hibernate3.2的chm格式api手册。

    Hibernate高官谈Hibernate3.2新特性.html

    Hibernate高官谈Hibernate3.2新特性

    hibernate_3.2官方开发包

    Hibernate 是一个著名的开源对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方式,使得在Java应用程序中操作数据库变得更加简单。这个“hibernate_3.2官方开发包”包含了所有你需要开发基于...

    some simple demo about hibernate3.2 and spring2.5

    标题 "some simple demo about hibernate3.2 and spring2.5" 暗示这是一个关于如何集成和使用 Hibernate 3.2 和 Spring 2.5 的简单演示项目。这两个库在Java开发中扮演着重要角色,Hibernate是流行的对象关系映射...

    Hibernate3.2_API

    2. **Hibernate3.2.chm**:这是一个帮助文件,包含了Hibernate 3.2版本的API详细说明。CHM(Compiled HTML Help)格式是一种微软的Windows平台下的帮助文件格式,方便用户快速查找和了解各种类、接口和方法。 3. **...

    hibernate-3.2源代码

    《深入剖析Hibernate 3.2源代码...通过深入学习Hibernate 3.2的源代码,开发者不仅可以了解其实现原理,还能在遇到问题时更快定位,进行定制化开发。同时,这也有助于理解ORM框架的工作方式,提升软件设计和开发能力。

    Hibernate3.2官方中文参考手册 高清晰 pdf

    Hibernate 是一个开源的对象关系映射(ORM)框架,用于 Java 应用程序中的数据库交互。它提供了一种将 Java 对象映射到数据库表的方式,并简化了数据持久化的操作。Hibernate 3.2 版本作为该系列的重要版本之一,在...

    Hibernate3.2连接池

    Hibernate 3.2虽然自带了一个连接池,但由于性能和稳定性问题,官方并不推荐使用。它默认的连接池在处理大量请求或需要高容错能力的应用场景下表现不佳,可能存在BUG。尽管如此,配置方法如下: ```xml ...

    Hibernate3.2官方中文参考手册.pdf+Hibernate.pdf(Hibernate的学习资料)

    Hibernate3.2是其发展中的一个重要版本,提供了许多改进和新特性。 在《Hibernate3.2官方中文参考手册》中,我们可以深入学习到以下关键知识点: 1. **对象关系映射(ORM)基础**:ORM的核心思想是将数据库中的...

    Hibernate 3.2 中文参考手册

    Hibernate 3.2 中文参考手册 博文链接:https://luxiangdong.iteye.com/blog/214583

    hibernate 3.2卷二

    hibernate 3.2 hibernate 3.2 hibernate 3.2 hibernate 3.2 hibernate 3.2

    hibernate3.2 源码

    这个压缩包包含的是Hibernate 3.2版本的源代码,这是一个非常重要的里程碑,因为它在当时引入了许多改进和新特性,对Java社区产生了深远的影响。 在Hibernate 3.2中,有几个关键的知识点值得一提: 1. **对象关系...

Global site tag (gtag.js) - Google Analytics