Jon Abraham
Jon Abraham

Reputation: 975

Infinispan cache put is not working in loop

I am using embedded cachemanager and i am trying to put entries in cache in for loop but when the next request is fired i am seeing cache empty. Below is my implementation -

EmbeddedCacheManager manager=null;
    {
        try {
            manager = new DefaultCacheManager("src/main/resources/infinispan.xml");


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Cache cache=manager.getCache();



for (JsonElement jsonElement : jsonArray)
            {
                 id=jsonElement.getAsJsonObject().get("_id").getAsString();
                  id1= id.replace("-","");
                JsonObject source = jsonElement.getAsJsonObject().getAsJsonObject("_src");
                String jsonString = source.toString();


                Dummy dummy = new Gson().fromJson(jsonString, Dummy.class);



                if(cache.get(id1)!=null){
                    retVal.add((Dummy) cache.get(id1));
                    System.out.println("This is cached !");
                }else {
                    cache.put(id1,dummy);
                    retVal.add(dummy);
                    System.out.println("This is not cached");
                }

            }

Upvotes: 0

Views: 854

Answers (1)

Diego
Diego

Reputation: 444

Add infinispan-bom to your pom.xml file before the starter dependencies, as follows:

<dependencyManagement>
    <dependencies>
       <dependency>
           <groupId>org.infinispan</groupId>
           <artifactId>infinispan-bom</artifactId>
           <version>${version.infinispan}</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>${version.spring.boot}</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
       <dependency>
           <groupId>org.infinispan</groupId>
           <artifactId>infinispan-spring-boot-starter</artifactId>
           <version>${version.infinispan.starter}</version>
       </dependency>
    </dependencies>
 </dependencyManagement>
<dependency>
  <groupId>org.infinispan</groupId>
  <artifactId>infinispan-spring-boot-starter-embedded</artifactId>
  <version>${version.infinispan.starter}</version>
</dependency>

your bean should have

private final EmbeddedCacheManager cacheManager;

@Autowired
public YourBean(EmbeddedCacheManager cacheManager) {
    this.cacheManager = cacheManager;
}

if you need to customize EmbeddedCacheManager do

@Bean
public InfinispanCacheConfigurer cacheConfigurer() {
    return manager -> {
        final Configuration ispnConfig = new ConfigurationBuilder()
                        .clustering()
                        .cacheMode(CacheMode.LOCAL)
                        .build();

        manager.defineConfiguration("local-sync-config", ispnConfig);
    };
}

You will find good examples at https://infinispan.org/infinispan-spring-boot/master/spring_boot_starter.html

Upvotes: 5

Related Questions