Acceder a datos mediante JPA en un paquete distinto

Acerca de esta tarea

Debe configurar su paquete JPA y añadir los orígenes de datos a WebSphere Application Server antes de acceder a las unidades de persistencia JPA de otro paquete. Por ejemplo, un paquete de aplicación web que consume entidades JPA y muestra y manipula datos.
Consejo:

Asegúrese de que el archivo de persistencia JPA contiene referencias a un origen de datos JTA (Java™ Transaction API) y no JTA.

JPA tiene dos patrones transacciones para acceder a un origen de datos:
jta-data-source
El patrón de recursos Java Transaction API (JTA) depende de transacciones globales. El patrón de recursos JTA se utiliza generalmente dentro del ámbito de una sesión de Enterprise JavaBeans (EJB). Esta configuración permite al bean de sesión controlar contextos de transacción y de seguridad mientras JPA gestiona las correlaciones de persistencia. En este caso, la aplicación no utiliza la interfaz EntityTransaction sino que se basa en el EntityManager que figura en la transacción global cuando se accede al mismo.
non-jta-data-source
El patrón de recursos no JTA se utiliza para tratar un recurso individual en ausencia de transacciones globales. El patrón de recurso que no es de JTA se utiliza generalmente dentro del ámbito de una aplicación Web o un cliente de aplicaciones. La aplicación controla la transacción con el origen de datos mediante la interfaz EntityTransaction.

En los archivos persistence.xml para una aplicación OSGi, los elementos jta-data-source y non-jta-data-source acceden a orígenes de datos a través de una búsqueda JNDI (Java Naming and Directory Interface), una búsqueda JNDI en el registro del servicio o a través de Blueprint.

Si los orígenes de datos JTA y no JTA no están configurados en el archivo persistence.xml, se utilizan los orígenes de datos JTA y no JTA predeterminados configurados para el servidor. De forma predeterminada, los valores son nulos. Algunas características de entidad JPA requieren que se especifique un origen de datos que no sea JTA. Por ejemplo, la generación automática de identidades de entidades.

Procedimiento

  1. Asegúrese de que la entidad y los paquetes de controlador de entidad se han añadido al archivo manifest.mf como paquetes de exportación:
    1. Efectúe una doble pulsación Manifiesto: <nombre_proyecto>, donde <nombre_proyecto> es el nombre del proyecto de paquete JPA. Se abrirá el manifiesto de paquete en el editor.
    2. Cambie a la pestaña Tiempo de ejecución. Verifique que las entidades y los paquetes de controladores de entidades se añaden como paquetes de exportación.
  2. Añada orígenes de datos que no sean JTA a persistence.xml:
    1. Abra el archivo persistence.xml en el editor.
    2. En la lista de componentes, seleccione su entidad para visualizar los detalles de la entidad.
    3. En el campo de origen de datos no JTA, escriba el nombre JNDI global de un origen de datos que no sea JTA. Por ejemplo, osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/blogdbnojta).
  3. Modifique el método getEntityManager().

    Al modificar el método getEntityManager(), configura la búsqueda JNDI para el servicio EntityManagerFactory ya que la unidad de persistencia de un paquete JPA no se encuentra en un entorno Java EE.

    También puede configurar la búsqueda JNDI convirtiendo el bean de gestor de entidades en un bean gestionado por Blueprint. Para obtener más información, consulte Aplicaciones JPA y OSGi.

    1. Abra el bean de gestor de entidades en el editor .
    2. Localice getEntityManager() y modifíquelo de este modo:
      private EntityManager getEntityManager() {
      		try {
      			emf = (EntityManagerFactory) new InitialContext().lookup("osgi:service/javax.persistence.EntityManagerFactory/(osgi.unit.name=jpaBundle)");
      		} catch (NamingException e) {
      			// TODO Auto-generated catch block
      	e.printStackTrace();
      		}
      		
      		return emf.createEntityManager();
      	}
      Importante: En la línea de código siguiente, asegúrese de que la unidad de persistencia coincide con la unidad de persistencia de persistence.xml:
      emf = (EntityManagerFactory) new InitialContext().lookup("osgi:service/javax.persistence.EntityManagerFactory/(osgi.unit.name=jpaBundle)");
  4. Corrija los errores generados en InitialContext y NamingException:
    1. Vaya a la vista Marcadores.
    2. Para cada error, pulse con el botón derecho del ratón en el error y seleccione Arreglo rápido. Siga las instrucciones del asistente para importar los paquetes necesarios.
  5. Añada un proveedor JDBC a la consola administrativa de WebSphere Application Server:
    1. Vaya a la vista Servidores.
    2. Pulse con el botón derecho del ratón en la instancia de servidor y seleccione Iniciar.
    3. Pulse con el botón derecho del ratón en la instancia de servidor y seleccione Administración > Ejecutar consola administrativa para abrir la consola administrativa.
    4. Pulse Recursos > JDBC > Proveedores de JDBC.
    5. Pulse Nuevo en la página de proveedores JDBC. Se abre el asistente Crear un origen de datos.
    6. Siga las instrucciones del asistente para crear el proveedor JDBC.
    7. Guarde los cambios.
  6. Añada definiciones de origen de datos a la consola administrativa de WebSphere Application Server:
    1. En la consola administrativa, pulse Recursos > JDBC > Orígenes de datos para abrir la página de orígenes de datos en la consola.
    2. En la página Orígenes de datos, pulse Nuevo para crear una definición de origen de datos con un nombre JNDI establecido en la definición de conexión JTA especificada en el archivo persistence.xml. Por ejemplo, jdbc/blogdb.
    3. En la página Orígenes de datos, pulse Nuevo para crear otra definición de origen de datos con un nombre JNDI establecido en la definición de conexión no JTA especificada en el archivo persistence.xml. Por ejemplo, jdbc/blogdbnojta.
    4. Una vez haya creado el origen de datos para la conexión no JTA, pulse la definición para la conexión no JTA en la página Orígenes de datos de la consola de administración. Se abre la página Configuración.
    5. En la sección Propiedades adicionales, pulse Propiedades de origen de datos de WebSphere Application Server.
    6. Seleccione Origen de datos no transaccional. En el servidor de aplicaciones, el uso del elemento <non-jta-data-source> requiere una configuración especial para un origen de datos no transaccional. Los orígenes de datos que se configuran para el servidor de aplicaciones no funcionan como <non-jta-data-source> porque todos los orígenes de datos que configura el servidor de aplicaciones se incluyen automáticamente con el contexto transaccional actual. Para evitar esta inclusión automática, añada una propiedad personalizada adicional de origen de datos nonTransactionalDataSource=true.

Resultados

Ahora puede consumir entidades JPA, visualizar y manipular datos JPA, donde el acceso a paquete JPA se realiza desde un paquete de aplicación web.
Icono que indica el tipo de tema Tema de tarea
Términos y condiciones para centros de información | Comentarios

Icono de indicación de fecha y hora Última actualización: 22 de abril de 2014

Nombre de archivo: taccessjpaoutbundle.html