Go to main content

Oracle® Solaris Cluster Data Services Developer's Guide

Exit Print View

Updated: September 2015
 
 

How to Create the Registration and Unregistration Messages

Now that you have created the helper classes that generate the XML messages, you can write the implementation of the createRegistrationString method. This method is called by the registerCallbacks method, which is described in How to Register and Unregister Callbacks.

createRegistrationString constructs a CallbackReg object and sets its registration type and port. Then, createRegistrationString constructs various events, by using the createAllEvent, createMembershipEvent, createRgEvent, and createREvent helper methods. Each event is added to the CallbackReg object after this object is created. Finally, createRegistrationString calls the convertToXml method on the CallbackReg object to retrieve the XML message in String form.

Note that the regs member variable stores the command-line arguments that a user provides to the application. The fifth and subsequent arguments specify the events for which the application should register. The fourth argument specifies the type of registration, but is ignored in this example. The complete code in Appendix E, CrnpClient.java Application shows how to use this fourth argument.

  1. Create the Java code that implements the preceding logic.
    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);
    }
  2. Create the unregistration string.

    Creating the unregistration string is easier than creating the registration string because you do not need to accommodate events.

    private String createUnregistrationString() throws Exception
    {
    CallbackReg cbReg = new CallbackReg();
    cbReg.setPort("" + localPort);
    cbReg.setRegType(CallbackReg.REMOVE_CLIENT);
    String xmlStr = cbReg.convertToXml();
    return (xmlStr);
    }