Sun Cluster 資料服務開發者指南 (適用於 Solaris 作業系統)

Procedure如何建立註冊和取消註冊訊息

由於您已建立了產生 XML 訊息的輔助程式類別,因此您可以寫入 createRegistrationString 方法的實作。此方法由 registerCallbacks 方法呼叫,有關此方法的說明位於如何註冊與取消註冊回呼

createRegistrationString 建構 CallbackReg 物件,並設定其註冊類型與通訊埠。然後,透過使用 createAllEventcreateMembershipEventcreateRgEventcreateREvent 輔助程式方法,createRegistrationString 將建構多種事件。在建立 CallbackReg 物件之後,便會將每個事件加入該物件。最後,createRegistrationStringCallbackReg 物件呼叫 convertToXml 方法,以擷取 String 形式的 XML 訊息。

請注意,regs 成員變數會儲存使用者為應用程式提供的指令行引數。第五個引數與後續引數指定應用程式應該註冊的事件。第四個引數指定註冊的類型,但在此範例中忽略。附錄 GCrnpClient.java 應用程式 中的完整程式碼將展示如何使用第四個引數。

步驟
  1. 建立實施前導邏輯的 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);
    }
  2. 建立取消註冊字串。

    由於您無需提供事件,因此建立取消註冊字串比建立註冊字串更容易。

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