openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de>
Subject Re: Lookup bean using beanManager returning null
Date Thu, 12 Jun 2014 17:52:55 GMT
Hi Felipe!

Let me first ask you what you intend to do. I like to learn about your use case and then we
should be able to help you.

Your sample shows a class (Permissao) which has no qualifier annotations at all. 

But your sample also shows a Qualifier @BusinessBean. Where do you use it?
Do you get a BeanManager at all?

Do you have your sample online somewhere? Maybe on github?
That would really make it easier for us to help you.

LIeGrue,
strub



On Thursday, 12 June 2014, 19:11, Felipe Pina <fop.net@gmail.com> wrote:
 

>
>
>I haved changed my method according to your reference http://deltaspike.apache.org/core.html#beanprovider
>
>
>but still no success  :( 
>
>
>@SuppressWarnings("unchecked")
>public static <T> T getContextualInstance(final Class<T> type) {
>BeanManager manager = getBeanManager();
>    T result = null;
>    
>    @SuppressWarnings("serial")
>Annotation[] annotations = { new AnnotationLiteral<BusinessBean>() {} };
>        
>Set<Bean<?>> beans = manager.getBeans(type, annotations); -> empty
>beans = manager.getBeans(type);  -> empty
>beans = manager.getBeans("teste"); -> empty
>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;
>}
>
>My dependencies 
>
>
> <properties>
>
>  <openwebbeans.version>1.2.1</openwebbeans.version>
>
></properties>
>
>
>
>    <dependency>
>            <groupId>org.apache.geronimo.specs</groupId>
>            <artifactId>geronimo-atinject_1.0_spec</artifactId>
>            <version>1.0</version>
>            <scope>compile</scope>
>        </dependency>
>        <!-- JSR-299  -->
>        <dependency>
>            <groupId>org.apache.geronimo.specs</groupId>
>            <artifactId>geronimo-jcdi_1.0_spec</artifactId>
>            <version>1.0</version>
>            <scope>compile</scope>
>        </dependency>
>
>
>        <dependency>
>            <groupId>org.apache.geronimo.specs</groupId>
>            <artifactId>geronimo-interceptor_1.1_spec</artifactId>
>            <version>1.0</version>
>            <scope>compile</scope>
>        </dependency>
>        
>        <dependency>
>            <groupId>org.apache.openwebbeans</groupId>
>            <artifactId>openwebbeans-impl</artifactId>
>            <version>${openwebbeans.version}</version>
>            <scope>runtime</scope>
>        </dependency>
>
>
>        <dependency>
>            <groupId>org.apache.openwebbeans</groupId>
>            <artifactId>openwebbeans-web</artifactId>
>            <version>${openwebbeans.version}</version>
>            <scope>runtime</scope>
>        </dependency>
>        
>         <!-- SPI (Service Provider Interface). -->
>     <dependency>
>            <groupId>org.apache.openwebbeans</groupId>
>            <artifactId>openwebbeans-spi</artifactId>
>            <version>${openwebbeans.version}</version>
>            <scope>runtime</scope>
>        </dependency>    
>
>
>
>
>
>
>
>2014-06-12 10:03 GMT-03:00 Thomas Andraschko <andraschko.thomas@gmail.com>:
>
>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 <fop.net@gmail.com>:
>>
>>
>>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 <andraschko.thomas@gmail.com>:
>>>
>>>
>>>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 <gerhard.petracek@gmail.com>:
>>>>
>>>>
>>>>@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 <andraschko.thomas@gmail.com>:
>>>>>
>>>>>
>>>>>Have a look at the bean manager java doc ->
>>>>>>
>>>>>>getBeans(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 <fop.net@gmail.com>:
>>>>>>
>>>>>>
>>>>>>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
>>>>>>>	* 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
>>>
>>
>
>
>
>-- 
>Atenciosamente,
>Felipe Pina
>
>
>
Mime
View raw message