@Default is always assumed when you don't add a specific Qualifier other than @Named and @Any.
Xavier, can you please add any random qualifier? E.g. @Destroyed. This will stop CDI from complaining but EL should work. LieGrue, strub > On Thursday, 29 September 2016, 0:04, Xavier Dury <[email protected]> wrote: > > https://gist.github.com/kalgon/fbf529dc9c9764c115433cfb2f0f82bf > > > > From: Xavier Dury <[email protected]> > Sent: Wednesday, September 28, 2016 11:54 PM > To: [email protected] > Subject: Re: OpenEJB and EL > > No, I didn't add the @Default to the @Produces method. > > I verified: > > @RequestScoped > public class ConversationWrapper { > > private @Inject Conversation conv; > > @Produces > @Dependent > @Named("conv") > public Conversation getConv() { > return conv; > } > } > > result: > > Caused by: javax.enterprise.inject.AmbiguousResolutionException: There is > more > than one Bean with type javax.enterprise.context.ConversationQualifiers: > [@javax.enterprise.inject.Default()] > for injection into Field Injection Point, field name : conv, Bean Owner : > [ConversationWrapper, WebBeansType:MANAGED, Name:null, API > Types:[java.lang.Object,eg.ConversationWrapper], > Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]] > found beans: > ConversationImpl, WebBeansType:CONVERSATION, > Name:javax.enterprise.context.conversation, API > Types:[java.lang.Object,org.apache.webbeans.conversation.ConversationImpl,javax.enterprise.context.Conversation], > > Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] > from > jar:file:/C:/Users/xavier/.m2/repository/org/apache/openwebbeans/openwebbeans-impl/1.6.3/openwebbeans-impl-1.6.3.jar!/org/apache/webbeans/conversation/ConversationImpl.class > Conversation, WebBeansType:PRODUCERMETHOD, Name:conv, API > Types:[java.lang.Object,javax.enterprise.context.Conversation], > Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any,javax.inject.Named] > > from > file:/D:/development/workspaces/openejb-el/target/test-classes/eg/ConversationWrapper.class > > > > > From: Romain Manni-Bucau <[email protected]> > Sent: Wednesday, September 28, 2016 11:47 PM > To: [email protected] > Subject: Re: OpenEJB and EL > > Conversation, WebBeansType:PRODUCERMETHOD, Name:conv, API > Types:[java.lang.Object,javax.enterprise.context.Conversation], > Qualifiers:[javax.enterprise.inject.Default,javax. > enterprise.inject.Any,javax.inject.Named] from file:/D:/development/ > workspaces/openejb-el/target/test-classes/eg/ConversationWrapper.class > > Why is there @Default there? producer should only have the @Named you set > > > Romain Manni-Bucau > @rmannibucau <https://twitter.com/rmannibucau> | Blog > > > > Romain Manni-Bucau (@rmannibucau) | Twitter > twitter.com > The latest Tweets from Romain Manni-Bucau (@rmannibucau). ASF / Java(EE) / > Angular. LinkedIn: https://t.co/dX7XMGjbBi. JavaEE Factory: > https://t.co/0VnvWwbedt . Blog ... > > > > Romain Manni-Bucau (@rmannibucau) | Twitter > twitter.com > The latest Tweets from Romain Manni-Bucau (@rmannibucau). ASF / Java(EE) / > Angular. LinkedIn: https://t.co/dX7XMGjbBi. JavaEE Factory: > https://t.co/0VnvWwbedt . Blog ... > <https://blog-rmannibucau.rhcloud.com> | Old Wordpress Blog > > > RBlog: the RManniBucau v2 Blog > blog-rmannibucau.rhcloud.com > RBlog: Romain Manni-Bucau Blog about Java, JavaEE, TomEE, Angular, Open > Source, > Code and geeky topics... > <http://rmannibucau.wordpress.com> | Github > <https://github.com/rmannibucau> | > > > [old blog] new RManniBucau().blog() > rmannibucau.wordpress.com > New blog on: https://blog-rmannibucau.rhcloud.com/ > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber > <http://www.tomitribe.com> | JavaEE Factory > <https://javaeefactory-rmannibucau.rhcloud.com> > > 2016-09-28 23:45 GMT+02:00 Xavier Dury <[email protected]>: > >> It seems that to inject the conversation in > ConversationWrapper.conversation, >> OWB does consider both the build-in conversation bean and the produced one >> from... ConversationWrapper.getConv(). >> >> I tried something like that: >> >> @RequestScoped >> public class ConversationWrapper { >> >> private @Inject > @Named("javax.enterprise.context.conversation") >> Conversation conv; >> >> @Produces >> @Dependent >> @Named("conv") >> public Conversation getConv() { >> return conv; >> } >> } >> >> But it gives the following error: >> >> Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Api >> type [javax.enterprise.context.Conversation] is not found with the >> qualifiers >> Qualifiers: [@javax.inject.Named(value=javax.enterprise.context. >> conversation)] >> for injection into Field Injection Point, field name : conv, Bean Owner : >> [ConversationWrapper, WebBeansType:MANAGED, Name:null, API >> Types:[eg.ConversationWrapper,java.lang.Object], >> Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]] >> >> >> >> >> From: Xavier Dury <[email protected]> >> Sent: Wednesday, September 28, 2016 11:34 PM >> To: [email protected] >> Subject: Re: OpenEJB and EL >> >> Got the same result with 'conv': >> >> Caused by: javax.enterprise.inject.AmbiguousResolutionException: There is >> more than one Bean with type > javax.enterprise.context.ConversationQualifiers: >> [@javax.enterprise.inject.Default()] >> for injection into Field Injection Point, field name : conversation, Bean >> Owner : [ConversationAliaser, WebBeansType:MANAGED, Name:null, API >> Types:[java.lang.Object,eg.ConversationAliaser], >> Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]] >> found beans: >> Conversation, WebBeansType:PRODUCERMETHOD, Name:conv, API >> Types:[java.lang.Object,javax.enterprise.context.Conversation], >> Qualifiers:[javax.enterprise.inject.Default,javax. >> enterprise.inject.Any,javax.inject.Named] from file:/D:/development/ >> workspaces/openejb-el/target/test-classes/eg/ConversationWrapper.class >> ConversationImpl, WebBeansType:CONVERSATION, > Name:javax.enterprise.context.conversation, >> API Types:[org.apache.webbeans.conversation.ConversationImpl, >> javax.enterprise.context.Conversation,java.lang.Object], >> Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] >> from jar:file:/C:/Users/xavier/.m2/repository/org/apache/ >> openwebbeans/openwebbeans-impl/1.6.3/openwebbeans-impl- >> 1.6.3.jar!/org/apache/webbeans/conversation/ConversationImpl.class >> >> >> >> >> >> >> >> From: Romain Manni-Bucau <[email protected]> >> Sent: Wednesday, September 28, 2016 11:29 PM >> To: [email protected] >> Cc: Mark Struberg >> Subject: Re: OpenEJB and EL >> >> missing @Named("conv")? >> >> >> Romain Manni-Bucau >> @rmannibucau <https://twitter.com/rmannibucau> | Blog >> >> >> >> Romain Manni-Bucau (@rmannibucau) | Twitter >> twitter.com >> The latest Tweets from Romain Manni-Bucau (@rmannibucau). ASF / Java(EE) / >> Angular. LinkedIn: https://t.co/dX7XMGjbBi. JavaEE Factory: >> https://t.co/0VnvWwbedt . Blog ... >> >> >> >> Romain Manni-Bucau (@rmannibucau) | Twitter >> twitter.com >> The latest Tweets from Romain Manni-Bucau (@rmannibucau). ASF / Java(EE) / >> Angular. LinkedIn: https://t.co/dX7XMGjbBi. JavaEE Factory: >> https://t.co/0VnvWwbedt . Blog ... >> <https://blog-rmannibucau.rhcloud.com> | Old Wordpress Blog >> >> >> RBlog: the RManniBucau v2 Blog >> blog-rmannibucau.rhcloud.com >> RBlog: Romain Manni-Bucau Blog about Java, JavaEE, TomEE, Angular, Open >> Source, Code and geeky topics... >> <http://rmannibucau.wordpress.com> | Github <https://github.com/ >> rmannibucau> | >> >> >> [old blog] new RManniBucau().blog() >> rmannibucau.wordpress.com >> New blog on: https://blog-rmannibucau.rhcloud.com/ >> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber >> <http://www.tomitribe.com> | JavaEE Factory >> <https://javaeefactory-rmannibucau.rhcloud.com> >> >> 2016-09-28 23:27 GMT+02:00 Xavier Dury <[email protected]>: >> >> > >> > Caused by: javax.enterprise.inject.AmbiguousResolutionException: There >> is >> > more than one Bean with type javax.enterprise.context. >> ConversationQualifiers: >> > [@javax.enterprise.inject.Default()] >> > for injection into Field Injection Point, field name : conversation, >> Bean >> > Owner : [ConversationAliaser, WebBeansType:MANAGED, Name:null, API >> > Types:[eg.ConversationAliaser,java.lang.Object], >> > Qualifiers:[javax.enterprise.inject.Default,javax. >> enterprise.inject.Any]] >> > found beans: >> > Conversation, WebBeansType:PRODUCERMETHOD, Name:conversation, API >> > Types:[javax.enterprise.context.Conversation,java.lang.Object], >> > Qualifiers:[javax.enterprise.inject.Default,javax. >> > enterprise.inject.Any,javax.inject.Named] from file:/D:/development/ >> > workspaces/openejb-el/target/test-classes/eg/ConversationWrapper.class >> > ConversationImpl, WebBeansType:CONVERSATION, >> Name:javax.enterprise.context.conversation, >> > API Types:[org.apache.webbeans.conversation.ConversationImpl, >> > javax.enterprise.context.Conversation,java.lang.Object], >> > > Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] >> > from jar:file:/C:/Users/xavier/.m2/repository/org/apache/ >> > openwebbeans/openwebbeans-impl/1.6.3/openwebbeans-impl- >> > 1.6.3.jar!/org/apache/webbeans/conversation/ConversationImpl.class >> > >> > >> > >> > >> > >> > >> > >> > From: Mark Struberg <[email protected]> >> > Sent: Wednesday, September 28, 2016 11:20 PM >> > To: [email protected] >> > Subject: Re: OpenEJB and EL >> > >> > +1 >> > >> > means >> > >> > @RequestScoped >> > >> > public class ConversationWrapper { >> > private @Inject Conversation conv; >> > >> > @Produces >> > @Dependent >> > @Named("conv") >> > >> > public Conversation getConv() { >> > return conv; >> > } >> > } >> > >> > >> > >> > >> > On Wednesday, 28 September 2016, 23:10, Romain Manni-Bucau < >> > [email protected]> wrote: >> > >> > >> > > >> > > >> > >a producer allows to get a shorter/more elegant naming like > #{conv.id} >> > if you @Produces @Named("conv") ;) >> > > >> > > >> > > >> > >Romain Manni-Bucau >> > >@rmannibucau | Blog | Old Wordpress Blog | Github | LinkedIn | >> > Tomitriber | JavaEE Factory >> > > >> > >2016-09-28 23:01 GMT+02:00 Mark Struberg > <[email protected]>: >> > > >> > >Oh boy, sorry for you. You did hit a blank spot in the CDI spec. >> > >> >> > >>Problem is that the EE umbrella spec, the EL spec and the CDI > spec >> > contradict each other. >> > >> >> > >>The Weld guys solved this by introducing a Javax class. But > that takes >> > away the whole javax.* tree for the EL. That's just not good as it >> > contradicts the EL spec. >> > >> >> > >>Could you please try the following >> > >> >> > >>@RequestScoped >> > >>@Named("conversation") >> > >>public class ConversationWrapper { >> > >> private @Inject Conversation conv; >> > >> >> > >> public Conversation get() { >> > >> return conv; >> > >> } >> > >>} >> > >> >> > >>And in the EL just use #{conversation.get.id} >> > >> >> > >>LieGrue, >> > >>strub >> > >> >> > >> >> > >> >> > >> >> > >> >> > >>> On Wednesday, 28 September 2016, 22:12, Xavier Dury < >> > [email protected]> wrote: >> > >>> > I really don't understand how something like > <f:param >> > >>> name="cid" >> > >>> value="#{javax.enterprise. > context.conversation.id}"/> actually >> > >>> works... something must be made to make the EL processor > accept that >> > invalid >> > >>> bean name. >> > >>> >> > >>> Making a producer which @Produces @Named Conversation > conflicts with >> > the >> > >>> built-in bean from OWB (with WebBeanType.CONVERSATION)... >> > >>> >> > >>> ... so, I have done the following for my tests but I feel > a bit >> > ashamed because >> > >>> I can't imagine there is no better solution than this > ;-) >> > >>> >> > >>> public class ConversationAliaser { >> > >>> public class Javax { >> > >>> public Enterprise getEnterprise() {return > new Enterprise();} >> > >>> >> > >>> } >> > >>> public class Enterprise { >> > >>> public Context getContext() {return new > Context();} >> > >>> } >> > >>> public class Context { >> > >>> public Conversation getConversation() > {return conversation;} >> > >>> >> > >>> } >> > >>> @Inject >> > >>> private Conversation conversation; >> > >>> @Produces @ApplicationScoped > @Named("javax") >> > >>> public Javax javax() {return new Javax();} >> > >>> } >> > >>> >> > >>> But that works! >> > >>> >> > >>> Xavier >> > >>> >> > >>> >> > >>> >> > >>> From: Xavier Dury <[email protected]> >> > >>> Sent: Wednesday, September 28, 2016 8:42 PM >> > >>> To: [email protected] >> > >>> Subject: Re: OpenEJB and EL >> > >>> >> > >>> Hmmm... I guess I'll have to @Produces @Named the > conversation if I >> > want to >> > >>> use it in ELs. I don't know if something like >> > >>> #{applicationScope['javax. enterprise.context. >> > conversation'].transient} >> > >>> would work? >> > >>> >> > >>> I remember back in my JSP days that, sometimes, I had to > use >> something >> > like >> > >>> ${requestScope['javax.servlet. > forward.request_uri']} instead of >> > >>> plain ${javax.servlet.forward. request_uri}. >> > >>> >> > >>> Xavier >> > >>> >> > >>> >> > >>> From: Romain Manni-Bucau <[email protected]> >> > >>> Sent: Wednesday, September 28, 2016 6:54 PM >> > >>> To: [email protected] >> > >>> Subject: Re: OpenEJB and EL >> > >>> >> > >>> hmm, wonder if it is linked to the value you try to > evaluate (which >> > doesn't >> > >>> respect EL spec even if in CDI spec - don't ask > please ;)).. See >> > >>> https://issues.jboss.org/ browse/CDITCK-462 / >> > >> > >> > System Dashboard - JBoss Issue Tracker >> > issues.jboss.org >> > Atlassian JIRA Project Management Software > (v6.4.11#64026-sha1:78f6ec4) >> > About JIRA; Report a problem; Powered by a free Atlassian JIRA open >> source >> > license for Red Hat ... >> > >>> http://lists.jboss.org/ pipermail/cdi-dev/2015- > January/006009.html >> > >> > >> > lists.jboss.org Mailing Lists >> > lists.jboss.org >> > lists.jboss.org Mailing Lists: Welcome! Below is a listing of all the >> > public mailing lists on lists.jboss.org. Click on a list name to get >> more >> > information ... >> > >>> >> > >>> >> > >>> >> > >>> >> > >>> Romain Manni-Bucau >> > >>> @rmannibucau <https://twitter.com/ rmannibucau> | > Blog >> > >>> >> > >>> >> > >>> >> > >>> Romain Manni-Bucau (@rmannibucau) | Twitter >> > >>> twitter.com >> > >>> The latest Tweets from Romain Manni-Bucau (@rmannibucau). > ASF / >> > Java(EE) / >> > >>> Angular. LinkedIn: https://t.co/dX7XMGjbBi. JavaEE > Factory: >> > >>> https://t.co/0VnvWwbedt . Blog ... >> > >>> <https://blog-rmannibucau. rhcloud.com> | Old > Wordpress Blog >> > >>> <http://rmannibucau.wordpress. com> | Github >> > >>> <https://github.com/ rmannibucau> | >> > >>> LinkedIn <https://www.linkedin.com/in/ rmannibucau> > | Tomitriber >> > >>> <http://www.tomitribe.com> | JavaEE Factory >> > >>> <https://javaeefactory- rmannibucau.rhcloud.com> >> > >>> >> > >>> 2016-09-28 18:17 GMT+02:00 Xavier Dury > <[email protected]>: >> > >>> >> > >>>> Hi Romain, >> > >>>> >> > >>>> I tried with org.apache.tomcat:tomcat- > jasper-el:8.5.5 but it does >> > not >> > >>>> parse my expression until I change > ".transient" by >> > >>> ".isTransient()" and >> > >>>> then it gives the same error: javax.el. > PropertyNotFoundException: >> > >>>> ELResolver cannot handle a null base Object with > identifier >> > >>> 'javax'. >> > >>>> >> > >>>> Does the EL context need something else than adding > the >> > >>>> BeanManager.getELResolver() to be able to resolve > some implicit >> > objects? I >> > >>>> don't understand why it works with ri-1.0. >> > >>>> >> > >>>> Xavier >> > >>>> >> > >>>> >> > >>>> From: Romain Manni-Bucau > <[email protected]> >> > >>>> Sent: Wednesday, September 28, 2016 4:02 PM >> > >>>> To: [email protected] >> > >>>> Subject: Re: OpenEJB and EL >> > >>>> >> > >>>> Hi Xavier >> > >>>> >> > >>>> On the phone so hard to give you a link bit try > using tomcat el >> impl >> > of >> > >>>> tomcat 8.5 >> > >>>> >> > >>>> Le 28 sept. 2016 15:29, "Xavier Dury" > <[email protected]> >> > >>> a écrit : >> > >>>> >> > >>>> > Hi, >> > >>>> > >> > >>>> > I am using OpenEJB for my tests and need > support for EL >> > expressions in >> > >>> my >> > >>>> > own code. >> > >>>> > >> > >>>> > By default, if I do something like this (pay > attention to the >> > >>>> expression): >> > >>>> > >> > >>>> > ExpressionFactory factory = beanManager. > wrapExpressionFactory( >> > >>>> > ExpressionFactory.newInstance( )); >> > >>>> > StandardELContext elContext = new > StandardELContext(factory); >> > >>>> > elContext.addELResolver( > beanManager.getELResolver()); >> > >>>> > ValueExpression expression = > factory.createValueExpression( >> > elContext, >> > >>>> > "#{javax.enterprise.context. > conversation.transient}", >> > >>> Boolean.class); >> > >>>> > expression.getValue(elContext) ; >> > >>>> > >> > >>>> > and only add org.apache.tomee:openejb-core: > 7.0.1 to my project >> > then I >> > >>>> get >> > >>>> > javax.el.ELException: Unable to find > ExpressionFactory of type: >> > >>>> > org.apache.el. ExpressionFactoryImpl >> > >>>> > >> > >>>> > if I add org.glassfish:javax.el:3.0.0 then I > get javax.el. >> > >>>> PropertyNotFoundException: >> > >>>> > ELResolver cannot handle a null base Object > with identifier >> > >>> 'javax' >> > >>>> > >> > >>>> > if I switch the EL library to > com.sun.el:el-ri:1.0 (+ >> > >>> META-INF/javax.el. >> > >>>> ExpressionFactory >> > >>>> > < com.sun.el. ExpressionFactoryImpl) then my > expression can be >> > >>> evaluated >> > >>>> > but I can't use any new feature of 3.0 > (like lambdas) >> > >>>> > >> > >>>> > So, either my dependencies are wrong or I am > not correctly >> > >>> initializing >> > >>>> my >> > >>>> > factory. >> > >>>> > >> > >>>> > Does anybody have an idea? >> > >>>> > >> > >>>> > Thanks, >> > >>>> > >> > >>>> > Xavier >> > >>>> >> > >>>> >> > >>> >> > >> >> > > >> > > >> > > >> > >> > >> >> >
