KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dynaop > remote > Service


1 package dynaop.remote;
2
3 import java.io.IOException JavaDoc;
4 import java.io.ObjectInputStream JavaDoc;
5 import java.io.ObjectOutputStream JavaDoc;
6
7 import javax.servlet.ServletConfig JavaDoc;
8 import javax.servlet.ServletException JavaDoc;
9 import javax.servlet.http.HttpServlet JavaDoc;
10 import javax.servlet.http.HttpServletRequest JavaDoc;
11 import javax.servlet.http.HttpServletResponse JavaDoc;
12
13 import dynaop.ProxyFactory;
14 import dynaop.util.Classes;
15
16 /**
17  * Service servlet. Specify service implementation class using "class" init.
18  * parameter. Runs service implementation instance through default proxy
19  * factory. For example, configure your service in the
20  * <code>web.xml</code> file:
21  *
22  * <pre>
23  * &lt;servlet>
24  * &lt;servlet-name>MyService&lt;/servlet-name>
25  * &lt;servlet-class>dynaop.remote.Service&lt;/servlet-class>
26  * &lt;init-param>
27  * &lt;param-name>class&lt;/param-name>
28  * &lt;param-value>mypackage.MyServiceImpl&lt;/param-value>
29  * &lt;/init-param>
30  * &lt;/servlet>
31  *
32  * &lt;servlet-mapping>
33  * &lt;servlet-name>MyService&lt;/servlet-name>
34  * &lt;url-pattern>/services/myService&lt;/url-pattern>
35  * &lt;/servlet-mapping>
36  * </pre>
37  *
38  * Next, from the client, create a remote stub for your service so that you can
39  * invoke it:
40  *
41  * <pre>
42  * MyService myService =
43  * (MyService) new Home().create(
44  * new URL("http://myhost/services/myService"),
45  * MyService.class
46  * );
47  * </pre>
48  *
49  * @author Bob Lee (crazybob@crazybob.org)
50  */

51 public class Service extends HttpServlet JavaDoc {
52
53     Object JavaDoc serviceImplementation;
54     
55     public void doPost(HttpServletRequest JavaDoc request,
56             HttpServletResponse JavaDoc response) throws ServletException JavaDoc, IOException JavaDoc {
57         try {
58             ObjectInputStream JavaDoc in =
59                 new PatchedObjectInputStream(request.getInputStream());
60             InvocationHandle invocation =
61                 (InvocationHandle) in.readObject();
62             in.close();
63
64             Object JavaDoc result;
65             try {
66                 result = invocation.invoke(this.serviceImplementation);
67             }
68             catch (Throwable JavaDoc t) {
69                 result = t;
70             }
71
72             ObjectOutputStream JavaDoc out =
73                 new ObjectOutputStream JavaDoc(response.getOutputStream());
74             out.writeObject(result);
75             out.close();
76         }
77         catch (ClassNotFoundException JavaDoc e) {
78             throw new ServletException JavaDoc(e);
79         }
80     }
81     
82     public void init(ServletConfig JavaDoc config) throws ServletException JavaDoc {
83         super.init(config);
84
85         String JavaDoc className = config.getInitParameter("class");
86         if (className == null)
87             throw new ServletException JavaDoc(
88                 "Specify service implementation class name in 'class' " +
89                 "init param."
90             );
91         try {
92             Class JavaDoc clazz = Classes.forName(className);
93             this.serviceImplementation =
94                 ProxyFactory.getInstance().wrap(clazz.newInstance());
95         }
96         catch (Exception JavaDoc e) {
97             throw new ServletException JavaDoc(e);
98         }
99     }
100 }
101
Popular Tags