Hibernate二级缓存错误(Spring 4,Hibernate 4) [英] Error on hibernate second level caching (Spring 4, Hibernate 4)

查看:118
本文介绍了Hibernate二级缓存错误(Spring 4,Hibernate 4)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



调用init方法失败;嵌套的异常是org.hibernate.service.spi.ServiceException:无法创建请求的服务[org.hibernate.engine.spi.CacheImplementor]

  org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:创建名为'itemController'的bean时出错:注入自动装配依赖失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装入字段:com.shindi.ippan.interfaces.IService com.shindi.ippan.controller.ItemController.service;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'itemService'的bean时出错:注入自动装配依赖失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装入字段:com.shindi.ippan.interfaces.IRepository com.shindi.ippan.service.ItemService.repository;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'itemRepository'的bean时出错:注入自动装配依赖失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装入字段:protected org.hibernate.SessionFactory com.shindi.ippan.repository.AbstractRepository.sessionFactory;嵌套的异常是org.springframework.beans.factory.BeanCreationException:在文件[D:\DEV\OTHER_DEV\Resources\Workspaces\repo\api\ippan-api]中定义名称为'sessionFactory' \target\classes\META-INF\\\spring\context\application.xml]:调用init方法失败;嵌套的异常是org.hibernate.service.spi.ServiceException:无法创建请求的服务[org.hibernate.engine.spi.CacheImplementor] 
at org.apache.catalina.core.StandardContext.start(StandardContext.java: 5920)
at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com .sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2278)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1924)
at com.sun.enterprise .web.WebApplication.start(WebApplication.java:139)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
at org.glassfish.internal.data.ModuleInfo .start(ModuleInfo.java:291)
在org.glassfish.interna l.data.ApplicationInfo.start(ApplicationInfo.java:352)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:497)
at com.sun.enterprise。 v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
at com.sun.enterprise.v3。 admin.CommandRunnerImpl $ 2 $ 1.run(CommandRunnerImpl.java:527)
at com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2 $ 1.run(CommandRunnerImpl.java:523)$ java.util中的
。 AccessController.doPrivileged(本地方法)
在javax.security.auth.Subject.doAs(Subject.java:356)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 2.execute(CommandRunnerImpl。 java:522)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl。 java:1423)
在com.sun.enterprise.v3.admin.Comma ndRunnerImpl.access $ 1500(CommandRunnerImpl.java:108)
at com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute(CommandRunnerImpl.java:1762)
at com.sun.enterprise.v3 .admin.CommandRunnerImpl $ ExecutionContext.execute(CommandRunnerImpl.java:1674)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com.sun.enterprise .v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297)
at com.sun.enterprise .v3.services.impl.ContainerMapper.service(ContainerMapper.java:246)
在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
在org.glassfish .grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)$ or
org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
org.glassfish .grizzly.filterchain.ExecutorResolver $ 9 .execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain .java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114 )
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org。 glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:55)
org.glassfish.griz zry.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
位于org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:564)
位于org.glassfish。 grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:745)

我使用的是spring 4和hibernate 4

这里显示的是我的配置。



hibernate.cfg.xml

 < property name =hibernate.cache.region .factory_class> org.hibernate.cache.ehcache.EhCacheRegionFactory< /性> 
< property name =hibernate.cache.use_second_level_cache> true< / property>
< property name =hibernate.cache.use_query_cache> false< / property>
< property name =net.sf.ehcache.configurationResourceName> /ehcache.xml< / property>

< mapping class =com.shindi.ippan.entity.Item>< / mapping>
< mapping class =com.shindi.ippan.entity.UserAccount>< / mapping>
< mapping class =com.shindi.ippan.entity.Role>< / mapping>

pom.xml

 <! -  Spring and Transactions  - > 
< dependency>
< groupId> org.springframework< / groupId>
< artifactId> spring-core< / artifactId>
< version> 4.2.0.RELEASE< / version>
< /依赖关系>

< dependency>
< groupId> org.springframework< / groupId>
< artifactId> spring-webmvc< / artifactId>
< version> 4.2.0.RELEASE< / version>
< /依赖关系>

< dependency>
< groupId> org.springframework< / groupId>
< artifactId> spring-orm< / artifactId>
< version> 4.2.0.RELEASE< / version>
< /依赖关系>

< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-ehcache< / artifactId>
< version> 4.1.9.Final< / version>
<排除项>
<排除>
< groupId> net.sf.ehcache< / groupId>
< artifactId> ehcache-core< / artifactId>
< /排除>
< /排除>
< /依赖关系>

< dependency>
< groupId> net.sf.ehcache< / groupId>
< artifactId> ehcache< / artifactId>
< version> 2.7.0< / version>
< /依赖关系>

< dependency>
< groupId> net.sf.ehcache< / groupId>
< artifactId> ehcache-core< / artifactId>
< version> 2.5.7< / version>
< /依赖关系>

applicationContext.xml

 < bean id =dataSourceclass =org.apache.commons.dbcp2.BasicDataSourcedestroy-method =close> 
< property name =driverClassNamevalue =$ {jdbc.driverClassName}/>
< property name =urlvalue =$ {jdbc.url}/>
< property name =usernamevalue =$ {jdbc.username}/>
< property name =passwordvalue =$ {jdbc.password}/>
< property name =maxTotalvalue =10000/>
< property name =maxIdlevalue =1/>
< property name =testOnBorrowvalue =true/>
< / bean>

< bean id =sessionFactoryclass =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
< property name =dataSourceref =dataSource/>
< property name =configLocationvalue =$ {hibernate.configLocation}/>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> $ {hibernate.dialect}< / prop>
< prop key =hibernate.show_sql> $ {hibernate.show_sql}< / prop>
< prop key =hibernate.format_sql> $ {hibernate.format_sql}< / prop>
< /道具>
< / property>
< / bean>

< bean id =transactionManagerclass =org.springframework.jdbc.datasource.DataSourceTransactionManager>
< property name =dataSourceref =dataSource/>
< / bean>

<! - spring cache - >
< bean id =cacheManagerclass =org.springframework.cache.support.SimpleCacheManager>
<属性名称=缓存>
< set>
< bean class =org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBeanp:name =task/>
< / set>
< / property>
< / bean>

< bean id =jsonMessageConverterclass =org.springframework.http.converter.json.MappingJackson2HttpMessageConverter/>
< bean class =org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter>
< property name =messageConverters>
< list>
< ref bean =jsonMessageConverter/>
< / list>
< / property>
< / bean>

当我尝试删除以下行时:

 < property name =net.sf.ehcache.configurationResourceName> /ehcache.xml< / property> 

它现在会运行并且出错。但是我的缓存将无法工作。 解决方案

确保您的资源文件夹中包含ehcache.xml,并声明如下:

 < property name =net.sf.ehcache.configurationResourceName> ehcache.xml< / property> 

如果您没有自定义ehcache.xml,则它是可选的,用于支持多个CacheManagers相同的VM。它告诉Hibernate使用哪个配置。

I got an error in my glassfish4 and netbeans.

Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor]

org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.shindi.ippan.interfaces.IService com.shindi.ippan.controller.ItemController.service; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.shindi.ippan.interfaces.IRepository com.shindi.ippan.service.ItemService.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemRepository': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected org.hibernate.SessionFactory com.shindi.ippan.repository.AbstractRepository.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [D:\DEV\OTHER_DEV\Resources\Workspaces\repo\api\ippan-api\target\classes\META-INF\spring\context\application.xml]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5920)
    at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2278)
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1924)
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
    at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
    at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:497)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:356)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
    at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
    at java.lang.Thread.run(Thread.java:745)

I am using a spring 4 and hibernate 4

here's how look like my configuration.

hibernate.cfg.xml

    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_query_cache">false</property>
    <property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property>

    <mapping class="com.shindi.ippan.entity.Item"></mapping>
    <mapping class="com.shindi.ippan.entity.UserAccount"></mapping>
    <mapping class="com.shindi.ippan.entity.Role"></mapping>

pom.xml

<!-- Spring and Transactions -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>4.1.9.Final</version>
        <exclusions>
            <exclusion>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.7.0</version>
    </dependency>

    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>2.5.7</version>
    </dependency>

applicationContext.xml

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="maxTotal" value="10000" />
    <property name="maxIdle" value="1" />
    <property name="testOnBorrow" value="true" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="${hibernate.configLocation}" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<!--spring cache-->
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
        <set>
            <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="task" />
        </set>
    </property>
</bean>

<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jsonMessageConverter" />
        </list>
    </property>
</bean>

when i try to remove the following line:

<property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property>

it will now then run with out errors. but my caching will won't work.

解决方案

Make sure your ehcache.xml on your resources folder and declare it like below:

<property name="net.sf.ehcache.configurationResourceName">ehcache.xml</property>

If you don't have a custom ehcache.xml it's optional and used to support multiple CacheManagers in the same VM. It tells Hibernate which configuration to use.

这篇关于Hibernate二级缓存错误(Spring 4,Hibernate 4)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆