Configuración de WSJPA FastPath

La Java™ Persistence API (JPA) es una especificación muy flexible que proporciona directrices sobre cómo los implementadores van a convertir datos relacionales a un formato de objeto Java. Debido a la naturaleza flexible de esta API, una gran cantidad de trabajo se completa en el tiempo de ejecución por el proveedor de la API para determinar cómo cargar correctamente datos relacionales en formato de objeto. Esta flexibilidad genera un tiempo de ejecución que, bajo determinadas circunstancias, debe ejecutar de forma continuada código redundante para asegurarse de que los datos se han cargado correctamente. Al renunciar a parte de dicha flexibilidad, la optimización de WSJPA FastPath intenta ignorar gran parte de este código redundante y genera código altamente optimizado que interactúa directamente con la capa JDBC. Esta optimización se traduce en un mejor rendimiento.

Acerca de esta tarea

Nota: FastPath solo está soportado por el proveedor de persistencia WSJPA.

La optimización de vías de acceso de código es un proceso complejo y, como tal, no todos los modelos de dominio satisfacen los requisitos para optimizaciones de WSJPA FastPath.

La característica Fastpath puede mejorar el rendimiento de algunas aplicaciones que tienen sus datos modelados en un formato aceptable y que no utilizan características JPA ampliadas.

Por ejemplo, observe el código siguiente:
public Customer findCustomer(int id) { 
		 		 return em.find(Customer.class, id); 
}

Este ejemplo es un método auxiliar sencillo que encuentra una entidad de cliente. Cada vez que se inicia el método findCustomer, el tiempo de ejecución de JPA ejecuta grandes cantidades de código para analizar la solicitud, para acceder a la base de datos y para cargar la entidad del cliente. Si no se utiliza la optimización de FastPath, la mayor parte de la lógica es idéntica para la segunda ejecución y las subsiguientes del método findCustomer. Se conservan muy pocas de las decisiones de tiempo de ejecución de la primera ejecución para futuras invocaciones del método findCustomer. Este proceso de código redundante puede ocasionar problemas de rendimiento en algunos casos.

Cuando la característica FastPath está habilitada, en la primera invocación de em.find(Customer.class, ID), se genera código altamente optimizado que sustituye todas las llamadas subsiguientes a em.find(Customer, id). Este código generado presupone que lo único que puede cambiar es el ID cada vez que se encuentra un cliente. Como resultado, se puede generar código independiente de las decisiones. En la primera invocación del método, si la generación de FastPath es correcta, se registrará un mensaje parecido al siguiente:
10855  fp_pu  INFO   [main] FP - Successfully generated FastPath com.ibm.ws.persistence.fastpath.entities.Customer$Find$FastPath@1f6b69d7".

Si se registra este mensaje, todas las futuras ejecuciones de buscar un cliente utilizan esta nueva vía de acceso generada.

El ejemplo anterior describe cómo ejecutar una vía de búsqueda. FastPath siempre intenta optimizar la carga poco activa de campos (relación y no relación) y la ejecución de NamedQueries.

Configuración de FastPath:

Si se ha establecido la propiedad de la unidad de persistencia wsjpa.FastPath=true, el tiempo de ejecución JPA intenta determinar qué operaciones se pueden manejar con seguridad. Las propiedades Include y Exclude se pueden utilizar para configurar explícitamente qué operaciones ejecutar con FastPath.

Si se configura wsjpa.FastPath, también debe configurarse openjpa.MetaDataRepository=Preload=true. Por ejemplo:
<property name=”openjpa.MetaDataRepository” value=”Preload=true”/>
Nota: En el caso de que una vía de acceso dada no se pueda optimizar mediante el tiempo de ejecución de FastPath o se haya configurado en la propiedad exclude, se ejecuta por medio del código de tiempo de ejecución de JPA normal. Esta es una característica clave que permite experimentar con la optimización de FastPath. Las vías de código no optimizadas vuelven automáticamente a la vía de código JPA original sin ninguna pérdida de función.
Sintaxis de configuración:
<property name=”wsjpa.FastPath”
                              value=”true(Include=’<vía>;,<vía>;...’;Exclude=’<path>,<path>...’)”>
Sintaxis de vía de acceso:
  • Finder (buscador): <nombre de entidad totalmente calificado> (tal como com.ibm.ws.jpa.Customer)
  • Campo cargado poco activo (Lazy): <nombre de campo totalmente cualificado> (como com.ibm.ws.jpa.Customer.cars)
  • Consulta con nombre: <Nombre completo de consulta> (como com.ibm.ws.jpa.customer_find_by_id)
Reglas:
  • Si no se especifica ninguna propiedad (Include/Exclude), el tiempo de ejecución explora todos los tipos persistentes e intenta determinar qué vías procesar.
  • Si se especifica la propiedad include, sólo se procesan las vías especificadas y se ignora la propiedad exclude.
  • Si se especifica la propiedad exclude, todas las vías que no estén en la lista exclude se intentan manejar.
  • Si se proporciona un campo en la lista exclude, y el tipo de captación del campo es EAGER, el campo se ignora puesto que el campo nunca se cargaría de forma poco activa.
Ejemplo 1:
<property name="wsjpa.FastPath" value="false"/>
En este ejemplo, false es el valor predeterminado; esta optimización no está activada por omisión.
Ejemplo 2:
<property name="wsjpa.FastPath" value="true"/>
El tiempo de ejecución procesa todas las entidades e intenta determinar qué buscadores (finders), qué operaciones de carga poco activa y qué consultas con nombre se pueden optimizar.
Ejemplo 3:
<property name="wsjpa.FastPath" value="true(Exclude=com.ibm.ws.jpa.entities.Customer.address,customer.findById"/>
Igual que en el ejemplo 2, excepto que el campo Customer.address de carga poco activa y la consulta con nombre customer.findById se excluyen del proceso de FastPath.
Ejemplo 4:
<property name="wsjpa.FastPath" value="true(Include=com.ibm.ws.jpa.entities.Customer, customer.findById"/>
Las únicas operaciones que se procesan son la búsqueda de un cliente (Customer) y la ejecución de la consulta con nombre ‘customer.findById’. Todas las demás operaciones se ejecutan utilizando el tiempo de ejecución normal de JPA.

Limitaciones:

Como se ha indicado anteriormente, hay ventajas e inconvenientes a la hora de utilizar las optimizaciones de FastPath. Aunque esta función intenta dar soporte a una amplia gama de modelos de entidad y funciones JPA, hay un número de casos conocidos que no admiten la optimización de FastPath. Consulte la lista siguiente de limitaciones conocidas en este momento:
  • Incompatible con la propiedad openjpa.DataCache.
  • Incompatible con la propiedad openjpa.FetchPlan.
  • Pasar un tipo LockModeType y/o una correlación de propiedades al método find de EntityManager.
  • Estrategias de campo personalizado
  • @org.apache.openjpa.persistence.Factory, @javax.persistence.SecondaryTable,
    @org.apache.openjpa.persistence.Externalizer,
    @org.apache.openjpa.persistence.ExternalValues,
    @org.apache.openjpa.persistence.LRS, @java.sql.Lob, @java.sql.Clob, @java.sql.Blo

  • Correlación de columnas XML
  • Elementos incorporables
  • Sólo se admite la herencia de una tabla.
  • Devolución de llamada @javax.persistence.PostLoad
  • Identificadores delimitados
  • Ejecución de una vía que da como resultado:
    • Obtener un campo de muchos a muchos (ManyToMany).
    • Obtener una colección que se implementa como una correlación o matriz.
    • Ejecución de una sentencia SQL que se une en una tabla de unión
    • Ejecución de una sentencia SQL que se une en la misma tabla más de una vez, es decir, tiene una entidad que tiene varias relaciones EAGER de uno a uno con la misma entidad.
    • Cargar varios niveles de relaciones eager. Como por ejemplo, {A->(eager)B->(eager)C}
  • Llamar a los métodos siguientes setFirst, setFlush, setHind, setLockMode y setMax en una consulta con nombre.
  • Incompatibles con las aplicaciones JPA que utilizan PureQuery.
  • Incompatibles con las aplicaciones JPA que utilizan intento de acceso.
  • Establecer una propiedad en el tiempo de ejecución que cambia cómo JPA capta los datos.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpafastpath
File name: tejb_jpafastpath.html