That was my impl of that to pass the tck when the discussion started then
reverted it (never hit a release) cause ... well you get openwebbeans
opinion in the thread I guess ;)

With tomcat you can set as system property (JVM recommanded, tomee ones can
not be enough depending how you
boot) -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true. The issue is of
course transient is a reserved keyword in java so forbidden there (see
org.apache.el.util.Validation#invalidIdentifiers and
org.apache.el.util.Validation#isIdentifier). Set to true the system
property will allow to pass the expression creation but will fail
with ELResolver cannot handle a null base Object with identifier 'javax'

Look https://gist.github.com/rmannibucau/899fc4d605f1a8395d283f6127fd2f4e
to understand how hacky it is to support it from OpenWebBeans and why we
asked to not do it to the spec (check the last else).




Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  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 22:11 GMT+02:00 Xavier Dury <[email protected]>:

> 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 /
> http://lists.jboss.org/pipermail/cdi-dev/2015-January/006009.html
>
>
>
>
> 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
> >
> >
>
>

Reply via email to