KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ojb > broker > locking > LockManagerServlet


1 package org.apache.ojb.broker.locking;
2
3 /* Copyright 2004-2005 The Apache Software Foundation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * 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
19 import javax.servlet.ServletException JavaDoc;
20 import javax.servlet.ServletConfig JavaDoc;
21 import javax.servlet.http.HttpServlet JavaDoc;
22 import javax.servlet.http.HttpServletRequest JavaDoc;
23 import javax.servlet.http.HttpServletResponse JavaDoc;
24 import java.io.IOException JavaDoc;
25 import java.io.InputStream JavaDoc;
26 import java.io.ObjectInputStream JavaDoc;
27 import java.io.ObjectOutputStream JavaDoc;
28 import java.io.PrintWriter JavaDoc;
29
30 import org.apache.commons.lang.math.NumberUtils;
31 import org.apache.ojb.broker.util.ClassHelper;
32
33
34 /**
35  * @author Thomas Mahler
36  */

37 public class LockManagerServlet extends HttpServlet JavaDoc
38 {
39     protected static LockManager lockmanager;
40     static final String JavaDoc STR_LOCK_TIMEOUT = "lockTimeout";
41     static final String JavaDoc STR_BLOCK_TIMEOUT = "blockTimeout";
42     static final String JavaDoc STR_LOCK_MANAGER = "lockManager";
43
44     private static long numRequests;
45     private static Throwable JavaDoc lastError = null;
46
47     public void init(ServletConfig JavaDoc servletConfig) throws ServletException JavaDoc
48     {
49         super.init(servletConfig);
50         // if lock manager was instantiated not yet
51
if(lockmanager == null)
52         {
53             lastError = null;
54             numRequests = 0;
55             String JavaDoc strLockManager = servletConfig.getInitParameter(STR_LOCK_MANAGER);
56             try
57             {
58                 lockmanager = (LockManager) (strLockManager != null ?
59                         ClassHelper.newInstance(strLockManager) : ClassHelper.newInstance(LockManagerInMemoryImpl.class));
60             }
61             catch(Exception JavaDoc e)
62             {
63                 lastError = new LockRuntimeException("Can't instance lock manager, init parameter 'lockManager': " + strLockManager);
64                 e.printStackTrace();
65             }
66             String JavaDoc strTimeout = servletConfig.getInitParameter(STR_LOCK_TIMEOUT);
67             if(NumberUtils.isNumber(strTimeout))
68             {
69                 try
70                 {
71                     Long JavaDoc lockTimeout = NumberUtils.createLong(strTimeout);
72                     lockmanager.setLockTimeout(lockTimeout.longValue());
73                 }
74                 catch(Exception JavaDoc e)
75                 {
76                     if(lastError == null)
77                     {
78                         lastError = new LockRuntimeException("Can't convert 'lockTimeout' init parameter: " + strTimeout);
79                     }
80                     e.printStackTrace();
81                 }
82             }
83             String JavaDoc strBlock = servletConfig.getInitParameter(STR_BLOCK_TIMEOUT);
84             if(NumberUtils.isNumber(strBlock))
85             {
86                 try
87                 {
88                     Long JavaDoc blockTimeout = NumberUtils.createLong(strBlock);
89                     lockmanager.setLockTimeout(blockTimeout.longValue());
90                 }
91                 catch(Exception JavaDoc e)
92                 {
93                     if(lastError == null)
94                     {
95                         lastError = new LockRuntimeException("Can't convert 'blockTimeout' init parameter: " + strBlock);
96                     }
97                     e.printStackTrace();
98                 }
99             }
100         }
101     }
102
103     /* (non-Javadoc)
104      * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
105      */

106     protected void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response)
107             throws ServletException JavaDoc, IOException JavaDoc
108     {
109         response.setContentType("text/html");
110         response.setHeader("Pragma", "no-cache");
111
112         PrintWriter JavaDoc out = response.getWriter();
113
114         out.println("<html><head><title>OJB Distributed Locking Servlet Status Page</title>");
115         out.println("</head><body><h1>OJB Distributed Locking Servlet</h1>");
116         out.println("The servlet is running.<p>");
117
118         if(lastError == null)
119         {
120             out.println("The LockServer is running.<p>");
121             out.println("LockManager info: " + lockmanager.getLockInfo() + "<p>");
122             out.println("Processed Lock Request: " + numRequests + "<p>");
123         }
124         else
125         {
126             out.println("<h2>The LockServer has a problem!</h2>");
127             out.println("The error message is:<p>");
128             out.println(lastError.getMessage() + "<p>");
129             lastError.printStackTrace(out);
130             lastError = null;
131         }
132
133         out.println("</body></html>");
134     }
135
136     /* (non-Javadoc)
137      * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
138      */

139     protected void doPost(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response)
140             throws ServletException JavaDoc, IOException JavaDoc
141     {
142         // update counter
143
numRequests++;
144
145         try
146         {
147             // read request:
148
LockManagerRemoteImpl.LockInfo info = (LockManagerRemoteImpl.LockInfo) buildObjectFromRequest(request);
149             Object JavaDoc result = null;
150             // now execute the command specified by the selector
151
try
152             {
153                 switch(info.methodName)
154                 {
155                     case LockManagerRemoteImpl.METHOD_READ_LOCK:
156                         {
157                             result = new Boolean JavaDoc(lockmanager.readLock(info.key, info.resourceId, info.isolationLevel));
158                             break;
159                         }
160                     case LockManagerRemoteImpl.METHOD_RELEASE_SINGLE_LOCK:
161                         {
162                             result = new Boolean JavaDoc(lockmanager.releaseLock(info.key, info.resourceId));
163                             break;
164                         }
165                     case LockManagerRemoteImpl.METHOD_RELEASE_LOCKS:
166                         {
167                             lockmanager.releaseLocks(info.key);
168                             result = Boolean.TRUE;
169                             break;
170                         }
171                     case LockManagerRemoteImpl.METHOD_WRITE_LOCK:
172                         {
173                             result = new Boolean JavaDoc(lockmanager.writeLock(info.key, info.resourceId,
174                                     info.isolationLevel));
175                             break;
176                         }
177                     case LockManagerRemoteImpl.METHOD_UPGRADE_LOCK:
178                         {
179                             result = new Boolean JavaDoc(lockmanager.upgradeLock(info.key, info.resourceId, info.isolationLevel));
180                             break;
181                         }
182                     case LockManagerRemoteImpl.METHOD_CHECK_READ:
183                         {
184                             result = new Boolean JavaDoc(lockmanager.hasRead(info.key, info.resourceId));
185                             break;
186                         }
187                     case LockManagerRemoteImpl.METHOD_CHECK_WRITE:
188                         {
189                             result = new Boolean JavaDoc(lockmanager.hasWrite(info.key, info.resourceId));
190                             break;
191                         }
192                     case LockManagerRemoteImpl.METHOD_CHECK_UPGRADE:
193                         {
194                             result = new Boolean JavaDoc(lockmanager.hasUpgrade(info.key, info.resourceId));
195                             break;
196                         }
197                     case LockManagerRemoteImpl.METHOD_LOCK_INFO:
198                         {
199                             result = lockmanager.getLockInfo();
200                             break;
201                         }
202                     case LockManagerRemoteImpl.METHOD_LOCK_TIMEOUT:
203                         {
204                             result = new Long JavaDoc(lockmanager.getLockTimeout());
205                             break;
206                         }
207                     case LockManagerRemoteImpl.METHOD_BLOCK_TIMEOUT:
208                         {
209                             result = new Long JavaDoc(lockmanager.getBlockTimeout());
210                             break;
211                         }
212 // case LockManagerRemoteImpl.METHOD_LOCK_TIMEOUT_SET:
213
// {
214
// lockmanager.setLockTimeout(info.lockTimeout);
215
// break;
216
// }
217
//
218
// case LockManagerRemoteImpl.METHOD_BLOCK_TIMEOUT_SET:
219
// {
220
// lockmanager.setBlockTimeout(info.blockTimeout);
221
// break;
222
// }
223
default :
224                         {
225                             throw new LockRuntimeException("Unknown command:" + info.methodName);
226                         }
227                 }
228             }
229             catch(RuntimeException JavaDoc e)
230             {
231                 result = new LockRuntimeException("Error while invoke specified method in servlet.", e);
232             }
233
234             ObjectOutputStream JavaDoc oos = new ObjectOutputStream JavaDoc(response.getOutputStream());
235             oos.writeObject(result);
236             oos.flush();
237             oos.close();
238         }
239         catch(Throwable JavaDoc t)
240         {
241             lastError = t;
242             t.printStackTrace();
243         }
244     }
245
246     private Object JavaDoc buildObjectFromRequest(HttpServletRequest JavaDoc request) throws IOException JavaDoc, ClassNotFoundException JavaDoc
247     {
248         Object JavaDoc obj = null;
249         // get the body of the request as binary data
250
InputStream JavaDoc is = request.getInputStream();
251         ObjectInputStream JavaDoc objInputStream = new ObjectInputStream JavaDoc(is);
252         obj = objInputStream.readObject();
253         objInputStream.close();
254         is.close();
255         return obj;
256     }
257 }
258
Popular Tags