1 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 ; 42 import java.util.HashMap ; 43 import java.util.logging.Level ; 44 import java.util.Iterator ; 45 import java.util.logging.Logger ; 46 import javax.jbi.servicedesc.ServiceEndpoint; 47 import javax.xml.namespace.QName ; 48 49 53 public class EndpointHelper { 54 55 56 private WebServiceEngine engine ; 57 private ComponentContext context ; 58 private EndpointRegistry registry; 59 private Map uriToDetailsMap ; 60 private static EndpointHelper helper; 61 private EndpointLifecycleListener epLifecycleListener; 62 65 protected static final Logger logger = 66 LogDomains.getLogger(LogDomains.SERVER_LOGGER); 67 68 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 (); 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 <Endpoint> endpoints = engine.getEndpoints(); 87 while(endpoints.hasNext()) { 88 registerEndpoint(endpoints.next()); 89 } 90 } 91 92 public void enableEndpoint(QName service, String 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 []{service.getLocalPart(), endpointName}); 104 } catch(Exception e) { 105 debug(Level.SEVERE,"serviceengine.error_enable", 106 new Object []{service.getLocalPart(), endpointName}); 107 108 } 109 } 110 } 111 } 112 113 117 public void registerEndpoint(Endpoint endpoint) { 118 registerEndpoint(endpoint.getDescriptor()); 119 } 120 121 public void registerEndpoint(WebServiceEndpoint webServiceDesc) { 122 if(webServiceDesc != null) { 123 String endpointName = webServiceDesc.hasWsdlPort() ? webServiceDesc.getWsdlPort().getLocalPart() : webServiceDesc.getEndpointName(); 125 126 debug(Level.FINE,"serviceengine.start_registration", 127 new Object []{webServiceDesc.getServiceName(), 128 endpointName}); 129 130 try { 131 132 boolean ejbType = webServiceDesc.implementedByEjbComponent() ; 133 boolean jaxwsFlag = 134 webServiceDesc.getWebService().getMappingFileUri() == null; 135 String relativeURI = webServiceDesc.getEndpointAddressUri(); 136 ClassLoader classLoader = webServiceDesc.getBundleDescriptor().getClassLoader(); 137 String implClass = null; 139 String 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 []{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 registry.put(webServiceDesc.getServiceName(), 179 endpointName, seEndpoint); 180 181 uriToDetailsMap.put(relativeURI, 182 new Object []{webServiceDesc.getServiceName(), 183 endpointName}); 184 } catch (Exception e) { 185 debug(Level.SEVERE,"serviceengine.error_registration", 186 new Object []{webServiceDesc.getServiceName(), 187 endpointName}); 188 189 } 190 191 } 192 } 193 194 198 public void disableEndpoint(QName service, String endpointName) { 199 ServiceEngineEndpoint endpoint = registry.get(service, endpointName); 201 202 if (endpoint != null) { 203 try { 204 ServiceEndpoint endpt = endpoint.getServiceEndpoint(); 205 if(endpt != null ) { 207 context.deactivateEndpoint(endpt); 208 endpoint.setEnabled(false); 209 debug(Level.INFO,"serviceengine.disable_endpoint", 210 new Object []{service.getLocalPart(), endpointName}); 211 } 212 } catch(Exception e) { 213 debug(Level.SEVERE,"serviceengine.error_disable", 214 new Object []{service.getLocalPart(), endpointName}); 215 216 } 217 } 218 } 219 220 public void unregisterEndpoint(QName service, String endpointName) { 221 if(endpointName != null) { 222 ServiceEngineEndpoint endpoint = registry.get(service, endpointName); 223 224 if(endpoint != null) { 225 String 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 []{service.getLocalPart(), endpointName}); 233 } 234 } 235 } 236 237 public void toggleEndpointStatus(String uri, boolean flag) { 238 Object [] endpointInfo = (Object [])uriToDetailsMap.get(uri); 239 if(endpointInfo != null) { 240 if(flag) 241 enableEndpoint((QName )endpointInfo[0], (String )endpointInfo[1]); 242 else 243 disableEndpoint((QName )endpointInfo[0], (String )endpointInfo[1]); 244 } 245 246 } 247 248 public void destroy() { 249 engine.removeLifecycleListener(epLifecycleListener); 250 } 251 252 private void debug(Level logLevel, String msgID, Object [] params) { 253 logger.log(logLevel, msgID, params); 254 } 255 256 private boolean isJBIEnabled(WebServiceEndpoint endpoint) { 257 try { 258 String applicationName = 259 endpoint.getWebService().getBundleDescriptor().getApplication().getRegistrationName(); 260 ConfigContext configContext = 261 ApplicationServer.getServerContext().getConfigContext(); 262 ConfigBean app = 263 ApplicationHelper.findApplication(configContext,applicationName); 264 String type = 265 ApplicationHelper.getApplicationType(configContext, 266 applicationName); 267 String 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 ce) { 285 debug(Level.SEVERE,"serviceengine.config_not_found", 286 new Object []{endpoint.getServiceName(), 287 endpoint.getEndpointName()}); 288 } 289 return true; 291 } 292 293 } 294 | Popular Tags |