2016-02-03 3 views
2

Я пытаюсь настроить Hazelcast (3.5.4) на работу как кеш второго уровня для Hibernate (4.2.8) и как кэш Spring (3.1.2).Конфигурация Hazelcast с пружиной

Я добавил dependecies:

 <dependency> 
      <groupId>com.hazelcast</groupId> 
      <artifactId>hazelcast-hibernate4</artifactId> 
      <version>${hazelcast-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.hazelcast</groupId> 
      <artifactId>hazelcast</artifactId> 
      <version>${hazelcast-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.hazelcast</groupId> 
      <artifactId>hazelcast-spring</artifactId> 
      <version>${hazelcast-version}</version> 
     </dependency> 

Использование documentation в качестве ссылки я настроил мой SessionFactory следующим образом:

 <hz:hibernate-region-factory id="regionFactory" instance-ref="instance" 
           mode="LOCAL" /> 

    <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.somePackage" /> 
     <property name="cacheRegionFactory" ref="regionFactory" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.database">ORACLE</prop> 
       <prop key="hibernate.show_sql">false</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
       <!--enable 2nd level cache--> 
       <prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.use_query_cache">false</prop> 
      </props> 
     </property> 
    </bean> 

К сожалению, это не работает, потому что я получаю следующее исключение:

Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'cacheRegionFactory' of bean class [org.springframework.orm.hibernate4.LocalSessionFactoryBean]: Bean property 'cacheRegionFactory' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 

Я понимаю, что документ ионный пример использует Hibernate 3.

Какова будет подходящая конфигурация для Hibernate 4?

Это мой hazelcast экземпляр конфигурационный файл:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:hz="http://www.hazelcast.com/schema/spring" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.hazelcast.com/schema/spring 
      http://www.hazelcast.com/schema/spring/hazelcast-spring-3.5.xsd"> 

<context:annotation-config /> 

<hz:hazelcast id="instance"> 
    <hz:config> 
     <hz:spring-aware /> 
     <hz:group name="dev" password="password"/> 
     <hz:network port="5701" port-auto-increment="true"> 
      <hz:join> 
       <hz:multicast enabled="true" 
           multicast-group="224.2.2.3" 
           multicast-port="54327"/> 
      </hz:join> 
     </hz:network> 
     <hz:map name="default" 
       in-memory-format="BINARY" 
       backup-count="1" 
       async-backup-count="0" 
       time-to-live-seconds="0" 
       max-idle-seconds="0" 
       eviction-policy="NONE" 
       max-size="0" 
       max-size-policy="PER_NODE" 
       eviction-percentage="30" 
       min-eviction-check-millis="100" 
       merge-policy="com.hazelcast.map.merge.PutIfAbsentMapMergePolicy"/> 
    </hz:config> 
</hz:hazelcast> 

Спасибо!


Позже редактировать

Использование Ибрахим Gurses предложение кажется исправить ошибку неопределенного свойства, но возникла новая проблема:

Если я называю мой hazelcast конфигурационный файл hazelcast.xml я получаю java.lang.IllegalStateException: Failed to load ApplicationContext вызванное:

Caused by: com.hazelcast.config.InvalidConfigurationException: Your xsd schema couldn't be load 

Если я даю ему другое имя, например, hazelcast-config.xml I g эт же исключение, на этот раз вызван следующими причинами:

Caused by: java.util.concurrent.RejectedExecutionException: Task java.[email protected]2cd62003 rejected from [email protected][Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 7] 

импортировать (<import resource="" />) мой hazelcast конфигурационного файла перед SessionFactory конфигурационного файла.

+0

При использовании другого имени для hazelcast конфигурации, как hazelcast-config.xml, проблема, кажется, что hazelcast также загружаются hazelcast-DEFAULT.XML и пытается запустить 2 экземпляра. – Bob

ответ

0

Причина, по которой вы получаете исключение: cacheRegionFactory не определен в org.springframework.orm.hibernate4.LocalSessionFactoryBean. Вы можете выполнить настройку кэша второго уровня без использования cacheRegionFactory.

Это ваш hazelcast экземпляр конфигурационный файл, просто давая имя экземпляра к экземпляру hazelcast с <hz:instance-name>myInstance</hz:instance-name>:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:hz="http://www.hazelcast.com/schema/spring" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.hazelcast.com/schema/spring 
      http://www.hazelcast.com/schema/spring/hazelcast-spring-3.5.xsd"> 

<context:annotation-config /> 

<hz:hazelcast id="instance"> 
    <hz:config> 
     <hz:instance-name>myInstance</hz:instance-name> 
     <hz:spring-aware /> 
     <hz:group name="dev" password="password"/> 
     <hz:network port="5701" port-auto-increment="true"> 
      <hz:join> 
       <hz:multicast enabled="true" 
           multicast-group="224.2.2.3" 
           multicast-port="54327"/> 
      </hz:join> 
     </hz:network> 
     <hz:map name="default" 
       in-memory-format="BINARY" 
       backup-count="1" 
       async-backup-count="0" 
       time-to-live-seconds="0" 
       max-idle-seconds="0" 
       eviction-policy="NONE" 
       max-size="0" 
       max-size-policy="PER_NODE" 
       eviction-percentage="30" 
       min-eviction-check-millis="100" 
       merge-policy="com.hazelcast.map.merge.PutIfAbsentMapMergePolicy"/> 
    </hz:config> 
</hz:hazelcast> 

И это sessionFactory боб последние два свойства, добавленные и HazelcastLocalCacheRegionFactory будет использовать экземпляр, задаваемый с именем myInstance и в этом случае вам не нужно использовать конфигурацию <hz:hibernate-region-factory>.

<bean id="sessionFactory" 
       class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource" /> 
      <property name="packagesToScan" value="com.somePackage" /> 
      <property name="hibernateProperties"> 
       <props> 
        <prop key="hibernate.database">ORACLE</prop> 
        <prop key="hibernate.show_sql">false</prop> 
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
        <!--enable 2nd level cache--> 
        <prop key="hibernate.cache.use_second_level_cache">true</prop> 
        <prop key="hibernate.cache.use_query_cache">false</prop> 
        <prop key="hibernate.cache.region.factory_class">com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory</prop> 
        <prop key="hibernate.cache.hazelcast.instance_name">myInstance</prop> 
       </props> 
      </property> 
    </bean> 
+0

Благодарим вас за быстрый ответ. Не будет ли «жесткое кодирование» имени экземпляра проблемой в кластерном сценарии? Все экземпляры имеют одно и то же имя. – Bob

+0

Нет, это не должно быть проблемой.Имя экземпляра Hazelcast в основном используется для получения справки экземпляра внутри одного и того же jvm с помощью «Hazelcast :: getHazelcastInstanceByName», в кластерном сценарии, имеющем одно и то же имя экземпляра для экземпляров карусели в разных процессах jvm, не должно быть проблемой. –

Смежные вопросы