KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > corba > se > impl > transport > ListenerThreadImpl


1 /*
2  * @(#)ListenerThreadImpl.java 1.14 03/12/19
3  *
4  * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5  * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6  */

7
8 package com.sun.corba.se.impl.transport;
9
10 import java.io.IOException JavaDoc;
11
12 import com.sun.corba.se.pept.transport.Acceptor;
13 import com.sun.corba.se.pept.transport.ListenerThread;
14 import com.sun.corba.se.pept.transport.Selector;
15
16 import com.sun.corba.se.spi.orb.ORB;
17 import com.sun.corba.se.spi.orbutil.threadpool.Work;
18
19 import com.sun.corba.se.impl.orbutil.ORBUtility;
20
21
22 public class ListenerThreadImpl
23     implements
24     ListenerThread,
25     Work
26 {
27     private ORB orb;
28     private Acceptor acceptor;
29     private Selector selector;
30     private boolean keepRunning;
31     private long enqueueTime;
32
33     public ListenerThreadImpl(ORB orb, Acceptor acceptor, Selector selector)
34     {
35     this.orb = orb;
36     this.acceptor = acceptor;
37     this.selector = selector;
38     keepRunning = true;
39     }
40
41     ////////////////////////////////////////////////////
42
//
43
// ListenerThread methods.
44
//
45

46     public Acceptor getAcceptor()
47     {
48     return acceptor;
49     }
50
51     public void close()
52     {
53     if (orb.transportDebugFlag) {
54         dprint(".close: " + acceptor);
55     }
56
57     keepRunning = false;
58     }
59
60     ////////////////////////////////////////////////////
61
//
62
// Work methods.
63
//
64

65     // REVISIT - this needs alot more from previous ListenerThread
66

67     public void doWork()
68     {
69     try {
70         if (orb.transportDebugFlag) {
71         dprint(".doWork: Start ListenerThread: " + acceptor);
72         }
73         while (keepRunning) {
74         try {
75             if (orb.transportDebugFlag) {
76             dprint(".doWork: BEFORE ACCEPT CYCLE: " + acceptor);
77             }
78
79             acceptor.accept();
80
81             if (orb.transportDebugFlag) {
82             dprint(".doWork: AFTER ACCEPT CYCLE: " + acceptor);
83             }
84         } catch (Throwable JavaDoc t) {
85             if (orb.transportDebugFlag) {
86             dprint(".doWork: Exception in accept: " + acceptor,t);
87             }
88             orb.getTransportManager().getSelector(0)
89             .unregisterForEvent(getAcceptor().getEventHandler());
90             getAcceptor().close();
91         }
92         }
93     } finally {
94         if (orb.transportDebugFlag) {
95         dprint(".doWork: Terminated ListenerThread: " + acceptor);
96         }
97     }
98     }
99
100     public void setEnqueueTime(long timeInMillis)
101     {
102     enqueueTime = timeInMillis;
103     }
104
105     public long getEnqueueTime()
106     {
107     return enqueueTime;
108     }
109
110     public String JavaDoc getName() { return "ListenerThread"; }
111
112     ////////////////////////////////////////////////////
113
//
114
// Implementation.
115
//
116

117     private void dprint(String JavaDoc msg)
118     {
119     ORBUtility.dprint("ListenerThreadImpl", msg);
120     }
121
122     private void dprint(String JavaDoc msg, Throwable JavaDoc t)
123     {
124     dprint(msg);
125     t.printStackTrace(System.out);
126     }
127 }
128
129 // End of file.
130
Popular Tags