openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gurkan Erdogdu <cgurkanerdo...@gmail.com>
Subject Re: Decorators with generic type-arguments
Date Wed, 20 Apr 2011 16:20:20 GMT
>>>The spec says „the actual type is assignable *to*…” and you wrote
isAssignable*From *so I think the correct behavior would be to >>>assign the
Decorator. Anyway the code that applies a Decorator to a bean looks very
good imho and I don’t think the >>>implementation is wrong here, but the
code that checks if the delegate matches the decorator is not right.

>>>The Spec says

This is what we discussed early with RI and TCK guys. (weird words in spec
and using in Java). Spec says "....the actual type is assignable
to the upper bound.....", in Java it means to use "isAssignableFrom" method
not the reverse :)

Cheers


2011/4/20 Arne Limburg <arne.limburg@openknowledge.de>

> Hi Gurkan,
>
>
>
> The spec says „the actual type is assignable *to*…” and you wrote
> isAssignable*From *so I think the correct behavior would be to assign the
> Decorator. Anyway the code that applies a Decorator to a bean looks very
> good imho and I don’t think the implementation is wrong here, but the code
> that checks if the delegate matches the decorator is not right.
>
> The Spec says
>
> “A *decorator *implements one or more bean types and intercepts business
> method invocations of beans which implement
>
> those bean types. These bean types are called *decorated types*.” (8)
>
> “The delegate type of a decorator must implement or extend every decorated
> type (with exactly the same type parameters).” (8.3.1)
>
> I have not tested it with Weld, I’ll do that and tell you. But anyway I
> think this should be fixed.
>
> In my examples every delegate has the same type-parameters as the
> decorator, so it should work.
>
>
>
> I have a fix now for the ClassUtil.setInterfaceTypeHierarchy. I’ll provide
> it via Jira. Unfortunately now I get another error saying something like my
> return type does not match…
>
>
>
> java.lang.IllegalArgumentException: Given bean type : class
> org.apache.owb.TestDecorator is not applicable for the bean instance :
> Name:null,WebBeans Type:DECORATOR,API
> Types:[java.lang.Object,org.apache.owb.TestDecorator,org.apache.owb.GenericInterface],Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]
>
>                at
> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:914)
>
>                at
> org.apache.webbeans.decorator.WebBeansDecoratorConfig.getDecoratorStack(WebBeansDecoratorConfig.java:160)
>
>                at
> org.apache.webbeans.intercept.InterceptorHandler.invoke(InterceptorHandler.java:216)
>
>                at
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:98)
>
>                at
> org.apache.owb.DecoratedBean_$$_javassist_0.isDecoratorCalled(DecoratedBean_$$_javassist_0.java)
>
> I’ll do some further investigation.
>
>
>
> Regards,
>
> Arne
>
>
>
> *Von:* Gurkan Erdogdu [mailto:cgurkanerdogdu@gmail.com]
> *Gesendet:* Mittwoch, 20. April 2011 17:59
>
> *An:* user@openwebbeans.apache.org
> *Betreff:* Re: Decorators with generic type-arguments
>
>
>
> In your example, spec says that
>
>    - the delegate type parameter is a type variable, the bean type
>    parameter is an actual type, and the actual type is assignable
>    to the upper bound, if any, of the type variable.
>
> Actual Type of Bean Class --> Scope
> Upper bound of type variable --> Annotation
>
> Scope.isAssignableFrom(Annotation) --> False
>
> Gurkan
>
> 2011/4/20 Arne Limburg <arne.limburg@openknowledge.de>
>
> Hi,
>
>
>
> Currently I try to get a Decorator working, that decorates an interface
> with a generic type argument. Although the Spec is quite clear about how to
> handle this (in 8.3.1) I am afraid, OpenWebBeans cannot handle it:
>
>
>
> This is the scenario
>
>
>
> @Decorator
>
> public class TestDecorator<A extends Annotation> implements
> GenericInterface<A> {
>
>   @Inject @Any @Delegate
>
>   private GenericInterface<A> delegate;
>
> }
>
>
>
> public class TestBean implements GenericInterface<Scope> {
>
>   …
>
> }
>
>
>
> I have tried various combinations of actual type arguments in the Decorator
> (like Wildcard, raw type, …). The above leads to a definition error. Some
> other combinations lead to a behavior where the Decorator is not applied.
> Even declaring the Decorator with the same actual type variable (Scope in
> the example) does not work?
>
> Would you consider this a bug or do I read the spec wrong and this is not
> supported.
>
>
>
> Shall I fill a Jira Issue?
>
>
>
> Regards,
>
> Arne
>
>
>
> --
>
>
>
> Arne Limburg - Enterprise Architect
>
> open knowledge GmbH, Oldenburg
>
> Bismarckstraße 13, 26122 Oldenburg
>
> Mobil: +49 (0) 151 108 22 942
>
> Tel: +49 (0) 441 - 4082-0
>
> Fax: +49 (0) 441 - 4082-111
>
> arne.limburg@openknowledge.de
>
> http://www.openknowledge.de
>
>
>
> Registergericht: Amtsgericht Oldenburg, HRB 4670
>
> Geschäftsführer: Lars Röwekamp, Jens Schumann
>
>
>
>
>
>
> --
> Gurkan Erdogdu
> http://gurkanerdogdu.blogspot.com
>



-- 
Gurkan Erdogdu
http://gurkanerdogdu.blogspot.com

Mime
View raw message