Hi all,
We’re working in a java Project and we wanted to extend our application with 
specialization beans in external classes.

We were trying to include one of those beans to our context dynamically using 
DeltaSpike. This bean specializes another one, as you can see in the code below:

@Stateless
public ClassA implements InterfaceA {…}

@Stateless
@Specializes
public class SpecializationOfClassA extends ClassA {…}

Firstly we tried to use BeforeBeanDiscovery event to add the annotated type to 
the Bean manager:

public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd, BeanManager 
bm) {
        try {
               final javax.enterprise.inject.spi.AnnotatedType<?> at = 
bm.createAnnotatedType(SpecializationOfClassA.class);
               bbd.addAnnotatedType(at);
 . . .

The above code triggered the following exception: WELD-000047 Specializing bean 
must extend another bean
This makes no sense for us, because the class we are passing extends another 
one.

Then we tried to use AfterBeanDiscovery event to include the new bean to the 
bean manager:

public void addCdiBeans(final @Observes AfterBeanDiscovery abd, final 
BeanManager bm) throws Exception {
              AnnotatedType<Object> annotatedType = new 
AnnotatedTypeBuilder().readFromType(SpecializationOfClassA.class).create();
              final InjectionTarget it = 
bm.createInjectionTarget(annotatedType);
              final BeanBuilder<Object> beanBuilder =
                                           new BeanBuilder<Object>(bm)
                                                                       
.readFromType(annotatedType)
                                                                       
.injectionPoints(it.getInjectionPoints())
                                                         ;
              final Bean<Object> cdiBean = beanBuilder.create();
              abd.addBean(cdiBean);
}

The code above does not trigger any exceptions but it does not work because 
ClassA is injected instead of its specialization SpecializationOfClassA.

We are deploying the application in JBoss 7.1.1.
Do you know if this would be posible using DeltaSpike or there’s a problem with 
specialization classes?

Thanks a lot and best regards.

Reply via email to