请注意,创建生成 XML 消息的帮助器类之后,您可以向 createRegistrationString 方法的实现写入数据。此方法由 registerCallbacks 方法(如何注册和取消注册回调中介绍了该方法)调用。
createRegistrationString 构造一个 CallbackReg 对象并设置其注册类型和端口。然后,createRegistrationString 通过使用 createAllEvent、createMembershipEvent、createRgEvent 和 createREvent 帮助器方法构造各种事件。创建 CallbackReg 对象后,每个事件都被添加到该对象中。最后,createRegistrationString 对 CallbackReg 对象调用 convertToXml 方法,以便在 String 表单中检索 XML 消息。
请注意,regs 成员变量用于存储用户提供给应用程序的命令行参数。第五个参数及后续参数用于指定应用程序应该注册的事件。第四个参数用于指定注册的类型,但本实例中忽略了该参数。附录 G,CrnpClient.java 应用程序 中的完整代码显示了如何使用第四个参数。
创建实现上述逻辑的 Java 代码。
private String createRegistrationString() throws Exception { CallbackReg cbReg = new CallbackReg(); cbReg.setPort("" + localPort); cbReg.setRegType(CallbackReg.ADD_CLIENT); // add the events for (int i = 4; i < regs.length; i++) { if (regs[i].equals("M")) { cbReg.addRegEvent(createMembershipEvent()); } else if (regs[i].equals("A")) { cbReg.addRegEvent(createAllEvent()); } else if (regs[i].substring(0,2).equals("RG")) { cbReg.addRegEvent(createRgEvent(regs[i].substring(3))); } else if (regs[i].substring(0,1).equals("R")) { cbReg.addRegEvent(createREvent(regs[i].substring(2))); } } String xmlStr = cbReg.convertToXml(); return (xmlStr); } private Event createAllEvent() { Event allEvent = new Event(); allEvent.setClass("EC_Cluster"); return (allEvent); } private Event createMembershipEvent() { Event membershipEvent = new Event(); membershipEvent.setClass("EC_Cluster"); membershipEvent.setSubclass("ESC_cluster_membership"); return (membershipEvent); } private Event createRgEvent(String rgname) { Event rgStateEvent = new Event(); rgStateEvent.setClass("EC_Cluster"); rgStateEvent.setSubclass("ESC_cluster_rg_state"); NVPair rgNvpair = new NVPair(); rgNvpair.setName("rg_name"); rgNvpair.setValue(rgname); rgStateEvent.addNvpair(rgNvpair); return (rgStateEvent); } private Event createREvent(String rname) { Event rStateEvent = new Event(); rStateEvent.setClass("EC_Cluster"); rStateEvent.setSubclass("ESC_cluster_r_state"); NVPair rNvpair = new NVPair(); rNvpair.setName("r_name"); rNvpair.setValue(rname); rStateEvent.addNvpair(rNvpair); return (rStateEvent); }
创建撤销注册字符串。
创建取消注册字符串比创建注册字符串容易,因为您不必提供事件。
private String createUnregistrationString() throws Exception { CallbackReg cbReg = new CallbackReg(); cbReg.setPort("" + localPort); cbReg.setRegType(CallbackReg.REMOVE_CLIENT); String xmlStr = cbReg.convertToXml(); return (xmlStr); }