Apache-Ignite整合为Hibernate第二级缓存无法启动? [英] Apache-Ignite integration as Hibernate 2nd level cache not starting?

查看:162
本文介绍了Apache-Ignite整合为Hibernate第二级缓存无法启动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在我的项目中将Apache Ignite设置为第二级Hibernate缓存提供程序,但我收到了一个奇怪的异常。



配置如下:


  1. POM.xml

新增

 < spring.version> 4.3.0.RELEASE< /spring.version> 
< hibernate.version> 4.3.8.Final< /hibernate.version>
< ignite.version> 1.6.0< /ignite.version>

< repositories>
< repository>
< id> GridGain外部储存库< / id>
< url> http://www.gridgainsystems.com/nexus/content/repositories/external< / url>
< / repository>
< / repositories>

< dependency>
< groupId> org.apache.ignite< / groupId>
< artifactId> ignite-core< / artifactId>
< version> $ {ignite.version}< / version>
< /依赖关系>

< dependency>
< groupId> org.apache.ignite< / groupId>
< artifactId> ignite-spring< / artifactId>
< version> $ {ignite.version}< / version>
< /依赖关系>

< dependency>
< groupId> org.apache.ignite< / groupId>
< artifactId> ignite-hibernate< / artifactId>
< version> $ {ignite.version}< / version>
< /依赖关系>




  1. Spring Hibernate配置文件



     <! -  Hibernate SessionFactory  - > 
    < bean id =sessionFactoryHibernateclass =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
    < property name =dataSourceref =dataSource>< / property>
    < property name =hibernateProperties>
    <道具>
    < prop key =hibernate.dialect> org.hibernate.dialect.MySQL5Dialect< / prop>
    < prop key =hibernate.hbm2ddl.auto> true< / prop>
    < prop key =hibernate.format_sql> true< / prop>
    < prop key =hibernate.show_sql> true< / prop>
    < prop key =hibernate.cache.use_query_cache> true< / prop>
    < prop key =hibernate.generate_statistics> true< / prop>
    < prop key =hibernate.cache.use_second_level_cache> true< / prop>
    < prop key =hibernate.cache.region.factory_class> org.apache.ignite.cache.hibernate.HibernateRegionFactory< / prop>
    < prop key =org.apache.ignite.hibernate.grid_name> hibernate-grid< / prop>
    < prop key =org.apache.ignite.hibernate.default_access_type> READ_ONLY< / prop>
    < /道具>
    < / property>
    < property name =packagesToScanvalue =com.entity>< / property>


    1. ignite-configuration.xml





  2.  < beans xmlns =http://www.springframework.org/schema/beans
    xmlns:xsi =http://www.w3.org / 2001 / XMLSchema-instance
    xsi:schemaLocation =
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans的.xsd>

    <! - 原子缓存的基本配置。 - >
    < bean id =atomic-cacheclass =org.apache.ignite.configuration.CacheConfigurationabstract =true>
    < property name =cacheModevalue =PARTITIONED/>
    < property name =atomicityModevalue =ATOMIC/>
    < property name =writeSynchronizationModevalue =FULL_SYNC/>
    < / bean>

    <! - 事务性缓存的基本配置。 - >
    < bean id =transactional-cacheclass =org.apache.ignite.configuration.CacheConfigurationabstract =true>
    < property name =cacheModevalue =PARTITIONED/>
    < property name =atomicityModevalue =TRANSACTIONAL/>
    < property name =writeSynchronizationModevalue =FULL_SYNC/>
    < / bean>

    < bean id =ignite.cfgclass =org.apache.ignite.configuration.IgniteConfiguration>
    <! -
    指定缓存网格的名称(应该与Hibernate配置中的
    一一对应)。
    - >
    < property name =gridNamevalue =hibernate-grid/>

    <! -
    指定每个L2缓存区域的缓存配置(对应
    的全部类名或完整的关联名)。
    - >
    < property name =cacheConfiguration>
    < list>
    <! -
    实体高速缓存的配置。
    - >
    <! - < bean parent =transactional-cache>
    < property name =namevalue =com.mycompany.MyEntity1/>
    < / bean>
    < bean parent =transactional-cache>
    < property name =namevalue =com.mycompany.MyEntity2/>
    < / bean>
    < bean parent =transactional-cache>
    < property name =namevalue =com.mycompany.MyEntity1.children/>
    < / bean>
    - >
    <! - 更新时间戳缓存的配置。 - >
    < bean parent =atomic-cache>
    < property name =namevalue =org.hibernate.cache.spi.UpdateTimestampsCache/>
    < / bean>

    <! - 配置查询结果缓存。 - >
    < bean parent =atomic-cache>
    < property name =namevalue =org.hibernate.cache.internal.StandardQueryCache/>
    < / bean>
    < / list>
    < / property>

    < / bean>

    < / beans>





    1. 实体Class




      import java.io.Serializable; 

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Index;
    import javax.persistence.Table;

    导入org.hibernate.annotations.Cache;
    import org.hibernate.annotations.CacheConcurrencyStrategy;
    $ b $ @Entity
    @Table(name =USER_TYPE,indexes = {
    @Index(columnList =TYPE_SHORT_NAME,name =TYPE_SHORT_NAME_UNIQUE_idx,unique = true), })
    @Cache(usage = CacheConcurrencyStrategy.READ_ONLY,region =userType)

    public class UserType implements Serializable {

    private static final long serialVersionUID = - 628308304752474026L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name =USER_TYPE_ID)
    private int userTypeId;

    @Column(name =TYPE_SHORT_NAME,length = 20,nullable = false)
    private String typeShortName;

    @Column(name =TYPE_LONG_NAME,length = 255)
    private String typeLongName;
    $ b public public UserType(){
    }
    $ b $ public UserType(int userTypeId,String typeShortName,String typeLongName){
    this.userTypeId = userTypeId;
    this.typeShortName = typeShortName;
    this.typeLongName = typeLongName;
    }

    @Override
    public int hashCode(){
    final int prime = 31;
    int result = 1;
    result = prime * result +((typeLongName == null)?0:typeLongName.hashCode());
    result = prime * result +((typeShortName == null)?0:typeShortName.hashCode());
    result = prime * result + userTypeId;
    返回结果;

    $ b @Override
    public boolean equals(Object obj){
    if(this == obj)
    return true;
    if(obj == null)
    return false;
    if(!(obj instanceof UserType))
    return false;
    UserType other =(UserType)obj;
    if(typeLongName == null){
    if(other.typeLongName!= null)
    return false;
    } else if(!typeLongName.equals(other.typeLongName))
    return false;
    if(typeShortName == null){
    if(other.typeShortName!= null)
    return false;
    } else if(!typeShortName.equals(other.typeShortName))
    return false;
    if(userTypeId!= other.userTypeId)
    return false;
    返回true;

    $ b @Override
    public String toString(){
    returnUserType [userTypeId =+ userTypeId +,typeShortName =+ typeShortName +,typeLongName =
    + typeLongName +];
    }

    public int getUserTypeId(){
    return userTypeId;
    }

    public void setUserTypeId(int userTypeId){
    this.userTypeId = userTypeId;
    }

    public String getTypeShortName(){
    return typeShortName;
    }

    public void setTypeShortName(String typeShortName){
    this.typeShortName = typeShortName;
    }

    public String getTypeLongName(){
    return typeLongName;
    }

    public void setTypeLongName(String typeLongName){
    this.typeLongName = typeLongName;
    }

    }





    1. IgniteAlphaCachemanager




      public interface AlphaCacheManager {
    AlphaCache<?,?> getCache(Class<?> cacheClass);
    }






    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;

    import org.apache.ignite.Ignite;
    导入org.apache.ignite.IgniteCache;
    import org.apache.ignite.Ignition;
    import org.springframework.stereotype.Repository;


    @Repository
    public class IgniteAlphaCacheManager实现AlphaCacheManager {

    private final Ignite ignite;
    private final Map< Class<?>,AlphaCache<?,?>>高速缓存;

    公共IgniteAlphaCacheManager(){
    System.out.println(Init cache ...);
    ignite = Ignition.start(classpath:/spring/ignite-configuration.xml);
    // ignite = Ignition.start();
    caches = new ConcurrentHashMap<>();
    initCaches();
    }

    private void initCaches(){
    IgniteCache< Integer,BaseIdea> igniteCache = ignite.getOrCreateCache(BaseIdea.class.getName());
    AlphaCache< Integer,BaseIdea> ideaCache = new IgniteAlphaCache<>(igniteCache);
    caches.put(BaseIdea.class,ideaCache);
    }

    @Override
    public AlphaCache<?,?> getCache(Class<?> cacheClass){
    return caches.get(cacheClass);
    }

    }

    }


    在tomcat启动时出现异常:

      2016年7月27日1 :46:43 PM org.apache.catalina.core.StandardContext listenerStart 
    SEVERE:将上下文初始化事件发送给类org.springframework.web.context.ContextLoaderListener
    org.springframework.beans的监听器实例。 factory.UnsatisfiedDependencyException:创建名为'hibernateStatisticsFactoryBean'的bean时出错:通过字段'sessionFactoryHibernate'表示的不满意的依赖项:在类路径资源[spring / databaseContext.xml]中定义的名为'sessionFactoryHibernate'的bean创建时出错:init方法的调用失败;嵌套异常是java.lang.IllegalArgumentException:高速缓存未启动:userType;嵌套的异常是org.springframework.beans.factory.BeanCreationException:在类路径资源[spring / databaseContext.xml]中定义名称为'sessionFactoryHibernate'的bean时出错:init方法的调用失败;嵌套异常是java.lang.IllegalArgumentException:高速缓存未启动:userType
    位于org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework .beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:350)
    at org.springframework .beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework .beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)$ or $ $
    work.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)
    在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    。在组织.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    。在组织.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework .context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
    at org.spri ngframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
    处org.apache.catalina org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    。 core.StandardContext.listenerStart(StandardContext.java:4811)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5272)
    at org.apache.catalina.util.LifecycleBase。开始(LifecycleBase.java:147)
    在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1407)
    在org.apache.catalina.core.ContainerBase $ StartChild。调用(ContainerBase.java:1397)
    在java.util.concurrent.FutureTask.run(FutureTask.java:266)
    在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)$ b $在java.lang.Thread.run(Thread.java:745)
    导致:org .springframework.bea ns.factory.BeanCreationException:在类路径资源[spring / databaseContext.xml]中定义名称为'sessionFactoryHibernate'的Bean时创建错误:调用init方法失败;嵌套异常是java.lang.IllegalArgumentException:缓存未启动:userType
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans .factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans .factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)
    处org.springframework org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    。 beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java :197)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:187)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java :1208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1048)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java :1018)
    在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:570)
    ... 24个
    产生的原因:java.lang中。 IllegalArgumentException:缓存未启动:userType
    位于org.apache.ignite.internal.processors.cache.GridCacheProcessor.publicCache(GridCacheProcessor.java:3143)
    位于org.apache.ignite.internal.IgniteKernal。 getCache(免疫球蛋白niteKernal.java:2427)美元,org.apache.ignite.cache.hibernate.HibernateRegionFactory.regionCache(HibernateRegionFactory.java:226 B $ B)
    在org.apache.ignite.cache.hibernate.HibernateRegionFactory.buildEntityRegion( HibernateRegionFactory.java:175)
    在org.hibernate.internal.SessionFactoryImpl。< init>(SessionFactoryImpl.java:364)
    在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859 )
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
    at org.springframework。 beans.factory.support.AbstractAutowireCapableBeanFactory.i nvokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 35 more


    解决方案

    您必须为您的所有区域配置缓存。例如,对于 userType ,您可以将其添加到配置中:

      < bean parent =transactional-cache> 
    < property name =namevalue =userType/>
    < / bean>


    I am trying to set Apache Ignite as the second level Hibernate cache provider in my project but i am getting a strange exception.

    Configurations are as below:

    1. POM.xml

    Added

    <spring.version>4.3.0.RELEASE</spring.version>
    <hibernate.version>4.3.8.Final</hibernate.version>
    <ignite.version>1.6.0</ignite.version>
    
    <repositories>
    <repository>
        <id>GridGain External Repository</id>
        <url>http://www.gridgainsystems.com/nexus/content/repositories/external</url>
    </repository>
    </repositories>
    
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-core</artifactId>
            <version>${ignite.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-spring</artifactId>
            <version>${ignite.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-hibernate</artifactId>
            <version>${ignite.version}</version>
        </dependency>
    

    1. Spring Hibernate Configuration file

      <!-- Hibernate SessionFactory -->
      <bean id="sessionFactoryHibernate" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource"></property>
      <property name="hibernateProperties">
          <props>
              <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
              <prop key="hibernate.hbm2ddl.auto">true</prop>
              <prop key="hibernate.format_sql">true</prop>
              <prop key="hibernate.show_sql">true</prop>
              <prop key="hibernate.cache.use_query_cache">true</prop>
              <prop key="hibernate.generate_statistics">true</prop>
              <prop key="hibernate.cache.use_second_level_cache">true</prop>
              <prop key="hibernate.cache.region.factory_class">org.apache.ignite.cache.hibernate.HibernateRegionFactory</prop>
              <prop key="org.apache.ignite.hibernate.grid_name">hibernate-grid</prop>
              <prop key="org.apache.ignite.hibernate.default_access_type">READ_ONLY</prop>
          </props>
      </property>
      <property name="packagesToScan" value="com.entity"></property>
      

      1. ignite-configuration.xml

        <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- Basic configuration for atomic cache. -->
        <bean id="atomic-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="PARTITIONED"/>
        <property name="atomicityMode" value="ATOMIC"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        </bean>
    
        <!-- Basic configuration for transactional cache. -->
        <bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="PARTITIONED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        </bean>
    
        <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <!-- 
            Specify the name of the caching grid (should correspond to the 
            one in Hibernate configuration).
        -->
        <property name="gridName" value="hibernate-grid"/>
    
        <!-- 
            Specify cache configuration for each L2 cache region (which corresponds 
            to a full class name or a full association name).
        -->
        <property name="cacheConfiguration">
            <list>
                <!--
                    Configurations for entity caches.
                -->
    <!--             <bean parent="transactional-cache">
                    <property name="name" value="com.mycompany.MyEntity1"/>
                </bean>
                <bean parent="transactional-cache">
                    <property name="name" value="com.mycompany.MyEntity2"/>
                </bean>
                <bean parent="transactional-cache">
                    <property name="name" value="com.mycompany.MyEntity1.children"/>
                </bean>
      -->
                <!-- Configuration for update timestamps cache. -->
                <bean parent="atomic-cache">
                    <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
                </bean>
    
                <!-- Configuration for query result cache. -->
                <bean parent="atomic-cache">
                    <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
                </bean>
            </list>
        </property>
    
        </bean>
    
        </beans>
    

    1. Entity Class

    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Index;
    import javax.persistence.Table;
    
    import org.hibernate.annotations.Cache;
    import org.hibernate.annotations.CacheConcurrencyStrategy;
    
    @Entity
    @Table(name = "USER_TYPE", indexes = {
          @Index(columnList = "TYPE_SHORT_NAME", name = "TYPE_SHORT_NAME_UNIQUE_idx", unique = true), })
    @Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region = "userType")
    
    public class UserType implements Serializable {
    
      private static final long serialVersionUID = -628308304752474026L;
    
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "USER_TYPE_ID")
      private int userTypeId;
    
      @Column(name = "TYPE_SHORT_NAME", length = 20, nullable = false)
      private String typeShortName;
    
      @Column(name = "TYPE_LONG_NAME", length = 255)
      private String typeLongName;
    
      public UserType() {
      }
    
      public UserType(int userTypeId, String typeShortName, String typeLongName) {
          this.userTypeId = userTypeId;
          this.typeShortName = typeShortName;
          this.typeLongName = typeLongName;
      }
    
      @Override
      public int hashCode() {
          final int prime = 31;
          int result = 1;
          result = prime * result + ((typeLongName == null) ? 0 : typeLongName.hashCode());
          result = prime * result + ((typeShortName == null) ? 0 : typeShortName.hashCode());
          result = prime * result + userTypeId;
          return result;
      }
    
      @Override
      public boolean equals(Object obj) {
          if (this == obj)
              return true;
          if (obj == null)
              return false;
          if (!(obj instanceof UserType))
              return false;
          UserType other = (UserType) obj;
          if (typeLongName == null) {
              if (other.typeLongName != null)
                  return false;
          } else if (!typeLongName.equals(other.typeLongName))
              return false;
          if (typeShortName == null) {
              if (other.typeShortName != null)
                  return false;
          } else if (!typeShortName.equals(other.typeShortName))
              return false;
          if (userTypeId != other.userTypeId)
              return false;
          return true;
      }
    
      @Override
      public String toString() {
          return "UserType [userTypeId=" + userTypeId + ", typeShortName=" + typeShortName + ", typeLongName="
                  + typeLongName + "]";
      }
    
      public int getUserTypeId() {
          return userTypeId;
      }
    
      public void setUserTypeId(int userTypeId) {
          this.userTypeId = userTypeId;
      }
    
      public String getTypeShortName() {
          return typeShortName;
      }
    
      public void setTypeShortName(String typeShortName) {
          this.typeShortName = typeShortName;
      }
    
      public String getTypeLongName() {
          return typeLongName;
      }
    
      public void setTypeLongName(String typeLongName) {
          this.typeLongName = typeLongName;
      }
    
    }
    

    1. IgniteAlphaCachemanager

    public interface AlphaCacheManager {
    AlphaCache<?, ?> getCache(Class<?> cacheClass);
    }
    
    
    
    
    
    
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    
    import org.apache.ignite.Ignite;
    import org.apache.ignite.IgniteCache;
    import org.apache.ignite.Ignition;
    import org.springframework.stereotype.Repository;
    
    
    @Repository
    public class IgniteAlphaCacheManager implements AlphaCacheManager {
    
    private final Ignite ignite;
    private final Map<Class<?>, AlphaCache<?, ?>> caches;
    
    public IgniteAlphaCacheManager() {
      System.out.println("Init cache...");
        ignite = Ignition.start("classpath:/spring/ignite-configuration.xml");
        //ignite = Ignition.start();
        caches = new ConcurrentHashMap<>();
        initCaches();
    }
    
    private void initCaches() {
      IgniteCache<Integer, BaseIdea> igniteCache = ignite.getOrCreateCache(BaseIdea.class.getName());
      AlphaCache<Integer, BaseIdea> ideaCache = new IgniteAlphaCache<>(igniteCache);
      caches.put(BaseIdea.class, ideaCache);
    }
    
    @Override
    public AlphaCache<?, ?> getCache(Class<?> cacheClass) {
      return caches.get(cacheClass);
    }
    
    }
    
    }
    

    The exception that i get it below on tomcat startup:

    Jul 27, 2016 1:46:43 PM org.apache.catalina.core.StandardContext listenerStart
    SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateStatisticsFactoryBean': Unsatisfied dependency expressed through field 'sessionFactoryHibernate': Error creating bean with name 'sessionFactoryHibernate' defined in class path resource [spring/databaseContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Cache is not started: userType; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactoryHibernate' defined in class path resource [spring/databaseContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Cache is not started: userType
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:350)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4811)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5272)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactoryHibernate' defined in class path resource [spring/databaseContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Cache is not started: userType
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:187)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1048)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1018)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:570)
        ... 24 more
    Caused by: java.lang.IllegalArgumentException: Cache is not started: userType
        at org.apache.ignite.internal.processors.cache.GridCacheProcessor.publicCache(GridCacheProcessor.java:3143)
        at org.apache.ignite.internal.IgniteKernal.getCache(IgniteKernal.java:2427)
        at org.apache.ignite.cache.hibernate.HibernateRegionFactory.regionCache(HibernateRegionFactory.java:226)
        at org.apache.ignite.cache.hibernate.HibernateRegionFactory.buildEntityRegion(HibernateRegionFactory.java:175)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:364)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
        ... 35 more
    

    解决方案

    You have to configure caches for all your regions. For example, for userType you can add this to the configuration:

    <bean parent="transactional-cache">
        <property name="name" value="userType"/>
    </bean>
    

    这篇关于Apache-Ignite整合为Hibernate第二级缓存无法启动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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