2016-09-29 8:32 GMT+02:00 Xavier Dury <[email protected]>: > @Mark > > thanks, it works when adding any other qualifier! > > btw, do you think it would hurt to qualify the built-in conversation bean > with @Named("javax.enterprise.context.conversation") in OWB? That way I > could inject the built-in with @Inject > @Named("javax.enteprise.context.conversation") > and expose it via @Produces @Named("conversation") without resorting to > some extra qualifier. > > @Romain > > I was wondering where exactly is your hacky el resolver implemented? If > the "javax.enterprise.context.conversation" name is a requirement coming > from the CDI spec, then I would suppose it is implemented in OWB (in the > resolver you get from the BeanManager) but as my tests with OEJB+OWB fail, > I suppose it is not there (or not enabled in some way). On the contrary, if > the requirement comes from the java EE spec, then I suppose it is > implemented in TomEE and that would explain why my tests fail. > > The name is built it in openwebbeans: https://github.com/apache/openwebbeans/blob/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java#L54
The spec states: "The container provides a built-in bean with bean type Conversation, scope @RequestScoped, and qualifier@Default, named javax.enterprise.context.conversation." So no qualifier @Named but a Bean<?> name (no comment ;)) > Xavier > > > > > From: Mark Struberg <[email protected]> > Sent: Thursday, September 29, 2016 12:12 AM > To: [email protected] > Subject: Re: OpenEJB and EL > > @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 > > > > OpenEjbElTest.java > gist.github.com > property= > > > > > > > > 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 ... > > > > > > > > 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 > >> > >>>> > >> > >>>> > >> > >>> > >> > >> > >> > > > >> > > > >> > > > >> > > >> > > >> > >> > > > >
