}
// Only process EJB deployments
if (!EjbDeploymentMarker.isEjbDeployment(deploymentUnit) || !(componentDescription instanceof SessionBeanComponentDescription)) {
return;
}
SessionBeanComponentDescription sessionBeanComponentDescription = (SessionBeanComponentDescription) componentDescription;
// fetch the local business interfaces of the bean
Collection<String> localBusinessInterfaces = this.getLocalBusinessInterfaces(sessionBeanComponentDescription, compositeIndex, sessionBeanClass);
if (logger.isTraceEnabled()) {
logger.trace("Session bean: " + sessionBeanComponentDescription.getEJBName() + " has " + localBusinessInterfaces.size() + " local business interfaces namely: " + localBusinessInterfaces);
}
// add it to the component description
sessionBeanComponentDescription.addLocalBusinessInterfaceViews(localBusinessInterfaces);
// In case of EJB bindings, appname == .ear file name (if it's an .ear deployment)
String applicationName = this.getEarName(deploymentUnit);
String globalJNDIBaseName = "java:global/" + (applicationName != null ? applicationName + "/" : "") + sessionBeanComponentDescription.getModuleName() + "/" + sessionBeanComponentDescription.getEJBName();
String appJNDIBaseName = "java:app/" + sessionBeanComponentDescription.getModuleName() + "/" + sessionBeanComponentDescription.getEJBName();
String moduleJNDIBaseName = "java:module/" + sessionBeanComponentDescription.getEJBName();
// the base ServiceName which will be used to create the ServiceName(s) for each of the view bindings
ServiceName baseServiceName = deploymentUnit.getServiceName().append("component").append(sessionBeanComponentDescription.getComponentName());
// now create the bindings
for (String viewClassName : localBusinessInterfaces) {
final BindingDescription globalBinding = new BindingDescription();
globalBinding.setAbsoluteBinding(true);
String globalJNDIName = globalJNDIBaseName + "!" + viewClassName;
globalBinding.setBindingName(globalJNDIName);
globalBinding.setBindingType(viewClassName);
globalBinding.setReferenceSourceDescription(new ServiceBindingSourceDescription(baseServiceName.append("VIEW").append(viewClassName)));
// add the binding to the component description
componentDescription.getBindings().add(globalBinding);
logger.debug("Added java:global jndi binding at " + globalJNDIName + " for local view: " + viewClassName + " of session bean: " + sessionBeanComponentDescription.getEJBName());
// java:app bindings
final BindingDescription appBinding = new BindingDescription();
appBinding.setAbsoluteBinding(true);
String appJNDIName = appJNDIBaseName + "!" + viewClassName;
appBinding.setBindingName(appJNDIName);
appBinding.setBindingType(viewClassName);
appBinding.setReferenceSourceDescription(new ServiceBindingSourceDescription(baseServiceName.append("VIEW").append(viewClassName)));
// add the binding to the component description
componentDescription.getBindings().add(appBinding);
logger.debug("Added java:app jndi binding at " + appJNDIName + " for local view: " + viewClassName + " of session bean: " + sessionBeanComponentDescription.getEJBName());
// java:module bindings
final BindingDescription moduleBinding = new BindingDescription();
moduleBinding.setAbsoluteBinding(true);
String moduleJNDIName = moduleJNDIBaseName + "!" + viewClassName;
moduleBinding.setBindingName(moduleJNDIName);
moduleBinding.setBindingType(viewClassName);
moduleBinding.setReferenceSourceDescription(new ServiceBindingSourceDescription(baseServiceName.append("VIEW").append(viewClassName)));
// add the binding to the component description
componentDescription.getBindings().add(moduleBinding);
logger.debug("Added java:module jndi binding at " + moduleJNDIName + " for local view: " + viewClassName + " of session bean: " + sessionBeanComponentDescription.getEJBName());
}
}