In Spring, I can inject an javax.persistence.EntityManager
into a Spring bean using the annotation @javax.persistence.PersistenceContext
, like this:
@Service
public class MyRepository {
@PersistenceContext
private EntityManager entityManager;
}
This is documented in the Spring docs in chapter 20.5.2 Implementing DAOs based on plain JPA.
Is there a way to do this using CDI (specifically, Weld) if I am not using a Java EE container?
In particular, is it possible to reuse the annotation @PersistenceContext
for CDI (because existing code uses it with Spring) ?
As far as I understand: When using a Java EE container, the container will interpret the annotation and inject an EntityManager. Is that correct? And is there a way to get this to work using Weld, but without a Java EE container?
I tried to inject the class above into another class using Weld (in Tomcat, without Java EE). The injection takes place, so Weld correctly creates an instance of MyRepository
, however the field MyRepository.entityManager
is null
, as if the annotation @PersistenceContext
was ignored.
What is happening (or rather, not happening) here?
@PersistenceContext
with CDI, I'll probably just use the standard way everyone recommends (@Inject
plus Producer). – Estellaestelle