// Let's first create EEInjector (which pulls from ENC and pushes to EJB instance) for EJB
// and then create a EEInjector for each of the interceptors for the bean
JBossEnterpriseBeanMetaData beanMetaData = container.getXml();
// convert JBMETA metadata to jboss-injection specific metadata
JndiEnvironmentRefsGroup jndiEnvironment = new JndiEnvironmentImpl(beanMetaData, container.getClassloader());
// For optimization, we'll create an Injector only if there's atleast one InjectionTarget
if (this.hasInjectionTargets(jndiEnvironment))
{
// create the injector
EEInjector eeInjector = new EEInjector(jndiEnvironment);
// add the injector the injection manager
injectionManager.addInjector(eeInjector);
// Deploy the Injector as a MC bean (so that the fully populated naming context (obtained via the SwitchBoard
// Barrier) gets injected.
String injectorMCBeanName = this.getInjectorMCBeanNamePrefix(unit) + ",bean=" + container.getEjbName();
BeanMetaData injectorBMD = this.createInjectorBMD(injectorMCBeanName, eeInjector, switchBoard);
// add BMD to parent, since this is a component DU. and BMDDeployer doesn't pick up BMD from components!
unit.getParent().addAttachment(BeanMetaData.class + ":" + injectorMCBeanName, injectorBMD);
// Add the Injector dependency on the deployment (so that the DU doesn't
// get started till the Injector is available)
DependencyPolicy dependsPolicy = container.getDependencyPolicy();
dependsPolicy.addDependency(injectorMCBeanName);
log.debug("Added Injector dependency: " + injectorMCBeanName + " for EJB: " + container.getEjbName() + " in unit " + unit);
}
// Now setup injectors for the interceptors of the bean
InterceptorsMetaData interceptors = JBossMetaData.getInterceptors(beanMetaData.getEjbName(), beanMetaData.getJBossMetaData());
if (interceptors == null || interceptors.isEmpty())
{
return;
}
for (InterceptorMetaData interceptor : interceptors)
{
if (interceptor == null)
{
continue;
}
JndiEnvironmentRefsGroup jndiEnvironmentForInterceptor = new JndiEnvironmentImpl(interceptor, container.getClassloader());
// For optimization, we'll create an Injector only if there's atleast one InjectionTarget
if (this.hasInjectionTargets(jndiEnvironmentForInterceptor))
{
// create the injector
EEInjector eeInjector = new EEInjector(jndiEnvironmentForInterceptor);