que principiantes para manager example ejemplos curso java jpa cdi entitymanager

principiantes - ¿Cuál es la forma más fácil de tener CDI y JPA en Java SE?



jpa vs hibernate (2)

En primer lugar, los EJB son parte de Java EE, por lo tanto, no puede usarlos en Java SE. Sin embargo, CDI se puede usar en el entorno Java SE, mi ejemplo le mostrará cómo usarlo con Weld, pero también hay otras implementaciones: tenga en cuenta que CDI es solo especificación y Weld es una de las implementaciones de esa especificación.

Para usar Weld, necesitas poner weld-se-xxx-Final.jar en el classpath o especificar su dependencia en Maven como

<dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se</artifactId> <version><!-- See https://mvnrepository.com/artifact/org.jboss.weld.se/weld-se for current version --></version> </dependency>

Luego debes iniciar el contenedor en tu método principal, así que haz algo como esto

public static void main(String[] args) throws IOException { Weld weld = new Weld(); WeldContainer container = weld.initialize(); Application application = container.instance().select(Application.class).get(); application.run(); weld.shutdown(); }

Esto debería EntityManager comenzar, luego puede usar los Productores CDI para hacer que su EntityManager inyectable.

@Produces @RequestScoped public EntityManager createEntityManager() { return Persistence.createEntityManagerFactory("mgr").createEntityManager(); } public void closeEM(@Disposes EntityManager manager) { manager.close(); }

Consulte también la documentación de Weld sobre el uso de CDI en Java SE .

Me gustaría tener en Java SE

@Stateless public class CarDAO { @Inject private EntityManager em; public Car findById(Long id) { return em.find(Car.class, id); } } @Singleton public class Application { @Inject private CarDAO carDAO; public void run() { Car car = carDAO.findById(44); System.out.println(car); } } public class EntryPoint { public static void main(String[] args) { Application application = // missing code application.run(); } }

¿Qué tengo que hacer para lograr eso? Estoy usando la base de datos postgres, y maven en mi proyecto.

Ya estaba leyendo algo sobre Weld (pero parece solo CDI). No sé cómo agregar a Weld la posibilidad de inyectar Entity Manager. Sé que puedo obtener Entity Manager con

EntityManagerFactory emf = Persistence.createEntityManagerFactory("mgr"); EntityManager em = emf.createEntityManager();

pero no es tan conveniente como inyectar.

Sería genial si hay algún tutorial sobre eso. De todos modos, gracias por cualquier ayuda!


La respuesta de Peter parece funcionar, pero las dependencias de Maven están desactualizadas (ver este error )

<dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se-core</artifactId> <version>2.3.1.Final</version> </dependency> <dependency> <groupId>org.jboss.weld</groupId> <artifactId>weld-core</artifactId> <version>2.3.1.Final</version> </dependency> <dependency> <groupId>org.jboss</groupId> <artifactId>jandex</artifactId> <version>1.2.2.Final</version> </dependency>