[ 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