You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openwebbeans.apache.org by "Mark Struberg (JIRA)" <ji...@apache.org> on 2013/09/01 08:00:54 UTC

[jira] [Commented] (OWB-893) OpenWebBeans 1.2.1 fails when injecting generic value holder

    [ https://issues.apache.org/jira/browse/OWB-893?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13755662#comment-13755662 ] 

Mark Struberg commented on OWB-893:
-----------------------------------

Arjan, thanks for your feedback as well! It is really important for us to learn which use cases do not yet work well with OWB.

OWB-1.2.1 is CDI 1.0 with all the stuff of CDI-1.1 internally. There is a cdi11 module which repackages OWB to provide CDI 1.1 APIs for allowing us to run the CDI 1.1 TCK.
There will be an owb-2.0 branch once we find more time to work on it. As has been with CDI 1.0: OWB will provide a meaningful implementation which satisfies the users needs. And I bet the Weld team will have open ears if our approach is working. 

{code}
@Produces
public ParamValue<?> produce(InjectionPoint injectionPoint)
{code}
This is imo actually disallowed by the CDI spec (both 1.0 and 1.1). There are a few things which are easily overlooked:
3.1: "If the managed bean class is a generic type, it must have scope @Dependent. If a managed bean with a parameterized bean class declares any scope other than
 @Dependent, the container automatically detects the problem and treats it as a definition error."
3.3: "If the producer method return type is a parameterized type, it must specify an actual type parameter or type variable for each type parameter.
If a producer method return type contains a wildcard type parameter the container automatically detects the problem and treats it as a definition error."

We face exactly the same issues with Weld 2.x over in DeltaSpike. See DELTASPIKE-405. 

                
> OpenWebBeans 1.2.1 fails when injecting generic value holder
> ------------------------------------------------------------
>
>                 Key: OWB-893
>                 URL: https://issues.apache.org/jira/browse/OWB-893
>             Project: OpenWebBeans
>          Issue Type: Bug
>          Components: Injection and Lookup
>    Affects Versions: 1.2.1
>            Reporter: Arjan Tijms
>            Assignee: Mark Struberg
>
> In OmniFaces we're using a producer method with the following signature:
> {code}
> @Produces
> @Param
> public <V> ParamValue<V> produce(InjectionPoint injectionPoint)
> {code}
> Injection then takes place into a bean as follows:
> {code}
> @Inject @Param
> private ParamValue<String> text1;
> {code}
> {{@Param}} is a qualifier with only non-binding attributes.
> See [RequestParameterProducer|https://code.google.com/p/omnifaces/source/browse/src/org/omnifaces/cdi/param/RequestParameterProducer.java] and [Param|https://code.google.com/p/omnifaces/source/browse/src/org/omnifaces/cdi/Param.java]
> This works in all versions of Weld that we tested on and in OpenWebBeans 1.1.8 (TomEE 1.5.2.). Unfortunately it does not work with OpenWebBeans 1.2.1-SNAPSHOT (TomEE 1.6.0-SNAPSHOT).
> The problem seems to be that 1.2.1 has added an additional check in {{org.apache.webbeans.util.GenericsUtil.satisfiesDependency}} that wasn't there before:
> {code}
> return ClassUtil.isSame(injectionPointRawType, beanRawType)? isAssignableFrom(injectionPointType, beanType): false;
> {code}
> The problem is with {{isAssignableFrom}}, because the producer is always seen as producing a {{ParamValue<Object}}. The actual values at the point of evaluation with the above given injection example where:
> {noformat}
> injectionPoint = ParamValue<class java.lang.String> 
> beanType = ParamValue<class java.lang.Object>
> {noformat}
> Those are not directly assignable so the injection fails.
> Is OmniFaces doing something wrong here, is this check to strict, or should the producer type not be seen as {{ParamValue<Object>}}?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira