openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arne Limburg <>
Subject AW: Decorators with generic type-arguments
Date Wed, 20 Apr 2011 16:29:25 GMT

I have created OWB-568 for this. Maybe someone can take a look at my patch. I'll take a look
at the other problem.


Von: Arne Limburg
Gesendet: Mittwoch, 20. April 2011 18:15
Betreff: AW: Decorators with generic type-arguments

Hi Gurkan,

The spec says "the actual type is assignable to..." and you wrote isAssignableFrom 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

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(
               at org.apache.webbeans.decorator.WebBeansDecoratorConfig.getDecoratorStack(
               at org.apache.webbeans.intercept.InterceptorHandler.invoke(
               at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(
               at org.apache.owb.DecoratedBean_$$_javassist_0.isDecoratorCalled(DecoratedBean_$$
I'll do some further investigation.


Von: Gurkan Erdogdu []
Gesendet: Mittwoch, 20. April 2011 17:59
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

2011/4/20 Arne Limburg <<>>

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

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?



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

Registergericht: Amtsgericht Oldenburg, HRB 4670
Geschäftsführer: Lars Röwekamp, Jens Schumann

Gurkan Erdogdu

View raw message