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 <[email protected]>:
> 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
>>
>
>
--
Atenciosamente,
Felipe Pina