sessionFactory.getCache().evictCollectionData

classic Classic list List threaded Threaded
6 messages Options
Tomasz Prus Tomasz Prus
Reply | Threaded
Open this post in threaded view
|

sessionFactory.getCache().evictCollectionData

Hello,
I have configured Ignite cache with Hibernate 2L cache for to instances and almost everything works fine but when trying to evict collection data after new entity creation, seems that eviction doesn't work because there is no new entity in that evicted collection. My configs:

<bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="REPLICATED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        <property name="statisticsEnabled" value="true"/>
        <property name="nearConfiguration">
            <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
        </property>
    </bean>

    <bean id="igniteInstance" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="igniteInstanceName" value="myGrid"/>
        <property name="cacheConfiguration"><list>
            <!--
                Configurations for entity caches.
            -->
            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-query-results-region"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-update-timestamps-region"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="lock-cache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="query.ProjectDAO"/>
            </bean>
</list>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="multicastGroup" value="228.10.10.157"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
...
<bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}" />
        <property name="jdbcUrl" value="${hibernate_connection_url}" />
        <property name="user" value="${hibernate.connection.username}" />
        <property name="password" value="${hibernate.connection.password}" />

        <!-- these are C3P0 properties -->
        <property name="acquireIncrement" value="2" />
        <property name="initialPoolSize" value="30" />
        <property name="minPoolSize" value="30" />
        <property name="maxPoolSize" value="50" />
        <property name="maxIdleTime" value="60" />

        <property name="acquireRetryAttempts" value="3" />
        <property name="acquireRetryDelay" value="3000" />

        <property name="idleConnectionTestPeriod" value="3600" />
        <property name="preferredTestQuery" value="SELECT 1 " />

        <property name="maxIdleTimeExcessConnections" value="3600" />
        <property name="maxConnectionAge" value="7200" />

        <property name="checkoutTimeout" value="50000" />

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" depends-on="igniteInstance">

        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>

        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <prop key="hibernate.session_factory_name">our-session-factory</prop>
                <prop key="hibernate.session_factory_name_is_jndi">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.generate_statistics">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.cache.use_query_cache">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.default_access_type">READ_WRITE</prop>
                <prop key="org.apache.ignite.hibernate.ignite_instance_name">myGrid</prop>
            </props>
        </property>

If i use only one instance (one application), eviction works fine. Can You help me?
Tomasz Prus Tomasz Prus
Reply | Threaded
Open this post in threaded view
|

Re: sessionFactory.getCache().evictCollectionData

Interestingly, when i run evictCollectionData twice, it works.

czw., 23 maj 2019 o 13:39 Tomasz Prus <[hidden email]> napisał(a):
Hello,
I have configured Ignite cache with Hibernate 2L cache for to instances and almost everything works fine but when trying to evict collection data after new entity creation, seems that eviction doesn't work because there is no new entity in that evicted collection. My configs:

<bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="REPLICATED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        <property name="statisticsEnabled" value="true"/>
        <property name="nearConfiguration">
            <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
        </property>
    </bean>

    <bean id="igniteInstance" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="igniteInstanceName" value="myGrid"/>
        <property name="cacheConfiguration"><list>
            <!--
                Configurations for entity caches.
            -->
            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-query-results-region"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-update-timestamps-region"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="lock-cache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="query.ProjectDAO"/>
            </bean>
</list>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="multicastGroup" value="228.10.10.157"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
...
<bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}" />
        <property name="jdbcUrl" value="${hibernate_connection_url}" />
        <property name="user" value="${hibernate.connection.username}" />
        <property name="password" value="${hibernate.connection.password}" />

        <!-- these are C3P0 properties -->
        <property name="acquireIncrement" value="2" />
        <property name="initialPoolSize" value="30" />
        <property name="minPoolSize" value="30" />
        <property name="maxPoolSize" value="50" />
        <property name="maxIdleTime" value="60" />

        <property name="acquireRetryAttempts" value="3" />
        <property name="acquireRetryDelay" value="3000" />

        <property name="idleConnectionTestPeriod" value="3600" />
        <property name="preferredTestQuery" value="SELECT 1 " />

        <property name="maxIdleTimeExcessConnections" value="3600" />
        <property name="maxConnectionAge" value="7200" />

        <property name="checkoutTimeout" value="50000" />

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" depends-on="igniteInstance">

        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>

        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <prop key="hibernate.session_factory_name">our-session-factory</prop>
                <prop key="hibernate.session_factory_name_is_jndi">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.generate_statistics">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.cache.use_query_cache">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.default_access_type">READ_WRITE</prop>
                <prop key="org.apache.ignite.hibernate.ignite_instance_name">myGrid</prop>
            </props>
        </property>

If i use only one instance (one application), eviction works fine. Can You help me?
Tomasz Prus Tomasz Prus
Reply | Threaded
Open this post in threaded view
|

Re: sessionFactory.getCache().evictCollectionData

Any ideas?

czw., 23 maj 2019 o 15:22 Tomasz Prus <[hidden email]> napisał(a):
Interestingly, when i run evictCollectionData twice, it works.

czw., 23 maj 2019 o 13:39 Tomasz Prus <[hidden email]> napisał(a):
Hello,
I have configured Ignite cache with Hibernate 2L cache for to instances and almost everything works fine but when trying to evict collection data after new entity creation, seems that eviction doesn't work because there is no new entity in that evicted collection. My configs:

<bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="REPLICATED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        <property name="statisticsEnabled" value="true"/>
        <property name="nearConfiguration">
            <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
        </property>
    </bean>

    <bean id="igniteInstance" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="igniteInstanceName" value="myGrid"/>
        <property name="cacheConfiguration"><list>
            <!--
                Configurations for entity caches.
            -->
            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-query-results-region"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-update-timestamps-region"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="lock-cache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="query.ProjectDAO"/>
            </bean>
</list>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="multicastGroup" value="228.10.10.157"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
...
<bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}" />
        <property name="jdbcUrl" value="${hibernate_connection_url}" />
        <property name="user" value="${hibernate.connection.username}" />
        <property name="password" value="${hibernate.connection.password}" />

        <!-- these are C3P0 properties -->
        <property name="acquireIncrement" value="2" />
        <property name="initialPoolSize" value="30" />
        <property name="minPoolSize" value="30" />
        <property name="maxPoolSize" value="50" />
        <property name="maxIdleTime" value="60" />

        <property name="acquireRetryAttempts" value="3" />
        <property name="acquireRetryDelay" value="3000" />

        <property name="idleConnectionTestPeriod" value="3600" />
        <property name="preferredTestQuery" value="SELECT 1 " />

        <property name="maxIdleTimeExcessConnections" value="3600" />
        <property name="maxConnectionAge" value="7200" />

        <property name="checkoutTimeout" value="50000" />

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" depends-on="igniteInstance">

        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>

        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <prop key="hibernate.session_factory_name">our-session-factory</prop>
                <prop key="hibernate.session_factory_name_is_jndi">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.generate_statistics">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.cache.use_query_cache">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.default_access_type">READ_WRITE</prop>
                <prop key="org.apache.ignite.hibernate.ignite_instance_name">myGrid</prop>
            </props>
        </property>

If i use only one instance (one application), eviction works fine. Can You help me?
ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: sessionFactory.getCache().evictCollectionData

Hello!

Don't see why it won't work for you from the first try. BTW, what's your version? I ask because hibernate_5.3 is unreleased.

Regards,
--
Ilya Kasnacheev


пн, 27 мая 2019 г. в 10:30, Tomasz Prus <[hidden email]>:
Any ideas?

czw., 23 maj 2019 o 15:22 Tomasz Prus <[hidden email]> napisał(a):
Interestingly, when i run evictCollectionData twice, it works.

czw., 23 maj 2019 o 13:39 Tomasz Prus <[hidden email]> napisał(a):
Hello,
I have configured Ignite cache with Hibernate 2L cache for to instances and almost everything works fine but when trying to evict collection data after new entity creation, seems that eviction doesn't work because there is no new entity in that evicted collection. My configs:

<bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="REPLICATED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        <property name="statisticsEnabled" value="true"/>
        <property name="nearConfiguration">
            <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
        </property>
    </bean>

    <bean id="igniteInstance" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="igniteInstanceName" value="myGrid"/>
        <property name="cacheConfiguration"><list>
            <!--
                Configurations for entity caches.
            -->
            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-query-results-region"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-update-timestamps-region"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="lock-cache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="query.ProjectDAO"/>
            </bean>
</list>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="multicastGroup" value="228.10.10.157"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
...
<bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}" />
        <property name="jdbcUrl" value="${hibernate_connection_url}" />
        <property name="user" value="${hibernate.connection.username}" />
        <property name="password" value="${hibernate.connection.password}" />

        <!-- these are C3P0 properties -->
        <property name="acquireIncrement" value="2" />
        <property name="initialPoolSize" value="30" />
        <property name="minPoolSize" value="30" />
        <property name="maxPoolSize" value="50" />
        <property name="maxIdleTime" value="60" />

        <property name="acquireRetryAttempts" value="3" />
        <property name="acquireRetryDelay" value="3000" />

        <property name="idleConnectionTestPeriod" value="3600" />
        <property name="preferredTestQuery" value="SELECT 1 " />

        <property name="maxIdleTimeExcessConnections" value="3600" />
        <property name="maxConnectionAge" value="7200" />

        <property name="checkoutTimeout" value="50000" />

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" depends-on="igniteInstance">

        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>

        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <prop key="hibernate.session_factory_name">our-session-factory</prop>
                <prop key="hibernate.session_factory_name_is_jndi">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.generate_statistics">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.cache.use_query_cache">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.default_access_type">READ_WRITE</prop>
                <prop key="org.apache.ignite.hibernate.ignite_instance_name">myGrid</prop>
            </props>
        </property>

If i use only one instance (one application), eviction works fine. Can You help me?
Tomasz Prus Tomasz Prus
Reply | Threaded
Open this post in threaded view
|

Re: sessionFactory.getCache().evictCollectionData

We use Hibernate 5.3 i our application so I found on this forum, that I can build Ignite from source (master). Lastly I tried also with version 2.7.2 and Hibernate 4 but this wrong behavior still occurs.
Everything works fine for one node but when we add the same cache configuration for second module in our application, new added objects are missing in Hibernate L2 cache in one of two nodes but exists in another (it happens randomly). It is interesting that if i run "evict" twice, everything works good. Maybe Hibernate evict doesn't work as expected our there is some fail between node-to-node communication? I don't think that could be an error in our application because I tried today with Hazelcast cache, and it worked. 

pon., 27 maj 2019 o 14:58 Ilya Kasnacheev <[hidden email]> napisał(a):
Hello!

Don't see why it won't work for you from the first try. BTW, what's your version? I ask because hibernate_5.3 is unreleased.

Regards,
--
Ilya Kasnacheev


пн, 27 мая 2019 г. в 10:30, Tomasz Prus <[hidden email]>:
Any ideas?

czw., 23 maj 2019 o 15:22 Tomasz Prus <[hidden email]> napisał(a):
Interestingly, when i run evictCollectionData twice, it works.

czw., 23 maj 2019 o 13:39 Tomasz Prus <[hidden email]> napisał(a):
Hello,
I have configured Ignite cache with Hibernate 2L cache for to instances and almost everything works fine but when trying to evict collection data after new entity creation, seems that eviction doesn't work because there is no new entity in that evicted collection. My configs:

<bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="REPLICATED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        <property name="statisticsEnabled" value="true"/>
        <property name="nearConfiguration">
            <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
        </property>
    </bean>

    <bean id="igniteInstance" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="igniteInstanceName" value="myGrid"/>
        <property name="cacheConfiguration"><list>
            <!--
                Configurations for entity caches.
            -->
            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-query-results-region"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-update-timestamps-region"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="lock-cache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="query.ProjectDAO"/>
            </bean>
</list>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="multicastGroup" value="228.10.10.157"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
...
<bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}" />
        <property name="jdbcUrl" value="${hibernate_connection_url}" />
        <property name="user" value="${hibernate.connection.username}" />
        <property name="password" value="${hibernate.connection.password}" />

        <!-- these are C3P0 properties -->
        <property name="acquireIncrement" value="2" />
        <property name="initialPoolSize" value="30" />
        <property name="minPoolSize" value="30" />
        <property name="maxPoolSize" value="50" />
        <property name="maxIdleTime" value="60" />

        <property name="acquireRetryAttempts" value="3" />
        <property name="acquireRetryDelay" value="3000" />

        <property name="idleConnectionTestPeriod" value="3600" />
        <property name="preferredTestQuery" value="SELECT 1 " />

        <property name="maxIdleTimeExcessConnections" value="3600" />
        <property name="maxConnectionAge" value="7200" />

        <property name="checkoutTimeout" value="50000" />

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" depends-on="igniteInstance">

        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>

        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <prop key="hibernate.session_factory_name">our-session-factory</prop>
                <prop key="hibernate.session_factory_name_is_jndi">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.generate_statistics">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.cache.use_query_cache">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.default_access_type">READ_WRITE</prop>
                <prop key="org.apache.ignite.hibernate.ignite_instance_name">myGrid</prop>
            </props>
        </property>

If i use only one instance (one application), eviction works fine. Can You help me?
ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: sessionFactory.getCache().evictCollectionData

Hello!

Maybe Hibernate has its own cache (L1?) and it does not get evicted synchronously. Unfortunately since you're using an unreleased module you will have to debug it on your side, I guess. Maybe team up with module's author.

Regards,
--
Ilya Kasnacheev


пн, 27 мая 2019 г. в 16:16, Tomasz Prus <[hidden email]>:
We use Hibernate 5.3 i our application so I found on this forum, that I can build Ignite from source (master). Lastly I tried also with version 2.7.2 and Hibernate 4 but this wrong behavior still occurs.
Everything works fine for one node but when we add the same cache configuration for second module in our application, new added objects are missing in Hibernate L2 cache in one of two nodes but exists in another (it happens randomly). It is interesting that if i run "evict" twice, everything works good. Maybe Hibernate evict doesn't work as expected our there is some fail between node-to-node communication? I don't think that could be an error in our application because I tried today with Hazelcast cache, and it worked. 

pon., 27 maj 2019 o 14:58 Ilya Kasnacheev <[hidden email]> napisał(a):
Hello!

Don't see why it won't work for you from the first try. BTW, what's your version? I ask because hibernate_5.3 is unreleased.

Regards,
--
Ilya Kasnacheev


пн, 27 мая 2019 г. в 10:30, Tomasz Prus <[hidden email]>:
Any ideas?

czw., 23 maj 2019 o 15:22 Tomasz Prus <[hidden email]> napisał(a):
Interestingly, when i run evictCollectionData twice, it works.

czw., 23 maj 2019 o 13:39 Tomasz Prus <[hidden email]> napisał(a):
Hello,
I have configured Ignite cache with Hibernate 2L cache for to instances and almost everything works fine but when trying to evict collection data after new entity creation, seems that eviction doesn't work because there is no new entity in that evicted collection. My configs:

<bean id="transactional-cache" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
        <property name="cacheMode" value="REPLICATED"/>
        <property name="atomicityMode" value="TRANSACTIONAL"/>
        <property name="writeSynchronizationMode" value="FULL_SYNC"/>
        <property name="statisticsEnabled" value="true"/>
        <property name="nearConfiguration">
            <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
        </property>
    </bean>

    <bean id="igniteInstance" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="igniteInstanceName" value="myGrid"/>
        <property name="cacheConfiguration"><list>
            <!--
                Configurations for entity caches.
            -->
            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.spi.UpdateTimestampsCache"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="org.hibernate.cache.internal.StandardQueryCache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-query-results-region"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="default-update-timestamps-region"/>
            </bean>

            <bean parent="transactional-cache">
                <property name="name" value="lock-cache"/>
            </bean>
            <bean parent="transactional-cache">
                <property name="name" value="query.ProjectDAO"/>
            </bean>
</list>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="multicastGroup" value="228.10.10.157"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
...
<bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${hibernate.connection.driver_class}" />
        <property name="jdbcUrl" value="${hibernate_connection_url}" />
        <property name="user" value="${hibernate.connection.username}" />
        <property name="password" value="${hibernate.connection.password}" />

        <!-- these are C3P0 properties -->
        <property name="acquireIncrement" value="2" />
        <property name="initialPoolSize" value="30" />
        <property name="minPoolSize" value="30" />
        <property name="maxPoolSize" value="50" />
        <property name="maxIdleTime" value="60" />

        <property name="acquireRetryAttempts" value="3" />
        <property name="acquireRetryDelay" value="3000" />

        <property name="idleConnectionTestPeriod" value="3600" />
        <property name="preferredTestQuery" value="SELECT 1 " />

        <property name="maxIdleTimeExcessConnections" value="3600" />
        <property name="maxConnectionAge" value="7200" />

        <property name="checkoutTimeout" value="50000" />

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" depends-on="igniteInstance">

        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>

        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <prop key="hibernate.session_factory_name">our-session-factory</prop>
                <prop key="hibernate.session_factory_name_is_jndi">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.generate_statistics">false</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.cache.use_query_cache">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.default_access_type">READ_WRITE</prop>
                <prop key="org.apache.ignite.hibernate.ignite_instance_name">myGrid</prop>
            </props>
        </property>

If i use only one instance (one application), eviction works fine. Can You help me?