如果我没有明确调用它们,如何从 ReceiverAdapter class 重写方法(例如在 jgroups 中调用 viewAccepted() 方法)?
How are overridden methods from ReceiverAdapter class such as viewAccepted() method called in jgroups if I have not called them explicitly?
我写了下面的class来创建一个JGroup集群:
public class TestClient extends ReceiverAdapter {
JChannel channel;
private void start() throws Exception {
channel=new JChannel().setReceiver(this);
channel.connect("ChatCluster");
eventLoop();
channel.close();
}
private void eventLoop() {
while(true) {
}
}
public void viewAccepted(View new_view) {
System.out.println("** view: " + new_view);
System.out.println("Get Coord"+new_view.getCoord());
System.out.println(new_view.getMembers());
}
public void receive(Message msg) {
System.out.println(msg.getSrc() + ": " + msg.getObject());
}
public void getState(OutputStream output) throws Exception {
}
public void setState(InputStream input) throws Exception {
}
}
ReceiverAdapter 是一个 Jgroups 定义的 class:
public class ReceiverAdapter implements Receiver {
public ReceiverAdapter() {
}
public void receive(Message msg) {
}
public void receive(MessageBatch batch) {
Iterator var2 = batch.iterator();
while(var2.hasNext()) {
Message msg = (Message)var2.next();
try {
this.receive(msg);
} catch (Throwable var5) {
;
}
}
}
public void getState(OutputStream output) throws Exception {
}
public void setState(InputStream input) throws Exception {
}
public void viewAccepted(View view) {
}
public void suspect(Address mbr) {
}
public void block() {
}
public void unblock() {
}
}
我的问题是如何在更改视图或 sending/receiving 消息时调用 ReceiverAdapter class 中的这些方法,因为我不需要显式调用这些方法。 JGroups 是否实现了某种事件侦听器?
如果我没有正确理解你的问题,我想你已经解决了你的问题。您需要明确地将 Receiver 实现传递给您希望使用它的 JChannel:
Receiver receiver = new MyReceiverImplementation();
JChannel jChannel = new JChannel().connect("clusterName").receiver(receiver);
JGroups 不会自动寻找要注入的接收器。
我写了下面的class来创建一个JGroup集群:
public class TestClient extends ReceiverAdapter {
JChannel channel;
private void start() throws Exception {
channel=new JChannel().setReceiver(this);
channel.connect("ChatCluster");
eventLoop();
channel.close();
}
private void eventLoop() {
while(true) {
}
}
public void viewAccepted(View new_view) {
System.out.println("** view: " + new_view);
System.out.println("Get Coord"+new_view.getCoord());
System.out.println(new_view.getMembers());
}
public void receive(Message msg) {
System.out.println(msg.getSrc() + ": " + msg.getObject());
}
public void getState(OutputStream output) throws Exception {
}
public void setState(InputStream input) throws Exception {
}
}
ReceiverAdapter 是一个 Jgroups 定义的 class:
public class ReceiverAdapter implements Receiver {
public ReceiverAdapter() {
}
public void receive(Message msg) {
}
public void receive(MessageBatch batch) {
Iterator var2 = batch.iterator();
while(var2.hasNext()) {
Message msg = (Message)var2.next();
try {
this.receive(msg);
} catch (Throwable var5) {
;
}
}
}
public void getState(OutputStream output) throws Exception {
}
public void setState(InputStream input) throws Exception {
}
public void viewAccepted(View view) {
}
public void suspect(Address mbr) {
}
public void block() {
}
public void unblock() {
}
}
我的问题是如何在更改视图或 sending/receiving 消息时调用 ReceiverAdapter class 中的这些方法,因为我不需要显式调用这些方法。 JGroups 是否实现了某种事件侦听器?
如果我没有正确理解你的问题,我想你已经解决了你的问题。您需要明确地将 Receiver 实现传递给您希望使用它的 JChannel:
Receiver receiver = new MyReceiverImplementation();
JChannel jChannel = new JChannel().connect("clusterName").receiver(receiver);
JGroups 不会自动寻找要注入的接收器。