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