2
votes

I have one use case where I have to support multiple persistence store for my ignite cluster,For example Cache A1 should be primed from Database db1 and Cache B1 should be primed from database db2. can this be done?.In ignite Configuration XML I can only provide one persistence store details,

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

<!-- Datasource for Persistence. -->
<bean name="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:roc12c" />
    <property name="username" value="test" />
    <property name="password" value="test" />
</bean>

In my CacheStore implementation I can only access this Database right?.

2
Can you add what documentation you got that example from? - Carlos Bribiescas
@Carlos This was part of the Ignite-Config.xml which came with example program that is provided at ignite site. I will Inject this 'dataSource' bean into CacheJdbcPojoStoreFactory object , This factory will be set inside my CacheConfiguration object with CacheConfiguration.setCacheStoreFactory method. I am actually following Automatic Persistence technique where we can avoid CacheStore Implementation for each and every cache [link] apacheignite.readme.io/docs/automatic-persistence. - Benak Raj

2 Answers

3
votes

I've not tried this, but if its similar to other bean-configured systems. You should be able to create another bean with a different name and configuration. Then in your cache configuration for A1 and B1 specify the different data sources. That being said, I'm guessing that theoretically.

It may be that you are already doing so, but I can't tell from your question. If you instead choose to implement your caches in this manner https://apacheignite.readme.io/docs/persistent-store you can definitely configure two caches to have different data sources. This is how I'm currently implementing multiple caches. In the cache store I use I specifically call out which database to go to.

Here is a cache configuration I use for mine.

    <property name="cacheConfiguration">
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <!-- Set a cache name. -->
            <property name="name" value="recordData"/>
            <property name="rebalanceMode" value="ASYNC"/>
            <property name="cacheMode" value="PARTITIONED"/>
            <property name="backups" value="1"/>
            <!-- Enable Off-Heap memory with max size of 10 Gigabytes (0 for unlimited). -->
            <property name="memoryMode" value="OFFHEAP_TIERED"/>
            <property name="offHeapMaxMemory" value="0"/>
            <property name="swapEnabled" value="false"/> 

            <property name="cacheStoreFactory">
                <bean class="javax.cache.configuration.FactoryBuilder" factory-method="factoryOf">
                    <constructor-arg value="com.company.util.MyDataStore"/>
                </bean>
            </property>
            <property name="readThrough" value="true"/>
            <property name="writeThrough"  value="true"/>

        </bean>
    </property>
2
votes

Cache store is configured per cache, so you just need to inject different data sources to different stores. What you showed is just a standalone data source bean, it's not even a part of IgniteConfiguration. You can have multiple data source beans with different IDs.