¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo acceder al Contexto de Persistencia JPA desde una clase DAO en Java EE

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 13 Vistas
0
Cargando...

Hola a todos,

Estoy trabajando en un proyecto simple de Java EE.

Quiero acceder a entidades JPA en mi clase DAO que es una clase java simple. Más tarde llamaré a la clase DAO desde un bean de sesión sin estado (lógica de negocio).

Ahora, el problema es que no puedo acceder al Contexto de Persistencia JPA desde mi clase DAO. Intenté con el siguiente código:

EntityManagerFactory emf = Persistence

* .createEntityManagerFactory("PS_LTP_PU");*

* EntityManager entityManager = emf.createEntityManager();*

También probé con

@PersistenceContext(unitName="PS_LTP_PU")

EntityManager entityManager;

En el primer caso muestra la siguiente excepción:

javax.persistence.PersistenceException: No hay proveedor de Persistencia para EntityManager llamado PS_LTP_PU

En el segundo caso lanza una Excepción de Puntero Nulo para el Entity Manager.

¿Cuál es el problema?

¿Cómo puedo resolver este problema?

Gracias

Sampath

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

>Sin embargo, una duda es que quiero abstraer todo lo relacionado con la persistencia de mi clase de negocio (bean de sesión sin estado) poniéndolo en una clase DAO simple. Pero en tu enfoque, el bean de sesión de negocio estará al tanto de la persistencia. ¿Es este un enfoque estándar o hay otro enfoque disponible para mi caso?

La característica de Inyección de Dependencias no funciona en clases Java simples, solo en EJB. Porque solo el contenedor EJB es responsable de la inyección.

Por lo tanto, puedes intentar crear dos EJB: uno será responsable de la persistencia y otro será responsable de la lógica de tu negocio.

Saludos, Sergei

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Adrian,

Gracias por tu respuesta.

Lo intentaré y te preguntaré si tienes algún problema.

Pero una duda es que quiero abstraer todo lo relacionado con la persistencia de mi clase de negocio (bean de sesión sin estado) poniéndolo en una clase DAO simple.

Sin embargo, en tu enfoque, el bean de sesión de negocio estará al tanto de la persistencia. ¿Es este enfoque estándar o hay algún otro enfoque disponible para mi caso?

Gracias

Sampath

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Sampath,

Tu primer intento falla ya que el proveedor de persistencia SAP JPA no es visible para la aplicación (ni para javax.persistence.Persistence).

Tu segundo intento falla porque la inyección de dependencias no está disponible para clases Java simples.

Para obtener un entity manager desde una clase Java simple, primero debes vincularlo al JNDI. La forma más fácil de lograrlo es utilizando la anotación @PersistenceContext en tu bean de sesión:

@PersistenceContext(name="theJndiName", unitName="PS_LTP_PU")
@Stateless
public class YourBean {
...

Luego, puedes buscarlo en JNDI en tu DAO

void someMethod() {
     Context ctx = new InitialContext();
     EntityManager em = ctx.lookup("theJndiName");

-Adrian

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

He resuelto el problema.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?