【问题标题】:hibernate4.1 + spring3.2 + boneCPhibernate4.1 + spring3.2 + boneCP
【发布时间】:2014-09-17 04:26:27
【问题描述】:

应用上下文看起来像

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="packagesToScan" value="com.some.domain.to.scan" /> 
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.connection.driver_class">oracle.jdbc.pool.OracleConnectionPoolDataSource</prop>
            <prop key="hibernate.connection.url">${url}</prop>
            <prop key="hibernate.connection.username">${username}</prop>
            <prop key="hibernate.connection.password">${password}</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">false</prop>
            <prop key="hibernate.cache.use_second_level_cache">${hibernate.l2_cache.enabled}</prop>
            <prop key="hibernate.cache.use_query_cache">${hibernate.l2_cache.enabled}</prop>
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
            <prop key="hibernate.cache.provider_configuration_file_resource_path">/settings/ehcache-hibernate-settings.xml</prop>
            <prop key="net.sf.ehcache.configurationResourceName">/settings/ehcache-hibernate-settings.xml</prop>
            <prop key="hibernate.connection.provider_class">com.jolbox.bonecp.provider.BoneCPConnectionProvider</prop>
            <prop key="bonecp.idleMaxAge">240</prop>
            <prop key="bonecp.idleConnectionTestPeriod">60</prop>
            <prop key="bonecp.partitionCount">2</prop>
            <prop key="bonecp.acquireIncrement">5</prop>
            <prop key="bonecp.maxConnectionsPerPartition">20</prop>
            <prop key="bonecp.minConnectionsPerPartition">10</prop>
            <prop key="bonecp.statementsCacheSize">50</prop>
            <prop key="bonecp.releaseHelperThreads">2</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    <qualifier value="dbdomain"/>
</bean>

而 gradle 导入包括最新版本的 bonecp-provider、bonecp 和 bonecp-spring 以及 spring 3.2.0.RELEASE 和 hibernate 4.1.12.Final

似乎一切就绪,但是当我运行应用程序(码头服务器)时,它会抛出以下异常

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [app/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/connection/ConnectionProvider
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:589)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)

任何有关如何正确设置bonecp 的帮助都会有所帮助。

更新

在使用 bonecp 解决依赖问题后,我收到如下新错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [app/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)

还对应用程序上下文进行了一些小的更改,但我相信它们与我遇到的错误无关

变化是

<prop key="bonecp.idleMaxAge">240</prop>
<prop key="bonecp.idleConnectionTestPeriod">60</prop>

<prop key="bonecp.idleMaxAgeInMinutes">5</prop>
<prop key="bonecp.idleConnectionTestPeriodInMinutes">3</prop>

【问题讨论】:

  • BoneCP版本需要与Hibernate版本匹配,另见this question
  • 我正在使用带有休眠 4.1.12 的 bonecp 0.8.0.RELEASE

标签: java spring hibernate connection-pooling bonecp


【解决方案1】:

该类已移至以下包:

org.hibernate.engine.jdbc.connections.spi

如果您使用的是 Maven,请运行以下命令:

mvn dependency:tree

并检查您的项目中有多少个 hibernate-core 版本。您可能希望从 spring 依赖项声明中排除休眠依赖项。

你的问题是由这个BoneCP issue引起的。

所以你需要更新到 BoneCP 0.80。

对于 XADataSource 解包异常,您应该尝试 this solution

【讨论】:

  • 只是为了澄清:hibernate.connection.provider_class 已移至 org.hibernate.engine.jdbc.connections.spi?
  • 对于休眠核心版本,我只有 4.1.12.Final 我运行了 'gradle dependencies | grep hibernate-core' 得到 '+--- org.hibernate:hibernate-core:4.1.12.Final | \--- org.hibernate:hibernate-core:4.1.12.Final () +--- org.hibernate:hibernate-core:4.1.12.Final | \--- org.hibernate:hibernate-core:4.1.12.Final () +--- org.hibernate:hibernate-core:4.1.12.Final | \--- org.hibernate:hibernate-core:4.1.12.Final () +--- org.hibernate:hibernate-core:4.1.12.Final | \--- org.hibernate:hibernate-core:4.1.12.Final ()'
  • @abroy 已通过相关文档验证,带有 bonecp-provider JAR 的 BoneCP 0.8.0-RELEASE 应该适用于 Hibernate 4.1。 BoneCP 提供程序源是hereConnectionProvider 的 Hibernate 4.1 ApiDocs 是 here
  • @vanOekel 似乎我的依赖树中也有 bonecp0.7.1.RELEASE ,但将它们清除了。现在只有 0.8.0,当我再次运行我的服务器时说,这次我得到了一个不同的错误,因为以下'上下文初始化失败 org.springframework.beans.factory.BeanCreationException:错误创建名称为'transactionManager'的bean类路径资源 [app/applicationContext.xml]:init 方法调用失败;嵌套异常是 org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]'
  • @VladMihalcea 关于解包异常,我不确定您指出的解决方案是否是实际问题,但我确实更改了 com.some.domain.to.scan/list> property> 根据提供的解决方案。但仍然得到同样的错误
猜你喜欢
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2012-03-08
  • 2013-10-10
  • 2015-01-29
相关资源
最近更新 更多