KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > jforum > util > concurrent > executor > AbstractWorker


1 /*
2  * Copyright (c) 2003, Rafael Steil
3  * All rights reserved.
4
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided
7  * that the following conditions are met:
8
9  * 1) Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  * 2) Redistributions in binary form must reproduce the
13  * above copyright notice, this list of conditions and
14  * the following disclaimer in the documentation and/or
15  * other materials provided with the distribution.
16  * 3) Neither the name of "Rafael Steil" nor
17  * the names of its contributors may be used to endorse
18  * or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
22  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
24  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
27  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
32  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
34  * IN CONTRACT, STRICT LIABILITY, OR TORT
35  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
36  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
37  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
38  *
39  * This file creation date: Jan 29, 2004
40  * net.jforum.util.concurrent.executor.AbstractWorker.java
41  * The JForum Project
42  * http://www.jforum.net
43  *
44  * $Id: AbstractWorker.java,v 1.8 2005/07/26 04:01:15 diegopires Exp $
45  */

46  package net.jforum.util.concurrent.executor;
47
48 import net.jforum.util.concurrent.Task;
49
50 import org.apache.log4j.Logger;
51
52 /**
53  * @author Rodrigo Kumpera
54  */

55 public abstract class AbstractWorker implements Runnable JavaDoc
56 {
57     private static final Logger logger = Logger.getLogger(AbstractWorker.class);
58     protected abstract Object JavaDoc take() throws InterruptedException JavaDoc;
59     
60     protected void cleanup() { }
61     
62     public void run()
63     {
64         try {
65             while(true) {
66                 Object JavaDoc task = take();
67                 
68                 if(task == null) {
69                     break;
70                 }
71                 
72                 if(task instanceof Task) {
73                     try {
74                         ((Task)task).execute();
75                     } catch(Exception JavaDoc e ) {
76                         logger.warn("Exception while executing a task: " + e);
77                     }
78                 }
79                 else {
80                     SimpleResult sr = (SimpleResult)task;
81                     
82                     try {
83                         Object JavaDoc result = sr.getTask().execute();
84                         sr.setResult(result);
85                     }
86                     catch(Exception JavaDoc e ) {
87                         sr.setException(e);
88                     }
89                 }
90             }
91         }
92         catch (InterruptedException JavaDoc e) {
93             // I don't care
94
}
95         finally {
96             cleanup();
97         }
98     }
99 }
100
Popular Tags