import org.jboss.logging.Logger;
import org.jboss.naming.NamingService;
import org.jgroups.Address;
import org.jgroups.ChannelException;
import org.jgroups.ChannelNotConnectedException;
import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;
import org.jgroups.View;
import org.jgroups.stack.IpAddress;
public class NodeManager {
private int servicePort;
private String serviceAddress;
private static final Logger log = Logger.getLogger(NodeManager.class);
private JChannel channel;
@Inject(bean = "jboss:service=Naming", dependentState="Start")
public void setNaming(NamingService naming) {
this.servicePort = naming.getPort();
}
public String getMasterAddress() {
return null;
}
/**
* udp.xml is using in jgroups sample
*/
public void create() {
try {
channel = new JChannel(NodeManager.class.getResource("/META-INF/udp.xml"));
channel.setReceiver(new NodeReceiverAdapter());
} catch (ChannelException e) {
e.printStackTrace();
}
}
public void start() {
try {
channel.connect("demo-cluster");
log.info(channel.getProperties());
IpAddress ip = (IpAddress) channel.getLocalAddress();
this.serviceAddress = ip.getIpAddress().getHostAddress();
log.info("Current Node's binding URL : [" + serviceAddress + ":" + servicePort + "]");
} catch (Exception e) {
e.printStackTrace();
}
}
public void stop() {
channel.disconnect();
channel.close();
log.info("Stopping Node Manager");
}
public void destroy() {
log.info("Destroy");
}
class NodeReceiverAdapter extends ReceiverAdapter {
Address dest = null;
Address local = channel.getLocalAddress();
public void receive(Message msg) {
dest = msg.getSrc();
log.info("received msg from " + msg.getSrc() + ": " + msg.getObject());
Message returnMsg = new Message(dest, local, serviceAddress + ":" + servicePort);
log.info("return current context url is [" + serviceAddress + ":" + servicePort + "]");
try {
channel.send(returnMsg);
} catch (ChannelNotConnectedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void viewAccepted(View view) {
log.info("View Accepted - [" + view.getMembers() + "]");
}
}
}





