JAL-3253 srcjar_unused/ moved to unused/
[jalview.git] / unused / srcjar_unused / org / apache / log4j / Dispatcher.java
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package org.apache.log4j;
19
20 import org.apache.log4j.helpers.AppenderAttachableImpl;
21 import org.apache.log4j.spi.LoggingEvent;
22
23
24 /**
25  * Obsolete AsyncAppender dispatcher provided for compatibility only.
26  *
27  * @deprecated Since 1.3.
28  */
29 class Dispatcher extends Thread {
30     /**
31      * @deprecated
32      */
33   private org.apache.log4j.helpers.BoundedFIFO bf;
34   private AppenderAttachableImpl aai;
35   private boolean interrupted = false;
36   AsyncAppender container;
37
38     /**
39      *
40      * @param bf
41      * @param container
42      * @deprecated
43      */
44   Dispatcher(org.apache.log4j.helpers.BoundedFIFO bf, AsyncAppender container) {
45     this.bf = bf;
46     this.container = container;
47     this.aai = container.aai;
48
49     // It is the user's responsibility to close appenders before
50     // exiting.
51     this.setDaemon(true);
52
53     // set the dispatcher priority to lowest possible value
54     this.setPriority(Thread.MIN_PRIORITY);
55     this.setName("Dispatcher-" + getName());
56
57     // set the dispatcher priority to MIN_PRIORITY plus or minus 2
58     // depending on the direction of MIN to MAX_PRIORITY.
59     //+ (Thread.MAX_PRIORITY > Thread.MIN_PRIORITY ? 1 : -1)*2);
60   }
61
62   void close() {
63     synchronized (bf) {
64       interrupted = true;
65
66       // We have a waiting dispacther if and only if bf.length is
67       // zero.  In that case, we need to give it a death kiss.
68       if (bf.length() == 0) {
69         bf.notify();
70       }
71     }
72   }
73
74   /**
75    * The dispatching strategy is to wait until there are events in the buffer
76    * to process. After having processed an event, we release the monitor
77    * (variable bf) so that new events can be placed in the buffer, instead of
78    * keeping the monitor and processing the remaining events in the buffer.
79    *
80    * <p>
81    * Other approaches might yield better results.
82    * </p>
83    */
84   public void run() {
85     //Category cat = Category.getInstance(Dispatcher.class.getName());
86     LoggingEvent event;
87
88     while (true) {
89       synchronized (bf) {
90         if (bf.length() == 0) {
91           // Exit loop if interrupted but only if the the buffer is empty.
92           if (interrupted) {
93             //cat.info("Exiting.");
94             break;
95           }
96
97           try {
98             //LogLog.debug("Waiting for new event to dispatch.");
99             bf.wait();
100           } catch (InterruptedException e) {
101             break;
102           }
103         }
104
105         event = bf.get();
106
107         if (bf.wasFull()) {
108           //LogLog.debug("Notifying AsyncAppender about freed space.");
109           bf.notify();
110         }
111       }
112
113       // synchronized
114       synchronized (container.aai) {
115         if ((aai != null) && (event != null)) {
116           aai.appendLoopOnAppenders(event);
117         }
118       }
119     }
120
121     // while
122     // close and remove all appenders
123     aai.removeAllAppenders();
124   }
125 }