Re: CDI integration
I do not say we have to break everything. I said we should mandate to _bundle_ CDI if needed. This does not break anything, it provides additional features.
Also please remember that JAXB became conditional, which also means to break things in some cases!
You can still support the old annotations to keep old code running on JAX-RS 2.x, but we should allow to write new applications using latest technology, and we should push people into using latest stuff by _deprecating_ old annotations starting with JAX-RS 3.x.
From: jaxrs-spec@javaee.groups.io [mailto:jaxrs-spec@javaee.groups.io] On Behalf Of Sergey Beryozkin
Sent: Freitag, 2. Juni 2017 18:31 To: jaxrs-spec@javaee.groups.io Subject: Re: [jaxrs] CDI integration
So lets us just break everything and be happy, how inspiring...
|
|
Re: CDI integration
Sergey Beryozkin
So lets us just break everything and be
happy, how inspiring...
On 02/06/17 17:29, Markus KARG wrote:
|
|
Re: CDI integration
I would really love to see everything replaced by CDI which is duplicated in any Java EE API. If this means that a JAX-RS implementation has to provide CDI, then we should add this to the specification as being mandatory. For me, CDI is such a fundamental API that I even would love to have it being part of Java SE !
From: jaxrs-spec@javaee.groups.io [mailto:jaxrs-spec@javaee.groups.io] On Behalf Of Sergey Beryozkin
Sent: Freitag, 2. Juni 2017 17:34 To: jaxrs-spec@javaee.groups.io Subject: Re: [jaxrs] CDI integration
IMHO it would be a deal breaker, please do not make strong deps on CDI in JAX-RS API.
|
|
Re: module-info or not module-info..
Looking at all the trouble I had with diverse Java 9 pre-releases in the past months, I really think it would be wise to completely ignore Java 9 for now. At the time of releasing JAX-RS 2.1 current Java SE still will be 8. Target platforms for JAX-RS 2.1 are Java SE 8 and Java EE 8. So I do neither see a need nor any real benefit for prematurely supporting Java SE 9. It would imply a risk, even if a small one, so we should abstain from that.
toggle quoted messageShow quoted text
It think it would be wise also, not to include Java SE 9 support in JAX-RS 2.1.1. Instead, we should plan to provide Java 9 support in JAX-RS 3, but right now start to work on that once JAX-RS 2.1 is released. -Markus
-----Original Message-----
From: jaxrs-spec@javaee.groups.io [mailto:jaxrs-spec@javaee.groups.io] On Behalf Of Pavel Bucek Sent: Freitag, 2. Juni 2017 16:38 To: jaxrs-spec@javaee.groups.io Subject: [jaxrs] module-info or not module-info.. Dear experts, we originally intended to include compiled module-info to JAX-RS API jar. Original plan was to prepare a release on final or "almost" final Java SE 9 compliant JDK. As you might know, Java SE 9 was postponed and the JAX-RS release will most likely happen before that date. Should we include compiled module-info, even when the compilation was done by early access build of JDK 9? I would believe that there won't be any change in the bytecode format, but it could happen.. From my point of view, it might be better to NOT include compiled module-info now and (if demanded), release JAX-RS 2.1.1 (or something like that) with updated API jar. Any thoughts/comments? Thanks, Pavel
|
|
Re: CDI integration
Sergey Beryozkin
IMHO it would be a deal breaker, please
do not make strong deps on CDI in JAX-RS API. It will affect non-EE and non-CDI RI, CXF, RestEasy users who will get annoyed and move elsewhere and it is in our interests to ensure it does not happen. Lets do the best CDI integration ever but avoid losing the 'independence' of the core JAX-RS API. Cheers, Sergey
On 02/06/17 16:32, Pavel Bucek wrote:
|
|
Re: CDI integration
Pavel Bucek
consider this as a subthread :) On 02/06/2017 16:27, Guillermo González de Agüero wrote:
To be absolutely honest, I'd expect CNFE or something like that. I already wrote a test, which corresponds to what you wrote ;) So thanks for that info, I wasn't aware of this behavior. There is a little (forward) issue with this - similarly to any other "optional" dependency, there will be issues with this when Java 9 modules are used. Once the dependency on CDI API is declared in JAX-RS API module-info, CDI API will be required on the module path of any JAX-RS enabled app/code (at least for compilation). Not saying that is a deal breaker, it's just something we need to consider. Regards, Pavel
|
|
Re: CDI integration
Guillermo González de Agüero
Hi again, It might me possible to register the resources to CDI with the BeforeBeanDiscovery#addAnnotatedType() method [1], provided that the JAX-RS runtime knows its resources by the time CDI fires this event. If that's the case, my original proposal could easily work. I'll check to make sure.[1] http://docs.jboss.org/cdi/spec/2.0/cdi-spec.html#before_bean_discovery
On Fri, Jun 2, 2017 at 3:33 PM, Pavel Bucek <pavel.bucek@...> wrote:
|
|
module-info or not module-info..
Pavel Bucek
Dear experts,
we originally intended to include compiled module-info to JAX-RS API jar. Original plan was to prepare a release on final or "almost" final Java SE 9 compliant JDK. As you might know, Java SE 9 was postponed and the JAX-RS release will most likely happen before that date. Should we include compiled module-info, even when the compilation was done by early access build of JDK 9? I would believe that there won't be any change in the bytecode format, but it could happen.. From my point of view, it might be better to NOT include compiled module-info now and (if demanded), release JAX-RS 2.1.1 (or something like that) with updated API jar. Any thoughts/comments? Thanks, Pavel
|
|
Re: CDI integration
Guillermo González de Agüero
Hi Pavel, First, thanks for taking the time to consider this. On Fri, Jun 2, 2017 at 3:33 PM, Pavel Bucek <pavel.bucek@...> wrote:
Arjan has summarized the idea. With this option, JAX-RS implementations themselves will stay the same as today. Taking Jersey as an example, if I'm an application server vendor, it will be my job to find a CDI implemenetation that allows me to make @Path behave like a "bean defining annotation". But Jersey won't have nothing to do with it.
I meant CDI will only be needed at (JAX-RS implementation) compile time.
Applications won't need it as annotations not present on the classpath
are just erased at runtime. So people using Spring or wathever non-CDI
framework won't see any difference. Hope it clearer now?
Of course. Annotations directly present on the class take precedence here [1], so noone will see any side effect if they had already defined a different scope.
This would not affect it either. CDI only uses stereotypes on beans, so if that method is not annotated also with javax.enterprise.Produces, CDI will not use it. And again, that default scope could be overrided.
Regards, Guillermo González de Agüero [1] http://docs.jboss.org/weld/
|
|
Re: CDI integration
Hi, On Fri, Jun 2, 2017 at 3:33 PM, Pavel Bucek <pavel.bucek@...> wrote:
While I agree this is not ideal, it's certainly not unprecedented in Java EE. More than a few specs depend on such integration code, typically via a product specific SPI that the application server vendor (not the product implementator) then implements. For instance, Mojarra had an SPI for annotation scanning integration, that e.g. GlassFish would then implement when integrating Mojarra into GlassFish. Sometimes in later releases of the spec the functionality on which the SPI depends becomes available via a standardised API and the SPI can then be removed. The wording in a spec is then not rarely; "In a Java EE container, spec X has to integrate with spec Y in such and such way". So outside the Java EE container, i.e. when using some spec on Tomcat, the feature is just not available, and inside a Java EE container the burden is on the container vendor. Kind regards, Arjan Tijms
|
|
Re: CDI integration
Pavel Bucek
Hi Guillermo, this is problematic at least. If there is no API in the CDI spec
for requested feature, it would mean that the spec depends on an
implementation feature of CDI container (I believe it is Weld in
this case). What if someone would like to run against different
CDI implementation? That would force JAX-RS implementations to create container
specific code for each container which it wants to integrate with.
I do see that it might not be a problem for some implementations,
especially when there is some impl which is designated to live
only in single specific container, but generally it could
potentially limit some JAX-RS implementers. Ad @Stereotype - I'd need to check whether we can easily do that, since it would create a dependency on javax.enterprise.inject. I don't understand the remark about that annotation not being there in the runtime - it will be there, it has retention runtime (otherwise it wouldn't work). Maybe you meant that it won't be necessary to add it to JAX-RS Resource, which already has @Path annotation. Also, @RequestScoped would need to be added as well, since JAX-RS resources are request scoped by default. So what if we have @Stereotype and @Path is used as an annotation on a class - is it possible to somehow override the scope to something else? Also, would it be an issue if @Path is used on a resource method? (which is a valid usecase) Thanks,
On 01/06/2017 20:20, Guillermo González
de Agüero wrote:
|
|
Status update
Pavel Bucek
Dear experts,
as you might have noticed, we dealt with several small issues in the past couple of weeks. Notable ones: - @Priority for providers - JSON-B integration update - Introduction of JSON-P integration - HTTP PATCH support on the server (client side was just reverted) - CompletionStage can be returned from the resource method - Response API: AutoCloseable + Status#asEnum - Support for new HTTP Status codes Etc. Complete list of closed issues: https://github.com/jax-rs/api/issues?q=is%3Aissue+is%3Aclosed+sort%3Aupdated-desc API commits: https://github.com/jax-rs/api/commits/master Spec commits: https://github.com/jax-rs/spec/commits/master If you have any questions or suggestions about changes we've made, please let us know. We are going to release another API milestone build soon and it will be most likely last milestone before submitting Proposed Final Draft. Thanks and regards, Pavel
|
|
Re: CDI integration
Guillermo González de Agüero
Hi Pavel, It's not currently doable right now with the standard APIs. My original proposal was to require the application server to do it in a vendor specific manner. WildFly already does it that way [1]. The work there would most probably fall on CDI integration implementations. That was to prevent changes to the JAX-RS api.But there's also a standard way that would work, and that's marking annotating @Path with @Stereotype. Doing that will make CDI discover resources, without any more side effect I'm aware of. Should a future version decide resources should be request scoped, adding the @RequestScoped annotation to it will do the work. JSF already did something pretty similar with Converters, but with the @Qualifier annotation [2]. Given how annotations work on Java, it wouldn't be a problem for non CDI users not having those annotations on the classpath; they will just not exist at runtime. Do you think that's feasible? [1] https://github.com/wildfly/wildfly/blob/master/jaxrs/src/main/java/org/jboss/as/jaxrs/deployment/JaxrsAnnotationProcessor.java#L48 [2] https://github.com/javaserverfaces/mojarra/blob/2fe586e0b9b23a11b9168b30610b2afadeecdb41/impl/src/main/java/javax/faces/convert/FacesConverter.java#L100 Guillermo González de Agüero
On Thu, Jun 1, 2017 at 10:56 AM, Pavel Bucek <pavel.bucek@...> wrote:
|
|
Re: CDI integration
Pavel Bucek
Hello Guillermo, ad "when running on a Java EE Application Server/when CDI is available, resources and providers MUST be available for CDI extensions to process it, just like if had a CDI bean defining annotation" How that can be done? (yes, I'm looking for code example). Thanks,
On 25/05/2017 20:04, Guillermo González
de Agüero wrote:
|
|
Re: CDI integration
Guillermo González de Agüero
Hi, I agree @Context annotation must still work, at least from the time being. But I see two things here:Guillermo González de Agüero
On Wed, May 31, 2017 at 1:00 PM, Sergey Beryozkin <sberyozkin@...> wrote:
|
|
Re: CDI integration
Sergey Beryozkin
Hi It is promising... Thanks, Sergey Thanks, Sergey
On 31/05/17 13:21, Arjan Tijms wrote:
Hi,
|
|
Re: #544: Localization & BeanValidation
I see, thanks for clarifying the details, Christian!
toggle quoted messageShow quoted text
To me it seems that'd be a very reasonable default behaviour for JAX-RS; people still could plug in a custom LocaleResolver based on their custom requirements and context, e.g. preferring a Locale for which they provide a resource bundle with validation messages. 2017-05-29 15:36 GMT+02:00 Christian Kaltepoth <christian@kaltepoth.de>:
Hi Gunnar,
|
|
Re: CDI integration
Hi,
Thanks for your reply, I see your point although I have a slightly different vision. But for now, let's table that sub-discussion ;) As for top CDI support or even (in time) fully depending on CDI; this would not have to be a problem for using JAX-RS outside of Java EE. CDI can be very easily added to just about any type of project, and CDI 2.0 even has explicit Java SE support. Kind regards, Arjan Tijms
|
|
Re: CDI integration
Sergey Beryozkin
Hi Sorry, this is not what I meant. On the opposite I think EE is underestimated and many users (like myself) simply do not understand it well. As I said, I fully support the cause for JAX-RS users get the most out of what EE provides (top CDI support - surely CXF will do it first :-), etc). But what I also said that as it happens there are strong non EE offerings are also available. Historically, JAX-RS came to the world completely unconstrained, at the cost (from the EE point of view) introducing its own injection mechanism. IMHO this is why JAX-RS is the main competitor today (and a good portion of JAX-RS API is clearly better IMHO) to what for example SpringWS (RS ?) offers. I'd just to see JAX-RS continuing staying visible and competitive not only in the EE world... Cheers, Sergey
On 31/05/17 12:38, Arjan Tijms wrote:
Sergey,
|
|
Re: CDI integration
Sergey,
I think what you're saying here is that because some users think Java EE is not good, we as Java EE people should partially abandon it instead of making it better? Maybe the entire reason that some people think Java EE is not so good is because it's not really integrated well?
|
|