Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

ProcedureSo definieren Sie den Ereignis-Empfangs-Thread

Im Code müssen Sie sicherstellen, dass der Ereignisempfang über einen eigenen Thread ausgeführt wird, so dass die Anwendung anderweitig weiterarbeiten kann, wenn der Thread blockiert ist und auf Ereignisrückmeldungen wartet.


Hinweis –

Die XML-Konfiguration wird weiter unten in diesem Kapitel erläutert.


Schritte
  1. Definieren Sie in Ihrem Code eine Thread-Unterklasse namens EventReceptionThread, die eine ServerSocket erstellt und darauf wartet, dass die Ereignisse am Socket ankommen.

    In diesem Teil des Beispielcodes werden Ereignisse weder gelesen noch verarbeitet. Lesen und Verarbeiten von Ereignissen, die weiter unten in diesem Kapitel erläutert werden. EventReceptionThread erstellt einen ServerSocket an einer Platzhalter-Netzwerkprotokolladresse. EventReceptionThread behält auch einen Verweis auf das CrnpClient -Objekt, sodass EventReceptionThread Ereignisse zur Verarbeitung an das CrnpClient-Objekt senden kann.

    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. Erstellen Sie ein createEvtRecepThr-Objekt.

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