KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jdon > controller > WebAppUtil


1 /**
2  * Copyright 2003-2006 the original author or authors.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6
7  http://www.apache.org/licenses/LICENSE-2.0
8
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */

15
16 package com.jdon.controller;
17
18 import javax.servlet.ServletContext JavaDoc;
19 import javax.servlet.http.HttpServletRequest JavaDoc;
20
21 import org.aopalliance.intercept.MethodInterceptor;
22
23 import com.jdon.aop.interceptor.InterceptorsChain;
24 import com.jdon.aop.joinpoint.Pointcut;
25 import com.jdon.bussinessproxy.TargetMetaDef;
26 import com.jdon.bussinessproxy.meta.MethodMetaArgs;
27 import com.jdon.container.ContainerWrapper;
28 import com.jdon.container.builder.ContainerBuilder;
29 import com.jdon.container.finder.ComponentKeys;
30 import com.jdon.container.finder.ServletContainerFinder;
31 import com.jdon.controller.events.EventModel;
32 import com.jdon.controller.model.ModelIF;
33 import com.jdon.controller.service.Service;
34 import com.jdon.controller.service.ServiceFacade;
35 import com.jdon.controller.service.ServiceFactory;
36 import com.jdon.model.handler.HandlerMethodMetaArgsFactory;
37 import com.jdon.util.Debug;
38
39 /**
40  * Using WebAppUtil, framework's user can get his businesss service object that
41  * defined in jdonframework.xml
42  *
43  * this is main and important client class for framework's user.
44  *
45  *
46  * @author banq
47  */

48 public class WebAppUtil {
49     private final static String JavaDoc module = WebAppUtil.class.getName();
50
51     private final static ServletContainerFinder scf = new ServletContainerFinder();
52
53     /**
54      * get a service from jdonframework.xml's service configure. the service
55      * maybe is a pojo service or a ejb service.
56      *
57      * <p>if user has a business interface, so the interface can has two
58      * implemention:pojo or ejb, if is ejb, the ejb's local/remote interface
59      * must inherit the business interface. so the application's MVC will
60      * completely seperate from his business lay
61      *
62      * <p>usage: in jdonframework.xml: <pojoService name="userJdbcDao"
63      * class="news.container.UserJdbcDao"> <constructor value="java:/NewsDS"/>
64      * </pojoService>
65      *
66      * <p>UserDao ud = (UserDao)WebAppUtil.getService(“userJdbcDaoâ€?, request);
67      *
68      * UserDao is a interface.
69      *
70      * @param name String
71      * @param request HttpServletRequest
72      * @return Object
73      * @throws Exception
74      */

75     public static Object JavaDoc getService(String JavaDoc name, HttpServletRequest JavaDoc request) {
76         ServiceFacade serviceFacade = new ServiceFacade();
77         ServiceFactory serviceFactory = serviceFacade.getServiceFactory(request);
78         return serviceFactory.getService(name, request);
79     }
80
81     public static Object JavaDoc getService(TargetMetaDef targetMetaDef, HttpServletRequest JavaDoc request) {
82         ServiceFacade serviceFacade = new ServiceFacade();
83         ServiceFactory serviceFactory = serviceFacade.getServiceFactory(request);
84         return serviceFactory.getService(targetMetaDef, request);
85     }
86
87     /**
88      * get a component that registered in container. the component is not
89      * different from the service.
90      *
91      * the component instance is single instance
92      *
93      */

94     public static Object JavaDoc getComponentInstance(String JavaDoc name, HttpServletRequest JavaDoc request) {
95         ContainerWrapper containerWrapper = scf.findContainer(request);
96         return containerWrapper.lookup(name);
97     }
98
99     public static Object JavaDoc getComponentInstance(String JavaDoc name, ServletContext JavaDoc sc) {
100         ContainerWrapper containerWrapper = scf.findContainer(sc);
101         return containerWrapper.lookup(name);
102     }
103
104     /**
105      * get a EJB service directly.
106      *
107      * @param name String
108      * @param request HttpServletRequest
109      * @return Object
110      * @throws Exception
111      */

112     public static Object JavaDoc getEJBService(String JavaDoc name, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
113         return getService(name, request);
114     }
115
116     /**
117      * Command pattern for service invoke
118      * sample:
119      * browser url: /aaa.do?method=xxxxx
120      *
121      * xxxxx is the service's method, such as:
122      *
123      * public interface TestService{
124      *    void xxxxx(EventModel em);  
125      * }
126      * @see com.jdon.strutsutil.ServiceMethodAction
127      *
128      * @param serviceName the service name in jdonframework.xml
129      * @param methodName the method name
130      * @param request
131      * @param model the method parameter must be packed in a ModelIF object.
132      * if no method parameter, set it to null;
133      * @return return the service dealing result
134      * @throws Exception
135      *
136      */

137     public static Object JavaDoc callService(String JavaDoc serviceName, String JavaDoc methodName, Object JavaDoc[] methodParams, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
138         Debug.logVerbose("[JdonFramework] call the method: " + methodName + " for the service: " + serviceName, module);
139         Object JavaDoc result = null;
140         try {
141             HandlerMethodMetaArgsFactory maFactory = new HandlerMethodMetaArgsFactory();
142             MethodMetaArgs methodMetaArgs = maFactory.createDirectMethod(methodName, methodParams);
143
144             ServiceFacade serviceFacade = new ServiceFacade();
145             Service service = serviceFacade.getService(request);
146             result = service.execute(serviceName, methodMetaArgs, request);
147         } catch (Exception JavaDoc ex) {
148             Debug.logError("[JdonFramework] serviceAction Error: " + ex, module);
149             throw new Exception JavaDoc(" serviceAction Error:" + ex);
150         }
151         return result;
152     }
153    
154
155     /**
156      * get the key for the application container user can directly get his
157      * container from servletcontext by the key.
158      *
159      * @return String
160      */

161     public static String JavaDoc getContainerKey() {
162         return ContainerBuilder.APPLICATION_CONTEXT_ATTRIBUTE_NAME;
163     }
164
165     /**
166      * get the key for the interceptor, by the key, use can add his interceptor
167      * to the container
168      *
169      * @return String
170      */

171     public static String JavaDoc getInterceptorKey() {
172         return InterceptorsChain.NAME;
173     }
174
175     /**
176      * get this Web application's container
177      *
178      * @param request HttpServletRequest
179      * @return ContainerWrapper
180      * @throws Exception
181      */

182     public static ContainerWrapper getContainer(HttpServletRequest JavaDoc request) throws Exception JavaDoc {
183         ServletContainerFinder scf = new ServletContainerFinder();
184         return scf.findContainer(request);
185     }
186
187     /**
188      * add a MethodInterceptor for all services how to implements a
189      * MethodInterceptor,reference:
190      *
191      */

192     public static void addInterceptor(MethodInterceptor interceptor, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
193         addInterceptor(Pointcut.TARGET_PROPS_SERVICES, interceptor, request);
194     }
195
196     /**
197      * add a MethodInterceptor for pointcut
198      *
199      * @param pointcut Pointcut values
200      * @param interceptor
201      * @param request
202      * @throws Exception
203      */

204     public static void addInterceptor(String JavaDoc pointcut, MethodInterceptor interceptor, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
205         ContainerWrapper cw = getContainer(request);
206         if (cw == null) {
207             throw new Exception JavaDoc("Please at first init the JdonFramework!");
208         }
209         InterceptorsChain interceptorsChain = (InterceptorsChain) cw.lookup(ComponentKeys.INTERCEPTOR_CHAIN);
210         interceptorsChain.addInterceptor(pointcut, interceptor);
211     }
212
213 }
214
Popular Tags