01: package com.opensymphony.webwork.pico;
02:
03: import com.opensymphony.webwork.dispatcher.FilterDispatcher;
04: import com.opensymphony.webwork.WebWorkException;
05: import com.opensymphony.xwork.ObjectFactory;
06: import org.nanocontainer.nanowar.ServletRequestContainerLauncher;
07: import org.picocontainer.defaults.ObjectReference;
08: import org.picocontainer.gems.adapters.ThreadLocalReference;
09:
10: import javax.servlet.FilterConfig;
11: import javax.servlet.ServletContext;
12: import javax.servlet.ServletException;
13: import javax.servlet.http.HttpServletRequest;
14:
15: /**
16: * User: patrick Date: Dec 22, 2005 Time: 4:14:10 PM
17: */
18: public class PicoFilterDispatcher extends FilterDispatcher {
19: private ObjectReference objectReference;
20:
21: public void init(FilterConfig config) throws ServletException {
22: objectReference = new ThreadLocalReference();
23: ObjectFactory.setObjectFactory(new PicoObjectFactory(
24: objectReference));
25: super .init(filterConfig);
26: }
27:
28: protected Object beforeActionInvocation(HttpServletRequest request,
29: ServletContext servletContext) {
30: objectReference.set(request);
31:
32: ServletRequestContainerLauncher containerLauncher = new ServletRequestContainerLauncher(
33: servletContext, request);
34: try {
35: containerLauncher.startContainer();
36: } catch (ServletException e) {
37: throw new WebWorkException(
38: "Could not start pico container", e);
39: }
40:
41: return containerLauncher;
42: }
43:
44: protected void afterActionInvocation(HttpServletRequest request,
45: Object o, Object o1) {
46: ServletRequestContainerLauncher containerLauncher = (ServletRequestContainerLauncher) o;
47: containerLauncher.killContainer();
48:
49: objectReference.set(null);
50: }
51: }
|