2014-10-08 110 views
0

我有一个JavaFX应用程序,它工作正常,直到我添加一个2º缓存(ehcache与区域)。在那之后,我开始申请,但我得到这个错误时尝试创建会话工厂:休眠+ c3p0池+ ehcache失败开始

08/10/2014 20:01:40 DEBUG Configuration:1841 - Preparing to build session factory with filters : {} 
08/10/2014 20:01:40 INFO ConnectionProviderInitiator:190 - HHH000130: Instantiating explicit connection provider: org.hibernate.connection.C3P0ConnectionProvider 
Exception in Application start method java.lang.reflect.InvocationTargetException 

这些都是我的文件(我中省略私有数据):

hibernate.cfg:

<property name="javax.persistence.validation.mode">none</property> 
<property name="connection.release_mode">auto</property> 
<property name="current_session_context_class">thread</property> 
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
<property name="show_sql">false</property> 
<property name="format_sql">false</property> 
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property> 
<property name="hibernate.c3p0.acquire_increment">1</property> 
<property name="hibernate.c3p0.min_size">5</property> 
<property name="hibernate.c3p0.max_size">20</property> 
<property name="hibernate.c3p0.timeout">3000</property> 
<property name="hibernate.c3p0.max_statements">50</property> 
<property name="hibernate.c3p0.idle_test_period">300</property> 
<property name="hibernate.cache.use_second_level_cache">true</property> 
<property name="hibernate.cache.use_query_cache">true</property> 
<!-- If I remove this line, I get an error which said something like region name is not defined ---> 
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> 

POM

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<repositories> 
    <repository> 
     <id>terracotta-releases</id> 
     <url>http://www.terracotta.org/download/reflector/releases</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
<dependencies> 
    <dependency>  
     <groupId>net.sf.ehcache</groupId> 
     <artifactId>ehcache</artifactId> 
     <version>2.8.4</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>4.3.6.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.33</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.6.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.3.6.Final</version> 
    </dependency>   
    <dependency> 
     <groupId>org.hibernate.common</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>4.0.5.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.6.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.logging</groupId> 
     <artifactId>jboss-logging</artifactId> 
     <version>3.1.4.GA</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.7</version> 
    </dependency> 
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>xml-apis</groupId> 
     <artifactId>xml-apis</artifactId> 
     <version>2.0.2</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
</dependencies> 
</project> 

ehcache.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="ehcache.xsd" 
     updateCheck="true" monitoring="autodetect" 
     dynamicConfig="true"> 


    <diskStore path="java.io.tmpdir"/> 

    <defaultCache 
     maxEntriesLocalHeap="10000" 
     eternal="false" 
     timeToIdleSeconds="120" 
     timeToLiveSeconds="120" 
     diskSpoolBufferSizeMB="30" 
     maxEntriesLocalDisk="10000000" 
     diskExpiryThreadIntervalSeconds="120" 
     memoryStoreEvictionPolicy="LRU" 
     statistics="false"> 
     <persistence strategy="localTempSwap"/> 
    </defaultCache> 

    <cache name="region1" 
      maxEntriesLocalHeap="10000" 
      maxEntriesLocalDisk="1000" 
      eternal="false" 
      diskSpoolBufferSizeMB="20" 
      timeToIdleSeconds="300" 
      timeToLiveSeconds="600" 
      memoryStoreEvictionPolicy="LFU" 
      transactionalMode="off"> 
     <persistence strategy="localTempSwap"/> 
    </cache> 

</ehcache> 

的HibernateUtil

import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 

public enum Util { 
     INSTANCE; 
    private final SessionFactory sessionFactory; 

    private Util() { 
     Configuration configuration; 
     StandardServiceRegistryBuilder builder; 

     configuration = new Configuration().configure(); 
     builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
     sessionFactory = configuration.buildSessionFactory(builder.build()); 
    } 

    public static Util getInstance() { 
     return INSTANCE; 
    } 

    public SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

} 

当我尝试调试,停在sessionFactory = configuration.buildSessionFactory(builder.build());因为会话回报为空。但如果我删除池,会话的作品。

此外,在所有* .hbm.xml文件中,我通过放置<cache usage="nonstrict-read-write" region="region1"/>来设置缓存。如果我删除区域,启动但我得到一个错误,因为我没有定义一个区域,休眠采用默认名称。

回答

0

最后,我自己解决了这个问题。这里有答案:

hibernate.cfg

<!-- Pool --> 
    <property name="hibernate.c3p0.min_size">5</property> 
    <property name="hibernate.c3p0.max_size">20</property> 
    <property name="hibernate.c3p0.timeout">3000</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">300</property> 
    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <!-- Cache --> 
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property> 
    <property name="hibernate.cache.use_second_level_cache">true</property> 
    <property name="hibernate.cache.use_query_cache">true</property> 
    <property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property> 

注意:如果您在SessionFactory的类中使用一个单,然后用SingletonEhCacheRegionFactory类,如果没有,则使用org.hibernate.cache.ehcache.EhCacheRegionFactory

一些最新的依赖版本与上述配置不兼容,所以我需要在某些情况下使用以前的版本。

<dependencies> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>4.3.6.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.8.2</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.33</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.mchange</groupId> 
     <artifactId>mchange-commons-java</artifactId> 
     <version>0.2.7</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.6.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.3.6.Final</version> 
    </dependency>   
    <dependency> 
     <groupId>org.hibernate.common</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>4.0.5.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.5.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.logging</groupId> 
     <artifactId>jboss-logging</artifactId> 
     <version>3.1.4.GA</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.7</version> 
    </dependency> 
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.2</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.logging</groupId> 
     <artifactId>jboss-logging-annotations</artifactId> 
     <version>1.2.0.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.spec.javax.transaction</groupId> 
     <artifactId>jboss-transaction-api_1.2_spec</artifactId> 
     <version>1.0.0.Final</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.mchange</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.2.1</version> 
     <scope>compile</scope> 
     <type>jar</type> 
    </dependency> 

而且ehcache.xml中具有高速缓存配置:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="ehcache.xsd" 
     updateCheck="true" monitoring="autodetect" 
     dynamicConfig="true"> 

    <diskStore path="java.io.tmpdir/ehcache" /> 

    <defaultCache maxEntriesLocalHeap="10000" eternal="false" 
        timeToIdleSeconds="120" timeToLiveSeconds="120" diskSpoolBufferSizeMB="30" 
        maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="120" 
        memoryStoreEvictionPolicy="LRU" statistics="true"> 
     <persistence strategy="localTempSwap" /> 
    </defaultCache> 

    <cache name="org.hibernate.cache.internal.StandardQueryCache" 
      maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120"> 
     <persistence strategy="localTempSwap" /> 
    </cache> 

    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache" 
      maxEntriesLocalHeap="5000" eternal="true"> 
     <persistence strategy="localTempSwap" /> 
    </cache> 
</ehcache> 

注意:此文件的工作不错,但因为我不指定缓存当前豆类日志报告警告,因此缓存取默认配置。另外,我得到了mcach无法找到的mchange依赖文件的一些警告,但它确实不是错误,所以不要担心这种警告。