Take a look to my tests. The focus is not how am i passing as parameter
annotation, because the lookup by name works to bean inside WebProject but
not works to bean inside BusinessProject

I have tested using three ways of lookup the bean, and both of bean are
annotated similarly, but the webproject bean works and the BussinessProject
bean do not works (jar package).

 Set<Bean<?>> beans = manager.getBeans(type,
type.getAnnotation(BusinessBean.class));
Set<Bean<?>> beans = manager.getBeans(type);
 Set<Bean<?>> beans = manager.getBeans("teste");




2014-06-12 9:34 GMT-03:00 Thomas Andraschko <[email protected]>:

> You need to a pass a AnnotationLiteral instance instead of
> "type.getAnnotation(yourAnnotation.class)"
> Here it's explained how to create one and use one:
> http://deltaspike.apache.org/core.html#beanprovider
>
>
>
> 2014-06-12 14:26 GMT+02:00 Gerhard Petracek <[email protected]>:
>
> @felipe:
>> we won't respond something different (see [1]), if you keep the wrong
>> code.
>> the one case you mentioned just works, because #getAnnotation returns
>> null.
>>
>> regards,
>> gerhard
>>
>> [1] http://s.apache.org/oDb
>>
>>
>>
>> 2014-06-12 14:16 GMT+02:00 Thomas Andraschko <[email protected]
>> >:
>>
>> Have a look at the bean manager java doc ->
>>>
>>> *getBeans
>>> <http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/spi/BeanManager.html#getBeans%28java.lang.reflect.Type,%20java.lang.annotation.Annotation...%29>*(java.lang.reflect.Type
>>>  beanType,
>>> java.lang.annotation.Annotation... qualifiers)
>>>
>>> RequestScoped isn't a CDI qualifier! ;)
>>>
>>>
>>> 2014-06-12 14:03 GMT+02:00 Felipe Pina <[email protected]>:
>>>
>>> Questions
>>>>
>>>>
>>>>    1. Is there any schema that uses in the beans.xml file that
>>>>    configures the engine to evaluate candidates beans through a package 
>>>> path?
>>>>    2. the fact that the bean be packaged inside a jar which in turn,
>>>>    within a war, is impediment to the proper functioning of the injection 
>>>> of
>>>>    bean?
>>>>
>>>>
>>>>
>>>> *Tests*
>>>>
>>>>    1. lookup bean from string value
>>>>    1. lookup "teste" -> works fine
>>>>       2. lookup "perm" -> *fail returning null*
>>>>    2. lookup bean from type
>>>>       1. lookup using Permissao.class -> * fail returning null*
>>>>
>>>>
>>>>
>>>> *Project Structure*
>>>>
>>>> *WAR*
>>>> *  |- WebProject*
>>>> *            |- com.company.bean.JSFBean  -> **@Named(value="teste")*
>>>> *  |-  BusinessProject*
>>>> *             |- com.company.bean.Permissao -> *
>>>> *@Named(value="perm") @BusinessBean*
>>>>
>>>> *My Qualifier*
>>>>
>>>>  @Qualifier
>>>> @Retention(RUNTIME)
>>>> @Target({TYPE, METHOD, FIELD, PARAMETER})
>>>> public @interface BusinessBean {
>>>>
>>>> }
>>>>
>>>> *My bean.*
>>>>
>>>> @javax.enterprise.context.RequestScoped
>>>> @javax.enterprise.inject.Default
>>>> public class Permissao extends NegocioBase<PermissaoDTO> {
>>>> ....
>>>> }
>>>>
>>>>
>>>> *context.xml*
>>>>  <Resource name="BeanManager"
>>>>         auth="Container"
>>>>         type="javax.enterprise.inject.spi.BeanManager"
>>>>         factory="org.apache.webbeans.container.ManagerObjectFactory"/>
>>>>
>>>>
>>>> *web.xml*
>>>>
>>>> <!-- I ran with and without this resource-env-ref section -->
>>>>   <resource-env-ref>
>>>>     <description>Object factory for the CDI Bean Manager</description>
>>>>     <resource-env-ref-name>BeanManager</resource-env-ref-name>
>>>>
>>>> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
>>>>   </resource-env-ref>
>>>>
>>>> *BeanFactory*
>>>>
>>>> public class BeanFactory {
>>>>  static BeanManager getBeanManager() {
>>>>      InitialContext context;
>>>>     Object result;
>>>>     try {
>>>>          context = new InitialContext();
>>>>         result = context.lookup("java:comp/env/BeanManager"); //lookup
>>>> in Tomcat
>>>>      } catch (NamingException e) {
>>>>         try {
>>>>             context = new InitialContext();
>>>>              result = context.lookup("java:comp/BeanManager");
>>>> //lookup in JBossAS
>>>>         } catch (NamingException ex) {
>>>>              throw new RuntimeException("BeanManager could not be
>>>> found in JNDI", e);
>>>>         }
>>>>     }
>>>>      return (BeanManager) result;
>>>> }
>>>>  @SuppressWarnings("unchecked")
>>>>  public static <T> T getContextualInstance(final Class<T> type) {
>>>> BeanManager manager = getBeanManager();
>>>>      T result = null;
>>>> *Set<Bean<?>> beans = manager.getBeans(type,
>>>> type.getAnnotation(RequestScoped.class));*
>>>> *---- >  why variable beans isEmpty !!!*
>>>> Bean<T> bean = (Bean<T>) manager.resolve(beans);
>>>>     if (bean != null) {
>>>>          CreationalContext<T> context =
>>>> manager.createCreationalContext(bean);
>>>>         if (context != null) {
>>>>              result = (T) manager.getReference(bean, type, context);
>>>>         }
>>>>     }
>>>>      return result;
>>>> }
>>>> }
>>>>
>>>> --
>>>> Atenciosamente,
>>>> Felipe Pina
>>>>
>>>
>>>
>>
>


-- 
Atenciosamente,
Felipe Pina

Reply via email to