Maybe you miss the beans.xml in your jar but the way how you call #getBeans with an qualifier is wrong.
2014-06-12 14:55 GMT+02:00 Felipe Pina <[email protected]>: > 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 >
