To me the question is, if you have something like
@RequestScoped |
public class SomeBean |
{ |
public void doSomething() |
{ |
DependantScopedBean dsb = CDI.current().select(DependantScopedBean.class).get() |
} |
}
|
Should DependantScopedBean be destroyed when
- The method ends and dsb goes out of scope.
- The request finishes and SomeBean is destroyed
- The lifecycle of javax.enterprise.inject.spi.CDI ends
I would say that the second option is the most intuitive. As it ties the @Dependent bean to the lifecycle of a scope which is how CDI usually works. And perhaps more importantly it won't lead to memory being consumed until the application restarts every time doSomething() is called. I know you can destroy instances of DependantScopedBean manually, but it's pretty unintuitive to be told you need to manage your memory manually in java. Though option 2 opens the question of what happens if javax.enterprise.inject.spi.CDI.select().get() is invoked in an object that isn't managed by CDI. But in the end i think any of the options would work, so long as this is clearly stated in the spec. Regards Benjamin |