]
Mark Struberg commented on CDI-520:
-----------------------------------
I agree that the sample with the @PersistenceContext EntityManager is not the best and has
many implications and problems. E.g. you can inject a @PersistenceContext into a CDI bean
but the EJB and EE umbrella specs only define that this EntityManager works _inside_ an
EJB (read section about TransactionManagementType.CONTAINER). So it doesn't make much
sense at all to produce this...
Of course producing an EntityManager makes perfect sense in some other scenarios. E.g.
injecting a @PersistenceUnit and producing a @RequestScoped EntityManager:
3.6. Java EE components
-----------------------
Key: CDI-520
URL:
https://issues.jboss.org/browse/CDI-520
Project: CDI Specification Issues
Issue Type: Clarification
Components: Java EE integration
Affects Versions: 1.1.Final
Reporter: Martin Andersson
Fix For: TBD
I don't understand this text:
"The instance used by the container to service an invocation of a Java EE component
will not be the same instance obtained when using @Inject, instantiated by the container
to invoke a producer method, observer method or disposer method, or instantiated by the
container to access the value of a producer field."
More specifically, I am trying to understand how we can use CDI to put a scope on
{{EntityManager}} whose life cycle is rather undefined by JPA. I see that the
specification use an example of a {{@Disposes}} method to close a container-managed entity
manager which throw {{IllegalStateException}} in the disposer (!). Anyways, trying to
solve this puzzle has led me to the paragraph quoted previously, of which I understand
nothing to be honest.
My research about the "CDI managed container-managed entity manager" continues.
As of now, the example is flawed and a container-managed entity manager remains open after
the disposer method. Anyways, I might open up a separate ticket for that.