Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠二级缓存&;朱尼特_Java_Hibernate_Junit_Ehcache_Hibernate Cache - Fatal编程技术网

Java 休眠二级缓存&;朱尼特

Java 休眠二级缓存&;朱尼特,java,hibernate,junit,ehcache,hibernate-cache,Java,Hibernate,Junit,Ehcache,Hibernate Cache,我正在尝试将SecondLevelCache与hibernate一起使用。这是我的xml配置文件: <persistence-unit name="EntityTestHibernate" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.show_sql" value="false"/> &

我正在尝试将SecondLevelCache与hibernate一起使用。这是我的xml配置文件:

    <persistence-unit name="EntityTestHibernate" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/DB_NAME"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
            <property name="hibernate.connection.username" value="USERNAME"/>
            <property name="hibernate.connection.password" value="PASSWORD"/>            
            <property name="hibernate.cache.use_second_level_cache" value="true"/>             
            <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> 
            <property name="hibernate.cache.provider_configuration_file_resource_path" value="/test/ehcache.xml" />     
        </properties>
    </persistence-unit>
当我运行UnitTest时,我有以下错误(如果我在@DirtiesContext上设置或不设置注释,问题是相同的):

net.sf.ehcache.CacheException:同一VM中已存在另一个同名为“cacheTest”的CacheManager。请在配置中为每个CacheManager提供唯一的名称,或执行以下操作之一:
1.使用CacheManager.create()静态工厂方法之一重用具有相同名称的相同CacheManager,或者在必要时创建一个
2.在创建具有相同名称的新cacheManager之前,请关闭先前的cacheManager。
现有CacheManager的来源是:DefaultConfigurationSource[ehcache.xml或ehcache-failsafe.xml]
位于net.sf.ehcache.CacheManager.assertNoCacheManagerExistsWithSameName(CacheManager.java:573)
位于net.sf.ehcache.CacheManager.init(CacheManager.java:389)
位于net.sf.ehcache.CacheManager.(CacheManager.java:371)
位于net.sf.ehcache.hibernate.EhCacheProvider.start(EhCacheProvider.java:93)
位于org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
位于org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:238)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
位于org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:850)
位于org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:48)
位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:32)

我刚刚用HibernateXML文件配置了CacheManager,我不知道如何管理这个错误。我在某个地方读到,我必须使用RegionFactory,但在ehcache文档中,这不是最佳实践。我怎样才能以正确的方式解决我的问题?

不确定您在哪里看到使用RegionFactory不是最佳实践……请查看ehcache文档,这正是他们说您应该使用的

此外,您应该使用SingletoneCacheRegionFactory,它应该修复junit问题(singleton意味着只有一个缓存管理器…因此没有两个缓存管理器具有相同的缓存名称,如异常中所示)

net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

请注意:对于Hibernate 4,请使用org.Hibernate.cache.ehcache.SingletonEhCacheRegionFactory而不是net.sf.ehcache.Hibernate.SingletonEhCacheRegionFactory


希望这会有所帮助。

不确定您在哪里看到使用RegionFactory不是最佳实践……请查看ehcache文档,他们说您应该使用的正是这些文档

此外,您应该使用SingletoneCacheRegionFactory,它应该修复junit问题(singleton意味着只有一个缓存管理器…因此没有两个缓存管理器具有相同的缓存名称,如异常中所示)

net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

请注意:对于Hibernate 4,请使用org.Hibernate.cache.ehcache.SingletonEhCacheRegionFactory而不是net.sf.ehcache.Hibernate.SingletonEhCacheRegionFactory

希望有帮助

<ehcache name="cacheTest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    <defaultCache eternal="true" maxElementsInMemory="100" overflowToDisk="false" />
    <cache  name="entityCache" 
            maxEntriesLocalHeap="50"
            eternal="false"
            timeToLiveSeconds="120"         
    />
</ehcache>
@Cache(region="entityCache", usage=CacheConcurrencyStrategy.READ_WRITE )
net.sf.ehcache.CacheException: Another CacheManager with same name 'cacheTest' already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcache-failsafe.xml ]
    at net.sf.ehcache.CacheManager.assertNoCacheManagerExistsWithSameName(CacheManager.java:573)
    at net.sf.ehcache.CacheManager.init(CacheManager.java:389)
    at net.sf.ehcache.CacheManager.<init>(CacheManager.java:371)
    at net.sf.ehcache.hibernate.EhCacheProvider.start(EhCacheProvider.java:93)
    at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:238)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:850)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)