KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > webapp > servlets > OddjobServlet


1 package org.oddjob.webapp.servlets;
2
3 import java.io.File JavaDoc;
4 import java.io.IOException JavaDoc;
5 import java.io.PrintWriter JavaDoc;
6
7 import javax.servlet.ServletConfig JavaDoc;
8 import javax.servlet.ServletContext JavaDoc;
9 import javax.servlet.ServletException JavaDoc;
10 import javax.servlet.http.HttpServlet JavaDoc;
11 import javax.servlet.http.HttpServletRequest JavaDoc;
12 import javax.servlet.http.HttpServletResponse JavaDoc;
13
14 import org.apache.log4j.Logger;
15 import org.oddjob.Oddjob;
16 import org.oddjob.util.OddjobLockedException;
17 import org.oddjob.webapp.WebappConstants;
18
19
20 /**
21  * This is the Oddjob servlet that starts Oddjob running on
22  * a separate thread within a Servlet Container. This is
23  * slightly frowned upon in J2EE circles but most containers
24  * allow it.
25  *
26  * @author Rob Gordon.
27  */

28
29 public class OddjobServlet extends HttpServlet JavaDoc {
30     private static final long serialVersionUID = 20051103;
31     private static final Logger logger = Logger.getLogger(OddjobServlet.class);
32     
33     /** The oddjob instance */
34     private Oddjob oddjob;
35     
36     /** The thread that is running it. */
37     private Thread JavaDoc thread;
38     
39     /*
40      * (non-Javadoc)
41      * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
42      */

43     public void init(ServletConfig JavaDoc config) throws ServletException JavaDoc {
44         oddjob = new Oddjob();
45         thread = new Thread JavaDoc(oddjob);
46         
47         ServletContext JavaDoc context = config.getServletContext();
48                         
49         String JavaDoc servletContextPath = context.getRealPath("/");
50         String JavaDoc oddjobFile = config.getServletContext().getInitParameter(
51                 WebappConstants.FILE_PARAM);
52         if (oddjobFile == null) {
53             oddjobFile = config.getInitParameter(
54                     WebappConstants.FILE_PARAM);
55         }
56         if (oddjobFile == null) {
57             oddjobFile = servletContextPath + "/WEB-INF/" + "oddjob.xml";
58         } else {
59             oddjobFile = servletContextPath + "/" + oddjobFile;
60         }
61         oddjob.setFile(new File JavaDoc(oddjobFile));
62         
63         String JavaDoc name = context.getInitParameter(
64                 WebappConstants.NAME_PARAM);
65         if (name == null) {
66             name = config.getInitParameter(
67                     WebappConstants.NAME_PARAM);
68         }
69         if (name == null) {
70             name = "Oddjob";
71         }
72         oddjob.setName(name);
73
74         context.setAttribute(WebappConstants.ODDJOB_INSTANCE, oddjob);
75         thread.start();
76     }
77
78     /*
79      * (non-Javadoc)
80      * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
81      */

82     public void doGet(HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res)
83         throws ServletException JavaDoc, IOException JavaDoc {
84             
85         res.setContentType("text/plain");
86         PrintWriter JavaDoc out = res.getWriter();
87         out.println("Oddjob");
88     }
89
90     /*
91      * (non-Javadoc)
92      * @see javax.servlet.Servlet#destroy()
93      */

94     public void destroy() {
95         
96         oddjob.stop();
97         boolean destroyed = false;
98         while (!destroyed) {
99             try {
100                 oddjob.destroy();
101                 destroyed = true;
102             } catch (OddjobLockedException e) {
103                 logger.debug("Oddjob still running, waiting 1 second.");
104                 synchronized (this) {
105                     try {
106                         wait(1000);
107                     } catch (InterruptedException JavaDoc e2) {
108                         break;
109                     }
110                 }
111             }
112         }
113         try {
114             thread.join();
115         } catch (InterruptedException JavaDoc e) {
116             //ignore
117
}
118         
119     }
120 }
121
Popular Tags