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

Procedure如何定義事件接收執行緒

在程式碼中,您需要確定事件接收是在獨立的執行緒中執行的,以便應用程式可以在事件執行緒封鎖並等待事件回呼時繼續進行其他工作。


備註 –

設置 XML 將稍後在本章中論述。


步驟
  1. 在程式碼中,定義一個名為 EventReceptionThreadThread 子類別,其建立 ServerSocket 並等待事件到達通訊端的。

    在範例程式碼的此部分,事件既未被讀取,也未經過處理。讀取和處理事件將稍後在本章中論述。EventReceptionThread 將在萬用字元網際網路通訊協定位址上建立 ServerSocketEventReceptionThread 也將參照 CrnpClient 物件,以便 EventReceptionThread 可以傳送事件至 CrnpClient 物件,以進行處理。

    class EventReceptionThread extends Thread
    {
            public EventReceptionThread(CrnpClient clientIn) throws IOException
            {
                    client = clientIn;
                    listeningSock = new ServerSocket(client.localPort, 50,
                        InetAddress.getLocalHost());
            }
    
            public void run()
            {
                    try {
                            DocumentBuilder db = client.dbf.newDocumentBuilder();
                            db.setErrorHandler(new DefaultHandler());
    
                            while(true) {
                                    Socket sock = listeningSock.accept();
                                    // Construct event from the sock stream and process it
                                    sock.close();
                            }
                            // UNREACHABLE
    
                    } catch (Exception e) {
                            System.out.println(e);
                            System.exit(1);
                    }
            }
    
            /* private member variables */
            private ServerSocket listeningSock;
            private CrnpClient client;
    }
  2. 建構 createEvtRecepThr 物件。

    private void createEvtRecepThr() throws Exception
    {
            evtThr = new EventReceptionThread(this);
            evtThr.start();
    }