Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

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();
    }