package org.infinispan.statetransfer;
import java.util.Map;
import java.util.Properties;
import org.infinispan.commons.util.CollectionFactory;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.configuration.global.TransportConfigurationBuilder;
import org.infinispan.remoting.transport.jgroups.JGroupsChannelLookup;
import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
import org.jgroups.JChannel;
/**
* JGroupsChannelLookup implementation that returns an existing channel.
*
* @author Dan Berindei
* @since 8.2
*/
public class CustomChannelLookup implements JGroupsChannelLookup {
private static final Map<String, JChannel> channelMap = CollectionFactory.makeConcurrentMap();
private boolean connect;
public static void registerChannel(GlobalConfigurationBuilder gcb, JChannel channel, String nodeName,
boolean connect) {
TransportConfigurationBuilder tcb = gcb.transport();
tcb.defaultTransport();
tcb.addProperty(JGroupsTransport.CHANNEL_LOOKUP, CustomChannelLookup.class.getName());
tcb.addProperty("customNodeName", nodeName);
tcb.addProperty("customConnect", Boolean.toString(connect));
channelMap.put(nodeName, channel);
}
@Override
public JChannel getJGroupsChannel(Properties p) {
String nodeName = p.getProperty("customNodeName");
connect = Boolean.valueOf(p.getProperty("customConnect"));
return channelMap.remove(nodeName);
}
@Override
public boolean shouldConnect() {
return connect;
}
@Override
public boolean shouldDisconnect() {
return true;
}
@Override
public boolean shouldClose() {
return true;
}
}