Jimmy USU
Jimmy USU

Reputation: 69

infinispan embedded cache with two process same machine

I am new to infinispan and I am trying to start from very basic.After going through the documentation about embedded cache that lives in the same JVM process as the running program, I am trying to see how it works.

Here is my code.

public class CacheClient {

    public static void main(String[] args) {

        CacheClient cc = new CacheClient();
        cc.start();

    }

    public void start() {

        boolean run = true;
        EmbeddedCacheManager manager = **createCacheManagerProgrammatically**();
        manager.start();
        Cache<Object, Object> cache = manager.getCache("dist");
        Scanner sc = new Scanner(System.in);
        while (run) {
            System.out.println("Enter the command:");
            String command = sc.next();
            switch (command) {
            case "add":
                System.out.println("Enter the key:");
                int i = sc.nextInt();
                cache.put(Integer.valueOf(i), Integer.valueOf(i));
                break;

            case "list":
                System.out.println("The keys:");
                Set<Object> keySet = cache.keySet();
                Iterator<Object> iter = keySet.iterator();
                while (iter.hasNext()) {
                    System.out.println((Integer) iter.next());
                }
                break;
            default:
                run = false;
                break;
            }
        }
        sc.close();
        manager.stop();
    }

    private EmbeddedCacheManager **createCacheManagerProgrammatically**() {
        System.out
                .println("Starting a cache manager with a programmatic configuration");
        EmbeddedCacheManager cacheManager = new DefaultCacheManager(
                GlobalConfigurationBuilder
                        .defaultClusteredBuilder()
                        .transport()
                        .defaultTransport()
                        .clusterName("dist_cluster")
                        .addProperty("configurationFile",
                                "jgroups.xml")
                        .build(), new ConfigurationBuilder().clustering()
                        .cacheMode(CacheMode.REPL_SYNC).build());
        cacheManager.defineConfiguration("dist", new ConfigurationBuilder()
                .clustering().cacheMode(CacheMode.REPL_SYNC).hash()
                .numOwners(2).build());
        return cacheManager;
    }
}

From the above code my expectation is that suppose I run this program first and start adding integers to cache using add command, then when I run the same program again (another process) then the moment I use the list command, I should see the contents immediately. But I am not able to see any content when I use list in the 2nd process.

1) Is this how Embedded cache supposed to work?
Is my expectation correct?
If so, then what am I missing?

Please correct my mistakes and point me to a tutorial that explains clearly how it works. I tried to go through the tutorial from Infinispan documentation. But I think it's not very clear there. Any help is highly appreciated.

Upvotes: 1

Views: 217

Answers (1)

Jimmy USU
Jimmy USU

Reputation: 69

I finally figured out. Please set System.setProperty("java.net.preferIPv4Stack", "true");

and the above code will work.

Upvotes: 3

Related Questions