2013-04-11 78 views
0

我正在嘗試使用memcached進行Hibernate Level 2緩存,但尚未能使其工作。我遇到以下異常(java.lang.NoClassDefFoundError:組織/休眠/緩存/ TimestampsRegion)當我火了Tomcat和啓動我的應用程序:使用memcached進行Hibernate L2緩存

javax.servlet.ServletException: Servlet execution threw an exception 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119) 
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.MemberFilter.doFilter(MemberFilter.java:70) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.AuthFilter.doFilter(AuthFilter.java:167) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.LanguageHandlingFilter.doFilter(LanguageHandlingFilter.java:129) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.SsoFilter.doFilter(SsoFilter.java:72) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.SessionStatusFilter.doFilter(SessionStatusFilter.java:41) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.BlackListFilter.doFilter(BlackListFilter.java:36) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.xxx.webapp.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:143) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Thread.java:680) 
Caused by: java.lang.NoClassDefFoundError: org/hibernate/cache/TimestampsRegion 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:247) 
at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138) 
at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:393) 
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:264) 
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283) 
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748) 
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94) 
atorg.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905) 
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890) 
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 

我使用JPA與Hibernate 4.1.7爲提供者。

<property name="hibernate.cache.provider_class" value="com.googlecode.hibernate.memcached.MemcachedCacheProvider" /> 
     <property name="hibernate.cache.use_second_level_cache" value="true" /> 
     <property name="hibernate.cache.region.factory_class" value="com.googlecode.hibernate.memcached.MemcachedRegionFactory"/> 
     <property name="hibernate.cache.use_query_cache" value="true" /> 
     <property name="hibernate.Memcached.servers" value="localhost:11211"/> 
     <property name="hibernate.Memcached.cacheTimeSeconds" value="300"/> 

我使用下面的冬眠相關的jar文件版本和memcached的:對Hibernate L2緩存看起來像我的persistence.xml性質

memcached的-2.3.1.jar 休眠-memcached的-1.6的.jar(從com.googlecode.hibernate.memcached項目的源代碼編譯) SLF4J-1.5.0.jar SLF4J-log4j12-1.5.0.jar

我一直沒能解決這個問題然而。從你們的任何幫助非常感謝。

阿倫

回答

0

這聽起來像你正在使用Hibernate 4.使用Hibernate-memcached的,你應該有HB3。請參閱hibernate-memcached配置:https://code.google.com/p/hibernate-memcached/wiki/Configuration

+0

是的我使用的是休眠4.是否不支持HB4的memcached?有沒有解決方法? – 2013-04-11 16:58:24

+0

你可以試試https://github.com/raykrueger/hibernate-memcached/pull/6 – willome 2013-04-11 18:39:44

1

我知道這是三歲,但這仍然非常相關。您可以在Hibernate 4和5中使用memcached(或彈性緩存中的任何memcache克隆)。我們自己使用4個。

您可以通過此gradle這個依賴性獲得適當的罐子:

compile 'com.github.mihaicostin:hibernate-l2-memcached:1.1.0'

或Maven: <groupId>com.github.mihaicostin</groupId> <artifactId>hibernate-l2-memcached</artifactId> <version>1.1.0</version>

它是最新的,而且運作非常良好。在github上開源。 https://github.com/mihaicostin/hibernate-l2-memcached

作爲一個例子,我們在Bjond的persistence.xml的一個片段。請注意,您需要該區域工廠:

<property name="hibernate.dialect" value="com.bjond.persistence.converter.JsonPostgreSQLDialect"/> 
    <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 
    <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> 

    <property name="hibernate.cache.use_second_level_cache" value="true" /> 
    <property name="hibernate.cache.use_query_cache" value="true" />  
    <property name="hibernate.memcached.REGION.cacheTimeSeconds" value="30"/> 
    <property name="hibernate.cache.region.factory_class" value="com.mc.hibernate.memcached.MemcachedRegionFactory"/> 
    <property name="hibernate.memcached.operationTimeout" value="5000"/> 
    <property name="hibernate.memcached.connectionFactory" value="KetamaConnectionFactory"/> 
    <property name="hibernate.memcached.hashAlgorithm" value="HashAlgorithm.FNV1_64_HASH"/> 
    <property name="hibernate.memcached.servers" value="localhost:11211"/> 
    <property name="hibernate.memcached.cacheTimeSeconds" value="300"/> 
    <property name="hibernate.memcached.clearSupported" value="false"/> 
    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> 
    <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"/> 
    <property name="hibernate.generate_statistics" value="true" />