001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 package org.apache.geronimo.tomcat.cluster.wadi;
021
022 import java.io.BufferedReader;
023 import java.io.IOException;
024 import java.io.UnsupportedEncodingException;
025 import java.security.Principal;
026 import java.util.Enumeration;
027 import java.util.Locale;
028 import java.util.Map;
029
030 import javax.servlet.FilterChain;
031 import javax.servlet.RequestDispatcher;
032 import javax.servlet.ServletException;
033 import javax.servlet.ServletInputStream;
034 import javax.servlet.ServletRequest;
035 import javax.servlet.ServletResponse;
036 import javax.servlet.http.Cookie;
037 import javax.servlet.http.HttpServletRequest;
038 import javax.servlet.http.HttpSession;
039
040 import org.apache.catalina.connector.Request;
041 import org.apache.catalina.connector.Response;
042 import org.apache.geronimo.clustering.ClusteredInvocation;
043 import org.apache.geronimo.clustering.ClusteredInvocationException;
044 import org.apache.geronimo.tomcat.cluster.AbstractClusteredValve;
045 import org.codehaus.wadi.core.contextualiser.InvocationException;
046 import org.codehaus.wadi.core.manager.Manager;
047 import org.codehaus.wadi.web.impl.WebInvocation;
048
049
050 /**
051 *
052 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
053 */
054 public class WADIClusteredValve extends AbstractClusteredValve {
055 private final Manager wadiManager;
056
057 public WADIClusteredValve(Manager wadiManager) {
058 this.wadiManager = wadiManager;
059 }
060
061 protected ClusteredInvocation newClusteredInvocation(Request request, Response response) {
062 return new WADIWebClusteredInvocation(request, response);
063 }
064
065 protected class WADIWebClusteredInvocation extends WebClusteredInvocation {
066
067 public WADIWebClusteredInvocation(Request request, Response response) {
068 super(request, response);
069 }
070
071 public void invoke() throws ClusteredInvocationException {
072 WebInvocation invocation = new WebInvocation(5000);
073 FilterChain chainAdapter = new FilterChain() {
074 public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
075 try {
076 invokeLocally();
077 } catch (ClusteredInvocationException e) {
078 throw (IOException) new IOException().initCause(e);
079 }
080 }
081 };
082 invocation.init(null == request? NoOpHttpServletRequest.SINGLETON: request, response, chainAdapter);
083 try {
084 wadiManager.contextualise(invocation);
085 } catch (InvocationException e) {
086 Throwable throwable = e.getCause();
087 if (throwable instanceof IOException) {
088 throw new ClusteredInvocationException(throwable);
089 } else if (throwable instanceof ServletException) {
090 throw new ClusteredInvocationException(throwable);
091 } else {
092 throw new ClusteredInvocationException(e);
093 }
094 }
095 }
096 }
097
098 protected static class NoOpHttpServletRequest implements HttpServletRequest {
099 public static final NoOpHttpServletRequest SINGLETON = new NoOpHttpServletRequest();
100
101 public String getAuthType() {
102 throw new UnsupportedOperationException();
103 }
104
105 public String getContextPath() {
106 throw new UnsupportedOperationException();
107 }
108
109 public Cookie[] getCookies() {
110 throw new UnsupportedOperationException();
111 }
112
113 public long getDateHeader(String arg0) {
114 throw new UnsupportedOperationException();
115 }
116
117 public String getHeader(String arg0) {
118 throw new UnsupportedOperationException();
119 }
120
121 public Enumeration getHeaderNames() {
122 throw new UnsupportedOperationException();
123 }
124
125 public Enumeration getHeaders(String arg0) {
126 throw new UnsupportedOperationException();
127 }
128
129 public int getIntHeader(String arg0) {
130 throw new UnsupportedOperationException();
131 }
132
133 public String getMethod() {
134 throw new UnsupportedOperationException();
135 }
136
137 public String getPathInfo() {
138 throw new UnsupportedOperationException();
139 }
140
141 public String getPathTranslated() {
142 throw new UnsupportedOperationException();
143 }
144
145 public String getQueryString() {
146 throw new UnsupportedOperationException();
147 }
148
149 public String getRemoteUser() {
150 throw new UnsupportedOperationException();
151 }
152
153 public String getRequestURI() {
154 throw new UnsupportedOperationException();
155 }
156
157 public StringBuffer getRequestURL() {
158 throw new UnsupportedOperationException();
159 }
160
161 public String getRequestedSessionId() {
162 return null;
163 }
164
165 public String getServletPath() {
166 throw new UnsupportedOperationException();
167 }
168
169 public HttpSession getSession() {
170 throw new UnsupportedOperationException();
171 }
172
173 public HttpSession getSession(boolean arg0) {
174 throw new UnsupportedOperationException();
175 }
176
177 public Principal getUserPrincipal() {
178 throw new UnsupportedOperationException();
179 }
180
181 public boolean isRequestedSessionIdFromCookie() {
182 throw new UnsupportedOperationException();
183 }
184
185 public boolean isRequestedSessionIdFromURL() {
186 throw new UnsupportedOperationException();
187 }
188
189 public boolean isRequestedSessionIdFromUrl() {
190 throw new UnsupportedOperationException();
191 }
192
193 public boolean isRequestedSessionIdValid() {
194 throw new UnsupportedOperationException();
195 }
196
197 public boolean isUserInRole(String arg0) {
198 throw new UnsupportedOperationException();
199 }
200
201 public Object getAttribute(String arg0) {
202 throw new UnsupportedOperationException();
203 }
204
205 public Enumeration getAttributeNames() {
206 throw new UnsupportedOperationException();
207 }
208
209 public String getCharacterEncoding() {
210 throw new UnsupportedOperationException();
211 }
212
213 public int getContentLength() {
214 throw new UnsupportedOperationException();
215 }
216
217 public String getContentType() {
218 throw new UnsupportedOperationException();
219 }
220
221 public ServletInputStream getInputStream() throws IOException {
222 throw new UnsupportedOperationException();
223 }
224
225 public String getLocalAddr() {
226 throw new UnsupportedOperationException();
227 }
228
229 public String getLocalName() {
230 throw new UnsupportedOperationException();
231 }
232
233 public int getLocalPort() {
234 throw new UnsupportedOperationException();
235 }
236
237 public Locale getLocale() {
238 throw new UnsupportedOperationException();
239 }
240
241 public Enumeration getLocales() {
242 throw new UnsupportedOperationException();
243 }
244
245 public String getParameter(String arg0) {
246 throw new UnsupportedOperationException();
247 }
248
249 public Map getParameterMap() {
250 throw new UnsupportedOperationException();
251 }
252
253 public Enumeration getParameterNames() {
254 throw new UnsupportedOperationException();
255 }
256
257 public String[] getParameterValues(String arg0) {
258 throw new UnsupportedOperationException();
259 }
260
261 public String getProtocol() {
262 throw new UnsupportedOperationException();
263 }
264
265 public BufferedReader getReader() throws IOException {
266 throw new UnsupportedOperationException();
267 }
268
269 public String getRealPath(String arg0) {
270 throw new UnsupportedOperationException();
271 }
272
273 public String getRemoteAddr() {
274 throw new UnsupportedOperationException();
275 }
276
277 public String getRemoteHost() {
278 throw new UnsupportedOperationException();
279 }
280
281 public int getRemotePort() {
282 throw new UnsupportedOperationException();
283 }
284
285 public RequestDispatcher getRequestDispatcher(String arg0) {
286 throw new UnsupportedOperationException();
287 }
288
289 public String getScheme() {
290 throw new UnsupportedOperationException();
291 }
292
293 public String getServerName() {
294 throw new UnsupportedOperationException();
295 }
296
297 public int getServerPort() {
298 throw new UnsupportedOperationException();
299 }
300
301 public boolean isSecure() {
302 throw new UnsupportedOperationException();
303 }
304
305 public void removeAttribute(String arg0) {
306 throw new UnsupportedOperationException();
307 }
308
309 public void setAttribute(String arg0, Object arg1) {
310 throw new UnsupportedOperationException();
311 }
312
313 public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException {
314 throw new UnsupportedOperationException();
315 }
316
317 }
318
319 }