KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > enterprise > jbi > serviceengine > bridge > EndpointHelper


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the License). You may not use this file except in
5  * compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * https://glassfish.dev.java.net/public/CDDLv1.0.html or
9  * glassfish/bootstrap/legal/CDDLv1.0.txt.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * Header Notice in each file and include the License file
15  * at glassfish/bootstrap/legal/CDDLv1.0.txt.
16  * If applicable, add the following below the CDDL Header,
17  * with the fields enclosed by brackets [] replaced by
18  * you own identifying information:
19  * "Portions Copyrighted [year] [name of copyright owner]"
20  *
21  * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
22  */

23 package com.sun.enterprise.jbi.serviceengine.bridge;
24
25 import com.sun.enterprise.deployment.WebServiceEndpoint;
26 import com.sun.enterprise.jbi.serviceengine.ServiceEngineException;
27 import com.sun.enterprise.jbi.serviceengine.core.ServiceEngineEndpoint;
28 import com.sun.enterprise.jbi.serviceengine.core.EndpointRegistry;
29 import com.sun.enterprise.jbi.serviceengine.core.JavaEEServiceEngineContext;
30 import com.sun.enterprise.webservice.monitoring.WebServiceEngine;
31 import com.sun.enterprise.webservice.monitoring.Endpoint;
32 import com.sun.enterprise.webservice.monitoring.EndpointLifecycleListener;
33 import com.sun.enterprise.webservice.monitoring.WebServiceEngineFactory;
34 import com.sun.enterprise.config.serverbeans.*;
35 import com.sun.enterprise.config.ConfigBean;
36 import com.sun.enterprise.config.ConfigContext;
37 import com.sun.enterprise.deployment.Application;
38 import com.sun.enterprise.server.*;
39 import com.sun.logging.LogDomains;
40 import javax.jbi.component.ComponentContext;
41 import java.util.Map JavaDoc;
42 import java.util.HashMap JavaDoc;
43 import java.util.logging.Level JavaDoc;
44 import java.util.Iterator JavaDoc;
45 import java.util.logging.Logger JavaDoc;
46 import javax.jbi.servicedesc.ServiceEndpoint;
47 import javax.xml.namespace.QName JavaDoc;
48
49 /**
50  * A utillity class which keeps track of JBI enabled end points
51  * @author Manisha Umbarje
52  */

53 public class EndpointHelper {
54     
55     /** A web service engine */
56     private WebServiceEngine engine ;
57     private ComponentContext context ;
58     private EndpointRegistry registry;
59     private Map JavaDoc uriToDetailsMap ;
60     private static EndpointHelper helper;
61     private EndpointLifecycleListener epLifecycleListener;
62     /**
63      * Internal handle to the logger instance
64      */

65     protected static final Logger JavaDoc logger =
66             LogDomains.getLogger(LogDomains.SERVER_LOGGER);
67     
68     /** Creates a new instance of EndpointHelper */
69     private EndpointHelper() {
70         engine = WebServiceEngineFactory.getInstance().getEngine();
71         epLifecycleListener = new EndpointLifecycleListenerImpl();
72         engine.addLifecycleListener(epLifecycleListener);
73         context = JavaEEServiceEngineContext.getInstance().getJBIContext();
74         registry = EndpointRegistry.getInstance();
75         uriToDetailsMap = new HashMap JavaDoc();
76     }
77     
78     public static EndpointHelper getInstance() {
79         if (helper == null) {
80             helper = new EndpointHelper();
81         }
82         return helper;
83     }
84     
85     public void initialize() {
86         Iterator JavaDoc<Endpoint> endpoints = engine.getEndpoints();
87         while(endpoints.hasNext()) {
88             registerEndpoint(endpoints.next());
89         }
90     }
91     
92     public void enableEndpoint(QName JavaDoc service, String JavaDoc endpointName) {
93         if(endpointName != null) {
94             ServiceEngineEndpoint endpoint = registry.get(service, endpointName);
95             if(endpoint != null && (!endpoint.isEnabled())) {
96                 try {
97                     ServiceEndpoint jbiEndpoint = context.activateEndpoint(
98                             endpoint.getServiceName(),
99                             endpoint.getEndpointName());
100                     endpoint.setServiceEndpoint(jbiEndpoint);
101                     endpoint.setEnabled(true);
102                     debug(Level.INFO,"serviceengine.enable_endpoint",
103                             new Object JavaDoc[]{service.getLocalPart(), endpointName});
104                 } catch(Exception JavaDoc e) {
105                     debug(Level.SEVERE,"serviceengine.error_enable",
106                             new Object JavaDoc[]{service.getLocalPart(), endpointName});
107                             
108                 }
109             }
110         }
111     }
112
113     /**
114      * Activates the end point in JBI
115      * @param endPoint endPoint to be activated in JBI
116      */

117     public void registerEndpoint(Endpoint endpoint) {
118         registerEndpoint(endpoint.getDescriptor());
119     }
120     
121     public void registerEndpoint(WebServiceEndpoint webServiceDesc) {
122         if(webServiceDesc != null) {
123             // activate the end point in JBI
124
String JavaDoc endpointName = webServiceDesc.hasWsdlPort() ? webServiceDesc.getWsdlPort().getLocalPart() : webServiceDesc.getEndpointName();
125          
126             debug(Level.FINE,"serviceengine.start_registration",
127                     new Object JavaDoc[]{webServiceDesc.getServiceName(),
128                             endpointName});
129                 
130             try {
131            
132                 boolean ejbType = webServiceDesc.implementedByEjbComponent() ;
133                 boolean jaxwsFlag =
134                         webServiceDesc.getWebService().getMappingFileUri() == null;
135                 String JavaDoc relativeURI = webServiceDesc.getEndpointAddressUri();
136                 ClassLoader JavaDoc classLoader = webServiceDesc.getBundleDescriptor().getClassLoader();
137                 //logger.info(" ClassLoader in service engine is : "+ classLoader);
138
String JavaDoc implClass = null;
139                 String JavaDoc contextRoot = null;
140                 ServiceEndpoint endpoint = null;
141                 ServiceEngineEndpoint seEndpoint = null;
142                 if(ejbType) {
143                     implClass = webServiceDesc.getTieClassName();
144                 } else {
145                     implClass = webServiceDesc.getServletImplClass();
146                     contextRoot =
147                             webServiceDesc.getWebComponentImpl().
148                             getWebBundleDescriptor().getContextRoot();
149                     relativeURI = contextRoot + relativeURI;
150                 }
151                 if(isJBIEnabled(webServiceDesc)) {
152                     endpoint = context.activateEndpoint(
153                             webServiceDesc.getServiceName(),
154                             endpointName);
155                     seEndpoint = new ServiceEngineEndpoint(endpoint,
156                         webServiceDesc.getWebService().getGeneratedWsdlFilePath(),
157                         webServiceDesc.getServiceEndpointInterface(),
158                         implClass, webServiceDesc.getEndpointAddressUri(),
159                         contextRoot,ejbType,
160                         jaxwsFlag, true, classLoader);
161                      debug(Level.FINE,"serviceengine.success_registration",
162                              new Object JavaDoc[]{webServiceDesc.getServiceName(),
163                             endpointName});
164
165                 } else {
166                     seEndpoint = new ServiceEngineEndpoint(webServiceDesc.getServiceName(),
167                         endpointName,
168                         webServiceDesc.getWebService().getGeneratedWsdlFilePath(),
169                         webServiceDesc.getServiceEndpointInterface(),
170                         implClass, webServiceDesc.getEndpointAddressUri(),
171                         contextRoot,ejbType,
172                         jaxwsFlag, true, classLoader);
173                     seEndpoint.setEnabled(false);
174                 }
175                     
176                 // even if jbi-enabled flag is off, internal registries keep track
177
// of deployed web services in SJSAS
178
registry.put(webServiceDesc.getServiceName(),
179                         endpointName, seEndpoint);
180                 
181                 uriToDetailsMap.put(relativeURI,
182                         new Object JavaDoc[]{webServiceDesc.getServiceName(),
183                                 endpointName});
184             } catch (Exception JavaDoc e) {
185                 debug(Level.SEVERE,"serviceengine.error_registration",
186                         new Object JavaDoc[]{webServiceDesc.getServiceName(),
187                                 endpointName});
188                 
189             }
190                             
191         }
192     }
193     
194     /**
195      * Deactivates the end point in JBI
196      * @param endPoint endPoint to be deactivated in JBI
197      */

198     public void disableEndpoint(QName JavaDoc service, String JavaDoc endpointName) {
199         // deactivates the end point in JBI
200
ServiceEngineEndpoint endpoint = registry.get(service, endpointName);
201         
202         if (endpoint != null) {
203             try {
204                 ServiceEndpoint endpt = endpoint.getServiceEndpoint();
205                 // It's assumed that ServiceEndpoint is priorly activated in JBI
206
if(endpt != null ) {
207                     context.deactivateEndpoint(endpt);
208                     endpoint.setEnabled(false);
209                     debug(Level.INFO,"serviceengine.disable_endpoint",
210                             new Object JavaDoc[]{service.getLocalPart(), endpointName});
211                 }
212             } catch(Exception JavaDoc e) {
213                 debug(Level.SEVERE,"serviceengine.error_disable",
214                         new Object JavaDoc[]{service.getLocalPart(), endpointName});
215                         
216             }
217         }
218     }
219     
220     public void unregisterEndpoint(QName JavaDoc service, String JavaDoc endpointName) {
221         if(endpointName != null) {
222             ServiceEngineEndpoint endpoint = registry.get(service, endpointName);
223             
224             if(endpoint != null) {
225                 String JavaDoc endpointURI = endpoint.getURI();
226                 disableEndpoint(service, endpointName);
227                 registry.delete(service, endpointName);
228                 RuntimeEndpointInfoRegistryImpl.getInstance().
229                         deleteRuntimeEndpointInfo(service,endpointName);
230                 uriToDetailsMap.remove(endpointURI);
231                 debug(Level.INFO,"serviceengine.success_removal",
232                         new Object JavaDoc[]{service.getLocalPart(), endpointName});
233             }
234         }
235     }
236     
237     public void toggleEndpointStatus(String JavaDoc uri, boolean flag) {
238         Object JavaDoc[] endpointInfo = (Object JavaDoc[])uriToDetailsMap.get(uri);
239         if(endpointInfo != null) {
240             if(flag)
241                 enableEndpoint((QName JavaDoc)endpointInfo[0], (String JavaDoc)endpointInfo[1]);
242             else
243                 disableEndpoint((QName JavaDoc)endpointInfo[0], (String JavaDoc)endpointInfo[1]);
244         }
245         
246     }
247     
248     public void destroy() {
249         engine.removeLifecycleListener(epLifecycleListener);
250     }
251     
252     private void debug(Level JavaDoc logLevel, String JavaDoc msgID, Object JavaDoc[] params) {
253         logger.log(logLevel, msgID, params);
254     }
255     
256     private boolean isJBIEnabled(WebServiceEndpoint endpoint) {
257         try {
258             String JavaDoc applicationName =
259                     endpoint.getWebService().getBundleDescriptor().getApplication().getRegistrationName();
260             ConfigContext configContext =
261                     ApplicationServer.getServerContext().getConfigContext();
262             ConfigBean app =
263                     ApplicationHelper.findApplication(configContext,applicationName);
264             String JavaDoc type =
265                     ApplicationHelper.getApplicationType(configContext,
266                     applicationName);
267             String JavaDoc endpointName = endpoint.getEndpointName();
268             if(type.equals(Applications.J2EE_APPLICATION)) {
269                 com.sun.enterprise.config.serverbeans.WebServiceEndpoint endpointBean =
270                         ((J2eeApplication)app).getWebServiceEndpointByName(endpointName);
271                 if(endpointBean != null)
272                     return endpointBean.isJbiEnabled();
273             } else if (type.equals(Applications.EJB_MODULE)) {
274                 com.sun.enterprise.config.serverbeans.WebServiceEndpoint endpointBean =
275                         ((EjbModule)app).getWebServiceEndpointByName(endpointName);
276                 if(endpointBean != null)
277                     return endpointBean.isJbiEnabled();
278             } else if (type.equals(Applications.WEB_MODULE)) {
279                 com.sun.enterprise.config.serverbeans.WebServiceEndpoint endpointBean =
280                         ((WebModule)app).getWebServiceEndpointByName(endpointName);
281                 if(endpointBean != null)
282                     return endpointBean.isJbiEnabled();
283             }
284         } catch(Throwable JavaDoc ce) {
285             debug(Level.SEVERE,"serviceengine.config_not_found",
286                     new Object JavaDoc[]{endpoint.getServiceName(),
287                             endpoint.getEndpointName()});
288         }
289         // By default endpoints are enabled
290
return true;
291     }
292     
293 }
294
Popular Tags