/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.main;
import java.io.IOException;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.CacheClosedException;
import org.apache.geode.cache.CacheFactory;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.wan.GatewayReceiver;
import org.apache.geode.cache.wan.GatewaySender;
import org.apache.geode.internal.cache.wan.DistributedSystemListener;
/**
* This is an implementation of DistributedSystemListener. When a addedDistributedSystem is called a
* Region is created on both sites and GatewaySender and GatewayReciever is started on site 1 and
* site 2 respectively.
*
* When a removedDistributedSystem is called, GatewaySender and GatewayReceiver is stopped on site1
* and site2 respectively.
*
*
*/
public class MyDistributedSystemListener implements DistributedSystemListener {
Cache cache;
public MyDistributedSystemListener() {}
/**
* Please note that dynamic addition of the sender id to region is not yet available.
*/
public void addedDistributedSystem(int remoteDsId) {
cache = CacheFactory.getAnyInstance();
// When a site with distributed-system-id = 2 joins, create a region and a gatewaysender with
// remoteDsId = 2
if (remoteDsId == 2) {
if (cache != null) {
GatewaySender serialSender =
cache.createGatewaySenderFactory().setManualStart(true).setPersistenceEnabled(false)
.setDiskStoreName("LN_" + remoteDsId).create("LN_" + remoteDsId, remoteDsId);
System.out.println("Sender Created : " + serialSender.getId());
Region region = cache.createRegionFactory()
// .addSerialGatewaySenderId("LN_" + remoteDsId)
.create("MyRegion");
System.out.println("Created Region : " + region.getName());
try {
serialSender.start();
System.out.println("Sender Started: " + serialSender.getId());
} catch (Exception e) {
e.printStackTrace();
}
} else {
throw new CacheClosedException("Cache is not initialized here");
}
} else { // When a site with distributed-system-id = 1 joins, create a region and a
// gatewayReceiver with
if (cache != null) {
Region region = cache.createRegionFactory().create("MyRegion");
System.out.println("Created Region :" + region.getName());
GatewayReceiver receiver =
cache.createGatewayReceiverFactory().setStartPort(12345).setManualStart(true).create();
System.out.println("Created GatewayReceiver : " + receiver);
try {
receiver.start();
System.out.println("GatewayReceiver Started.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void removedDistributedSystem(int remoteDsId) {
cache = CacheFactory.getAnyInstance();
if (remoteDsId == 2) { // When a site with distributed-system-id = -2 joins, stop gatewaysender
// with remoteDsId = 2
if (cache != null) {
GatewaySender sender = cache.getGatewaySender("LN_" + 2);
sender.stop();
}
} else { // When a site with distributed-system-id = -1 joins, stop gatewayReceiver
GatewayReceiver receiver = cache.getGatewayReceivers().iterator().next();
receiver.stop();
}
}
}