Christian,
what do you mean with "weird"? The CDI *default* is @Dependent, but it does *not* apply for JAX-RS resources classes, as JAX-RS explicitly mandates a different scope per the spec, which is @RequestScoped. This means, the JAX-RS implementation (not the user) is responsible to tell CDI that the resource class is request scoped "under the hood".
Maybe I misunderstood your question?
-Markus
From: jaxrs-dev-bounces@xxxxxxxxxxx [mailto:jaxrs-dev-bounces@xxxxxxxxxxx] On Behalf Of Santiago Pericas-Geertsen
Sent: Montag, 9. April 2018 21:14
To: jaxrs developer discussions
Subject: Re: [jaxrs-dev] CDI resource classes and lifecycle
Hi all,
I've a question regarding CDI and the lifecycle of resource classes.
- 3.1.1 Lifecycle and Environment:
- "By default a new resource class instance is created for each request to that resource."
- 11.2.3 Context and Dependency Injection (CDI):
- "In a product that supports CDI, implementations MUST support the use of CDI-style Beans as root resource classes"
The example CDI resource in section 11.2.3 looks like this:
public class CdiBeanResource {
@Inject MyOtherCdiBean bean; // CDI injected bean
Please note that the resources doesn't have a scope annotation. In this case CDI will assume @Dependent scope.
The default scope for JAX-RS should be one per request. However that is accomplished in the CDI case is not important.
Isn't this weird? Shouldn't be the default scope for CDI resources be @RequestScoped? Is it up to the user to set the "correct" scope? It is somehow surprising that @Dependent scoped beans work at all because of the way @Dependent is defined.
Given that resource class instances are not injected anywhere, but just created by the implementations, I’m not really sure what @Dependent means in this context. Again, by default, there should be one per request as mandated by the spec.