@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 >> > >
