Oracle Coherence: Distributed Data Management

This article shows how to provide distributed(partitioned) data management by using Oracle Coherence. In below sample application, a new cluster named OTV has been created and a cache object named user-map has been distributed between two members of the cluster.

Used Technologies :

JDK 1.6.0_21
Maven 3.0.2
Coherence 3.7.0
SolarisOS 5.10

STEP 1 : CREATE MAVEN PROJECT

A maven project is created as below. (It can be created by using Maven or IDE Plug-in).

STEP 2 : DOWNLOAD COHERENCE PACKAGE

Coherence package is downloaded via http://www.oracle.com/technetwork/middleware/coherence/downloads/index.html

STEP 3 : LIBRARIES

Firstly, Coherence library is installed to Local Maven Repository and its description is added to pom.xml as below. Also, if maven is not used, coherence.jar file can be added to classpath.

 <!-- Coherence library(from local repository) -->
 <dependency>
  <groupId>com.tangosol</groupId>
  <artifactId>coherence</artifactId>
  <version>3.7.0</version>
 </dependency>

Below plugin can be used to create runnable-jar.

 <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
   <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
   </descriptorRefs>
   <archive>
    <manifest>
     <mainClass>com.otv.exe.TestCacheExecutor</mainClass>
    </manifest>
   </archive>
  </configuration>
  <executions>
   <execution>
    <phase>package</phase>
    <goals>
     <goal>single</goal>
    </goals>
   </execution>
  </executions>
 </plugin>

STEP 4 : CREATE otv-coherence-cache-config.xml

otv-coherence-cache-config.xml contains caching-schemes(distributed or replicated) and caching-scheme-mapping configuration. Created all cache mappings should be added to coherence-cache-config.xml.

<?xml version="1.0"?>

<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
 xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config
   coherence-cache-config.xsd">

 <caching-scheme-mapping>
  <cache-mapping>
   <cache-name>user-map</cache-name>
   <scheme-name>MapDistCache</scheme-name>
  </cache-mapping>
 </caching-scheme-mapping>

    <caching-schemes>
  <distributed-scheme>
   <scheme-name>MapDistCache</scheme-name>
   <service-name>MapDistCache</service-name>
   <backing-map-scheme>
    <local-scheme>
     <unit-calculator>BINARY</unit-calculator>
    </local-scheme>
   </backing-map-scheme>
   <autostart>true</autostart>
  </distributed-scheme>
 </caching-schemes>
</cache-config>

STEP 5 : CREATE tangosol-coherence-override.xml

tangosol-coherence-override.xml contains cluster, member-identity and configurable-cache-factory configuration. Also below configuration xml file show first member of the cluster.

tangosol-coherence-override.xml for first member of the cluster :

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config 
   coherence-operational-config.xsd">

   <cluster-config>

      <member-identity>
         <cluster-name>OTV</cluster-name>
   <!-- Name of the first member of the cluster -->
         <role-name>OTV1</role-name>
      </member-identity>

      <unicast-listener>
       <well-known-addresses>
         <socket-address id="1">
     <!-- IP Address of the first member of the cluster -->
           <address>x.x.x.x</address>
           <port>8089</port>
         </socket-address>
         <socket-address id="2">
     <!-- IP Address of the second member of the cluster -->
           <address>y.y.y.y</address>
           <port>8089</port>
         </socket-address>
       </well-known-addresses>

    <!-- Name of the first member of the cluster -->
       <machine-id>OTV1</machine-id>
    <!-- IP Address of the first member of the cluster -->
        <address>x.x.x.x</address>
        <port>8089</port>
        <port-auto-adjust>true</port-auto-adjust>
      </unicast-listener>

   </cluster-config>

   <configurable-cache-factory-config>
      <init-params>
         <init-param>
            <param-type>java.lang.String</param-type>
            <param-value system-property="tangosol.coherence.cacheconfig">
              otv-coherence-cache-config.xml
   </param-value>
         </init-param>
      </init-params>
   </configurable-cache-factory-config>
</coherence>

tangosol-coherence-override.xml for second member of the cluster :

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config 
   coherence-operational-config.xsd">

   <cluster-config>

      <member-identity>
         <cluster-name>OTV</cluster-name>
   <!-- Name of the second member of the cluster -->
         <role-name>OTV2</role-name>
      </member-identity>

      <unicast-listener>      

       <well-known-addresses>
         <socket-address id="1">
     <!-- IP Address of the first member of the cluster -->
           <address>x.x.x.x</address>
           <port>8089</port>
         </socket-address>
         <socket-address id="2">
     <!-- IP Address of the second member of the cluster -->
           <address>y.y.y.y</address>
           <port>8089</port>
         </socket-address>
       </well-known-addresses>

    <!-- Name of the second member of the cluster -->
       <machine-id>OTV2</machine-id>
    <!-- IP Address of the second member of the cluster -->
        <address>y.y.y.y</address>
        <port>8089</port>
        <port-auto-adjust>true</port-auto-adjust>

      </unicast-listener>

   </cluster-config>

   <configurable-cache-factory-config>
      <init-params>
         <init-param>
            <param-type>java.lang.String</param-type>
            <param-value system-property="tangosol.coherence.cacheconfig">
              otv-coherence-cache-config.xml</param-value>
         </init-param>
      </init-params>
   </configurable-cache-factory-config>

</coherence>

STEP 6 : CREATE USER BEAN

A new User bean is created. This bean will be distributed between two node in OTV cluster. For serializing, java.io.Serializable interface has been implemented but PortableObject can be implemented for better performance.

package com.otv.user;

import java.io.Serializable;

/**
 * @author onlinetechvision.com
 * @since 9 Oct 2011
 * @version 1.0.0
 *
 */
public class User implements Serializable {

 private static final long serialVersionUID = 1L;
 private String name;
 private String surname;

 public User(String name, String surname) {
  this.name = name;
  this.surname = surname;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getSurname() {
  return surname;
 }

 public void setSurname(String surname) {
  this.surname = surname;
 }

 @Override
 public String toString() {
  StringBuffer strBuff = new StringBuffer();
  strBuff.append("name : ").append(name);
  strBuff.append(", surname : ").append(surname);
  return strBuff.toString();
 }
}

STEP 7 : CREATE CACHE CLASS

A new TestCache Class is created. This class initializes distributed(patitioned) data management and creates a cache object named user-map.

package com.otv;

import org.apache.log4j.Logger;

import com.otv.listener.UserMapListener;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;

/**
 * @author onlinetechvision.com
 * @since 9 Oct 2011
 * @version 1.0.0
 *
 */
public class TestCache {

 private static Logger log = Logger.getLogger(TestCache.class);
 private static TestCache instance = null;
 private NamedCache cache = null;
 private static final String USER_MAP = "user-map";
 private static final long LOCK_TIMEOUT = -1;

 public TestCache() {
  setCache(CacheFactory.getCache(USER_MAP));
  getCache().addMapListener(new UserMapListener());
 }

 public static TestCache getInstance() {
  if(instance == null) {
   instance = new TestCache();
  }
  return instance;
 }

 public static void setInstance(TestCache instance) {
  TestCache.instance = instance;
 }

 public NamedCache getCache() {
  return cache;
 }

 public void setCache(NamedCache cache) {
  this.cache = cache;
 }

 public void addToCache(Object key, Object value) {
  // key is locked
  getCache().lock(key, LOCK_TIMEOUT);
  try {
   // application logic
   getCache().put(key, value);
  } finally {
   // key is unlocked
   getCache().unlock(key);
  }
 }

 public void deleteFromCache(Object key) {
  // key is locked
  getCache().lock(key, LOCK_TIMEOUT);
  try {
   // application logic
   getCache().remove(key);
  } finally {
   // key is unlocked
   getCache().unlock(key);
  }
 }
}

STEP 8 : CREATE UserMapListener IMPL CLASS

A new UserMapListener class is created. This listener receives distributed user-map events.

package com.otv.listener;

import org.apache.log4j.Logger;

import com.tangosol.util.MapEvent;
import com.tangosol.util.MapListener;

/**
 * @author onlinetechvision.com
 * @since 9 Oct 2011
 * @version 1.0.0
 *
 */
public class UserMapListener implements MapListener {

 private static Logger logger = Logger.getLogger(UserMapListener.class);

 public void entryDeleted(MapEvent me) {
   logger.debug("Deleted Key = " + me.getKey() + ", Value = " + me.getOldValue());
 }

 public void entryInserted(MapEvent me) {
  logger.debug("Inserted Key = " + me.getKey() + ", Value = " + me.getNewValue());
 }

 public void entryUpdated(MapEvent me) {
//  logger.debug("Updated Key = " + me.getKey() + ", New_Value = " + 
//              me.getNewValue() + ", Old Value = " + me.getOldValue());
 }
}

STEP 9 : CREATE TestCacheExecutor CLASS

TestCacheExecutor class is created to run the application.

package com.otv.exe;

import java.util.Iterator;

import org.apache.log4j.Logger;

import com.otv.TestCache;
import com.otv.user.User;

/**
 * @author onlinetechvision.com
 * @since 9 Oct 2011
 * @version 1.0.0
 *
 */
public class TestCacheExecutor implements Runnable {

 private static Logger log = Logger.getLogger(TestCacheExecutor.class);

 public static void main(String[] args) {
  try {
   TestCacheExecutor testCacheExecutor = new TestCacheExecutor();
   while (true) {
    testCacheExecutor.run();
    Thread.sleep(10000);
   }
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }

 public void run() {
  execute();
 }

 public void execute() {
        //Entries which will be inserted via first member of the cluster so before the project is built
        // in order to deploy first member of the cluster, this code block should be opened and below 
        //code block should be commented-out...
  User firstUser = new User("Bruce", "Willis");
  User secondUser = new User("Clint", "Eastwood");
  TestCache.getInstance().addToCache("user1", firstUser);
  TestCache.getInstance().addToCache("user2", secondUser);  

  //Entries which will be inserted via second member of the cluster so before the project is 
                //built in order to deploy second member of the cluster, this code block should be opened 
                //and above code block should be commented-out...
  //User firstUser = new User("Anna", "Kornikova");
  //User secondUser = new User("Natalie", "Portman");
  //TestCache.getInstance().addToCache("user3", firstUser);
  //TestCache.getInstance().addToCache("user4", secondUser);  

  Iterator it = TestCache.getInstance().getCache().values().iterator();
  log.debug("***************************************");
  while(it.hasNext()){
   User user = (User)it.next();
   log.debug("1. Cache Content : "+user);
  }
  log.debug("***************************************");
 }

}

STEP 10 : BUILD PROJECT

When OTV_Coherence Project is build, OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar is created.
Note : Build process should be applied separately for each member of the cluster.

STEP 11 : RUN PROJECT ON FIRST MEMBER OF THE CLUSTER

After created OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar file is run at the members of the cluster, below output logs will be shown on first member’ s console:

x.x.x.x : ip address of first member
y.y.y.y : ip address of second member

root@wpbxdbt # java -jar OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar
2011-10-09 21:24:42.112/2.947 Oracle Coherence n/a <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/tangosol-coherence.xml"

2011-10-09 21:24:42.557/3.392 Oracle Coherence n/a <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/tangosol-coherence-override-dev.xml"

2011-10-09 21:24:42.997/3.832 Oracle Coherence n/a <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/tangosol-coherence-override.xml"

2011-10-09 21:24:43.029/3.864 Oracle Coherence n/a <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified

Oracle Coherence Version n/a Build n/a
 Grid Edition: Development mode
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

2011-10-09 21:24:45.307/6.142 Oracle Coherence GE n/a <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/otv-coherence-cache-config.xml"

2011-10-09 21:24:46.934/7.769 Oracle Coherence GE n/a <D4> (thread=main, member=n/a): TCMP bound to /x.x.x.x:8089 using SystemSocketProvider

2011-10-09 21:24:50.629/11.464 Oracle Coherence GE n/a <Info> (thread=Cluster, member=n/a): Created a new cluster "OTV" with Member(Id=1, Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096, Location=machine:dbt,process:13723, Role=OTV1, Edition=Grid Edition, Mode=Development, CpuCount=64, SocketCount=64) UID=0x0AD2339700000132E9EE15572F401F99

2011-10-09 21:24:50.644/11.479 Oracle Coherence GE n/a <Info> (thread=main, member=n/a): Started cluster Name=OTV

WellKnownAddressList(Size=2,
  WKA{Address=x.x.x.x, Port=8089}
  WKA{Address=y.y.y.y, Port=8089}
  )

MasterMemberSet
  (
  ThisMember=Member(Id=1, Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096, Location=machine:wpbxdbt,process:13723, Role=OTV1)

  OldestMember=Member(Id=1, Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096,
Location=machine:wpbxdbt,process:13723, Role=OTV1)

  ActualMemberSet=MemberSet(Size=1, BitSetCount=2    
Member(Id=1, Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096, Location=machine:dbt,process:13723,Role=OTV1))
  RecycleMillis=1200000
  RecycleSet=MemberSet(Size=0, BitSetCount=0
    )
  )

TcpRing{Connections=[]}
IpMonitor{AddressListSize=0}

2011-10-09 21:24:50.773/11.608 Oracle Coherence GE n/a <D5> (thread=Invocation:Management, member=1): Service Management 
joined the cluster with senior service member 1

2011-10-09 21:24:52.099/12.934 Oracle Coherence GE n/a <D5> (thread=DistributedCache:MapDistCache, member=1): Service 
MapDistCache joined the cluster with senior service member 1

09.10.2011 21:24:52 DEBUG (UserMapListener.java:23) - Inserted Key = user1, Value = name : Bruce, surname : Willis
09.10.2011 21:24:52 DEBUG (UserMapListener.java:23) - Inserted Key = user2, Value = name : Clint, surname : Eastwood
09.10.2011 21:24:52 DEBUG (TestCacheExecutor.java:43) - ***************************************
09.10.2011 21:24:52 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Bruce, surname : Willis
09.10.2011 21:24:52 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Clint, surname : Eastwood
09.10.2011 21:24:52 DEBUG (TestCacheExecutor.java:48) - ***************************************
2011-10-09 21:25:38.881/59.716 Oracle Coherence GE n/a <D5> (thread=Cluster, member=1): Member(Id=2, Timestamp=2011-10-09 
21:25:38.68, Address=y.y.y.y:8089, MachineId=12097, Location=machine:ebt,process:29580, Role=OTV2) joined Cluster with senior 
member 1

2011-10-09 21:25:39.122/59.957 Oracle Coherence GE n/a <D5> (thread=Cluster, member=1): Member 2 joined Service Management 
with senior member 1

2011-10-09 21:25:40.767/61.602 Oracle Coherence GE n/a <D5> (thread=Cluster, member=1): Member 2 joined Service MapDistCache 
with senior member 1

2011-10-09 21:25:40.866/61.702 Oracle Coherence GE n/a <D5> (thread=DistributedCache:MapDistCache, member=1): 1> 
Transferring vulnerable PartitionSet{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127} to member 2 requesting 128
2011-10-09 21:25:41.147/61.982 Oracle Coherence GE n/a <D4> (thread=DistributedCache:MapDistCache, member=1): 1> 
Transferring 129 out of 129 partitions to a machine-safe backup 1 at member 2 (under 129)
2011-10-09 21:25:41.233/62.068 Oracle Coherence GE n/a <D5> (thread=DistributedCache:MapDistCache, member=1): Transferring 
0KB of backup[1] for PartitionSet{128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256} to member 2

09.10.2011 21:25:41 DEBUG (UserMapListener.java:23) - Inserted Key = user3, Value = name : Anna, surname : Kornikova
09.10.2011 21:25:41 DEBUG (UserMapListener.java:23) - Inserted Key = user4, Value = name : Natalie, surname : Portman
09.10.2011 21:25:42 DEBUG (TestCacheExecutor.java:43) - ***************************************
09.10.2011 21:25:42 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Natalie, surname : Portman
09.10.2011 21:25:42 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Bruce, surname : Willis
09.10.2011 21:25:42 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Clint, surname : Eastwood
09.10.2011 21:25:42 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Anna, surname : Kornikova
09.10.2011 21:25:42 DEBUG (TestCacheExecutor.java:48) - ***************************************

Second member’ s console :

root@wpbxwebt # java -jar OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar
2011-10-09 21:25:37.623/3.056 Oracle Coherence n/a <Info> (thread=main, member=n/a): Loaded operational configuration from 
"jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/tangosol-coherence.xml"

2011-10-09 21:25:38.085/3.517 Oracle Coherence n/a <Info> (thread=main, member=n/a): Loaded operational overrides from 
"jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/tangosol-coherence-override-dev.xml"

2011-10-09 21:25:38.522/3.954 Oracle Coherence n/a <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/tangosol-coherence-override.xml"

2011-10-09 21:25:38.554/3.986 Oracle Coherence n/a <D5> (thread=main, member=n/a): Optional configuration override "/custom-
mbeans.xml" is not specified

Oracle Coherence Version n/a Build n/a
 Grid Edition: Development mode
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

2011-10-09 21:25:40.946/6.378 Oracle Coherence GE n/a <Info> (thread=main, member=n/a): Loaded cache configuration from 
"jar:file:/root/OTV/New/OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/otv-coherence-cache-config.xml"

2011-10-09 21:25:42.665/8.097 Oracle Coherence GE n/a <D4> (thread=main, member=n/a): TCMP bound to /y.y.y.y:8089 using 
SystemSocketProvider

2011-10-09 21:25:43.266/8.698 Oracle Coherence GE n/a <Info> (thread=Cluster, member=n/a): Failed to satisfy the variance: 
allowed=16, actual=31

2011-10-09 21:25:43.266/8.698 Oracle Coherence GE n/a <Info> (thread=Cluster, member=n/a): Increasing allowable variance to 17
2011-10-09 21:25:43.599/9.031 Oracle Coherence GE n/a <Info> (thread=Cluster, member=n/a): This Member(Id=2, 
Timestamp=2011-10-09 21:25:38.68, Address=y.y.y.y:8089, MachineId=12097, Location=machine:ebt,process:29580, Role=OTV2, 
Edition=Grid Edition, Mode=Development, CpuCount=32, SocketCount=32) joined cluster "OTV" with senior Member(Id=1, 
Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096, Location=machine:dbt,process:13723, Role=OTV1, 
Edition=Grid Edition, Mode=Development, CpuCount=64, SocketCount=64)

2011-10-09 21:25:43.649/9.081 Oracle Coherence GE n/a <D5> (thread=Cluster, member=n/a): Member 1 joined Service Cluster with 
senior member 1

2011-10-09 21:25:43.650/9.082 Oracle Coherence GE n/a <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management 
with senior member 1

2011-10-09 21:25:43.650/9.082 Oracle Coherence GE n/a <D5> (thread=Cluster, member=n/a): Member 1 joined Service MapDistCache 
with senior member 1

2011-10-09 21:25:43.656/9.088 Oracle Coherence GE n/a <Info> (thread=main, member=n/a): Started cluster Name=OTV

WellKnownAddressList(Size=2,
  WKA{Address=y.y.y.y, Port=8089}
  WKA{Address=x.x.x.x, Port=8089}
  )

MasterMemberSet
  (
  ThisMember=Member(Id=2, Timestamp=2011-10-09 21:25:38.68, Address=y.y.y.y:8089, MachineId=12097, Location=machine:ebt,process:29580, Role=OTV2) 
OldestMember=Member(Id=1, Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096, Location=machine:dbt,process:13723, Role=OTV1)
  ActualMemberSet=MemberSet(Size=2, BitSetCount=2
    Member(Id=1, Timestamp=2011-10-09 21:24:46.935, Address=x.x.x.x:8089, MachineId=12096, Location=machine:dbt,process:13723, 
Role=OTV1)

    Member(Id=2, Timestamp=2011-10-09 21:25:38.68, Address=y.y.y.y:8089, MachineId=12097, Location=machine:ebt,process:29580, 
Role=OTV2)
    )
  RecycleMillis=1200000
  RecycleSet=MemberSet(Size=0, BitSetCount=0
    )
  )

TcpRing{Connections=[1]}
IpMonitor{AddressListSize=1}

2011-10-09 21:25:43.812/9.248 Oracle Coherence GE n/a <D5> (thread=Invocation:Management, member=2): Service Management 
joined the cluster with senior service member 1

2011-10-09 21:25:45.230/10.662 Oracle Coherence GE n/a <D5> (thread=DistributedCache:MapDistCache, member=2): Service 
MapDistCache joined the cluster with senior service member 1

2011-10-09 21:25:45.482/10.914 Oracle Coherence GE n/a <D4> (thread=DistributedCache:MapDistCache, member=2): Asking member 1 
for 128 primary partitions

2011-10-09 21:25:45.840/11.272 Oracle Coherence GE n/a <D5> (thread=DistributedCache:MapDistCache, member=2): Deferring the 
distribution due to 128 pending configuration updates

09.10.2011 21:25:46 DEBUG (UserMapListener.java:23) - Inserted Key = user3, Value = name : Anna, surname : Kornikova
09.10.2011 21:25:46 DEBUG (UserMapListener.java:23) - Inserted Key = user4, Value = name : Natalie, surname : Portman
09.10.2011 21:25:46 DEBUG (TestCacheExecutor.java:43) - ***************************************
09.10.2011 21:25:46 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Anna, surname : Kornikova
09.10.2011 21:25:46 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Bruce, surname : Willis
09.10.2011 21:25:46 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Natalie, surname : Portman
09.10.2011 21:25:46 DEBUG (TestCacheExecutor.java:46) - Distributed Cache Content : name : Clint, surname : Eastwood
09.10.2011 21:25:46 DEBUG (TestCacheExecutor.java:48) - ***************************************

STEP 12 : DOWNLOAD

OTV_Coherence

Reference: Distributed Data Management in Oracle Coherence from our JCG partner Eren Avsarogullari at the Online Technology Vision blog.

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you two of our best selling eBooks for FREE!

JPA Mini Book

Learn how to leverage the power of JPA in order to create robust and flexible Java applications. With this Mini Book, you will get introduced to JPA and smoothly transition to more advanced concepts.

JVM Troubleshooting Guide

The Java virtual machine is really the foundation of any Java EE platform. Learn how to master it with this advanced guide!

Given email address is already subscribed, thank you!
Oops. Something went wrong. Please try again later.
Please provide a valid email address.
Thank you, your sign-up request was successful! Please check your e-mail inbox.
Please complete the CAPTCHA.
Please fill in the required fields.

One Response to "Oracle Coherence: Distributed Data Management"

  1. Vinay says:

    Hi

    Thanks for your code, I am new to caching strategies and I am trying to debug your code , but it is not getting complied and not giving result , could you please let me know what I have to configure in order to make it run.

    Thanks,
    Vinay Kumar.

Leave a Reply


− five = 1



Java Code Geeks and all content copyright © 2010-2014, Exelixis Media Ltd | Terms of Use | Privacy Policy
All trademarks and registered trademarks appearing on Java Code Geeks are the property of their respective owners.
Java is a trademark or registered trademark of Oracle Corporation in the United States and other countries.
Java Code Geeks is not connected to Oracle Corporation and is not sponsored by Oracle Corporation.
Do you want to know how to develop your skillset and become a ...
Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you two of our best selling eBooks for FREE!

Get ready to Rock!
You can download the complementary eBooks using the links below:
Close