[weld-dev] Initialising newly registered beans

Pete Muir pmuir at redhat.com
Mon Nov 30 10:22:24 EST 2009


OIC, sorry, I misread your email.

A much easier approach is to do:

 public void registerWeldSEBeans(@Observes BeforeBeanDiscovery event, BeanManagerImpl beanManager)
 {
    event.addAnnotatedType(beanManager.createAnnoatedType(ShutdownManager.class));
    event.addAnnotatedType(beanManager.createAnnoatedType(ParametersFactory.class)); 
}

which adds those classes to the ones that Weld will discover.

Alternatively, since you control the scanning and bootstrap, you could add them even earlier, when we create BeanDeploymentArchive.

On 30 Nov 2009, at 15:19, Peter Royle wrote:

> 
> On 30/11/2009, at 10:29 PM, Pete Muir wrote:
> 
>> Why are you doing this?
> 
> The ShutdownManager and ParametersFactory beans are currently discovered using conventional classpath scanning. IE: there is a /META-INF/beans.xml in the weld-se jar. Therefore when I create a shaded jar of Weld SE, every class in the dependant jars gets picked up as a simple bean, which obviously wreaks havoc.
> 
>> We had this working properly, just passing in the classes to scan in the past using bootstrap.
> 
> Not sure what you mean, but if it's easier I'm all ears :).
> 
>> All of this stuff you are accessing is internal impl detail in Weld, it is *not* part of the Weld SPI...
> 
> Yeah I know but since this part of Weld SE and doesn't need to be portable I just went with the easiest classes to work with. If I need to continue down this path I'll hit you up for some pointers.
> 
> Pete.
> 
> 
> 
>> 
>> On 29 Nov 2009, at 23:21, Peter Royle wrote:
>> 
>>> Hi,
>>> 
>>> I've got this extension which I'm using to explicitly register all of the managed beans used by Weld Java SE:
>>> 
>>> public class WeldSEBeanRegistrant implements Extension
>>> {
>>> 
>>>  private final ClassTransformer transformer = new ClassTransformer(new TypeStore());
>>> 
>>>  public void registerWeldSEBeans(@Observes AfterBeanDiscovery event, BeanManagerImpl beanManager)
>>>  {
>>>      addBean(ShutdownManager.class, beanManager, event);
>>>      addBean(ParametersFactory.class, beanManager, event);
>>>  }
>>> 
>>>  private void addBean(final Class<?> klass, BeanManagerImpl beanManager, AfterBeanDiscovery event)
>>>  {
>>>      WeldClass<?> weldClass = WeldClassImpl.of(klass, transformer);
>>>      ManagedBean<?> bean = ManagedBean.of(weldClass, beanManager);
>>>      event.addBean(bean);
>>>      bean.initialize( ___environment___);
>>>  }
>>> }
>>> 
>>> My question is: where should I get the value for ___environment___ from? Is there common idiom for this? 
>>> 
>>> I feel like if I could get access to the 'parent' variable at WeldBootstrap:199 I could call it.getBeanDeployer().getEnvironment() ... but I could be way off!
>>> 
>>> Cheers,
>>> 
>>> Pete.
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> weld-dev mailing list
>>> weld-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/weld-dev
>> 
> 




More information about the weld-dev mailing list