Статьи

Oracle Coherence: распределенное управление данными

В этой статье показано, как обеспечить распределенное (многораздельное) управление данными с помощью Oracle Coherence. В приведенном ниже примере приложения был создан новый кластер с именем OTV , и объект кэша с именем user-map был распределен между двумя членами кластера.

Используемые технологии:

JDK 1.6.0_21
Maven 3.0.2
Согласованность 3.7.0
SolarisOS 5.10

ШАГ 1: СОЗДАТЬ MAVEN ПРОЕКТ

Maven проект создается как показано ниже. (Его можно создать с помощью Maven или IDE Plug-in).

ШАГ 2: СКАЧАТЬ КОГЕРЕНТНЫЙ ПАКЕТ

Пакет Coherence загружается через http://www.oracle.com/technetwork/middleware/coherence/downloads/index.html

ШАГ 3: БИБЛИОТЕКИ

Во-первых, библиотека Coherence устанавливается в локальный репозиторий Maven, а ее описание добавляется в pom.xml, как показано ниже. Также, если maven не используется, файл coherence.jar можно добавить в classpath.

1
2
3
4
5
6
<!-- Coherence library(from local repository) -->
<dependency>
 <groupId>com.tangosol</groupId>
 <artifactId>coherence</artifactId>
 <version>3.7.0</version>
</dependency>

Ниже плагин может быть использован для создания runnable-jar .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<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>

ШАГ 4: СОЗДАТЬ otv-coherence-cache-config.xml

otv-coherence-cache-config.xml содержит конфигурацию кэширования (распределенную или реплицированную) и конфигурацию отображения схемы кэширования. Созданные все отображения кэша должны быть добавлены в coherence-cache-config.xml .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0"?>
 
   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>

ШАГ 5: СОЗДАЙТЕ tangosol-coherence-override.xml

tangosol-coherence-override.xml содержит конфигурацию кластера, идентификатора члена и настраиваемой фабрики кэша . Также под конфигурационным xml файлом показан первый член кластера.

tangosol-coherence-override.xml для первого члена кластера:

01
02
03
04
05
06
07
08
09
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
<?xml version='1.0'?>
 
   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 для второго члена кластера:

01
02
03
04
05
06
07
08
09
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
<?xml version='1.0'?>
 
   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>

ШАГ 6: СОЗДАТЬ ФАЙЛ ПОЛЬЗОВАТЕЛЯ

Новый пользовательский компонент создан. Этот компонент будет распределен между двумя узлами в кластере OTV . Для сериализации был реализован интерфейс java.io.Serializable , но PortableObject может быть реализован для повышения производительности.

01
02
03
04
05
06
07
08
09
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
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();
 }
}

ШАГ 7: СОЗДАЙТЕ КЭШ-КЛАСС

Новый класс TestCache создан. Этот класс инициализирует распределенное (распределенное) управление данными и создает объект кэша с именем user-map .

01
02
03
04
05
06
07
08
09
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
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);
  }
 }
}

ШАГ 8: СОЗДАНИЕ UserMapListener IMPL CLASS

Новый класс UserMapListener создан. Этот слушатель получает распределенные события пользовательской карты .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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());
 }
}

ШАГ 9: СОЗДАЙТЕ КЛАСС TestCacheExecutor

Класс TestCacheExecutor создан для запуска приложения.

01
02
03
04
05
06
07
08
09
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
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("***************************************");
 }
 
}

ШАГ 10: СТРОИМ ПРОЕКТ

Когда создается проект OTV_Coherence , создается OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar .
Примечание. Процесс сборки должен применяться отдельно для каждого члена кластера.

ШАГ 11: ЗАПУСК ПРОЕКТА ПЕРВОГО ЧЛЕНА КЛАСТЕРА

После того, как созданный файл OTV_Coherence-0.0.1-SNAPSHOT-jar-with-dependencies.jar запущен на элементах кластера, ниже выводятся журналы на консоли первого участника:

xxxx: IP-адрес первого члена
гггг: IP-адрес второго члена

01
02
03
04
05
06
07
08
09
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
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) - ***************************************

Консоль второго члена:

01
02
03
04
05
06
07
08
09
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
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) - ***************************************

ШАГ 12: СКАЧАТЬ

OTV_Coherence

Ссылка: Распределенное управление данными в Oracle Coherence от нашего партнера по JCG Эрен Авсарогуллари в блоге Online Technology Vision .