Configuration de WSJPA FastPath

L'API JPA (Java™ Persistence API) est une spécification très souple qui indique aux implémenteurs de convertir les données relationnelles sous la forme d'un objet Java. Compte tenu de cette souplesse, la majorité du travail est exécuté lors de l'exécution par le fournisseur de l'API pour déterminer la manière de charger correctement les données relationnelles sous la forme d'un objet. De cette souplesse découle une exécution qui, dans certains cas, doit exécuter en continu du code redondant pour que les données soient correctement chargées. En abandonnant une partie de cette flexibilité, l'optimisation WSJPA FastPath tente d'ignorer la majorité du code redondant et génère du code hautement optimisé qui interagit directement avec la couche JDBC. Cette optimisation conduit à une amélioration des performances.

Pourquoi et quand exécuter cette tâche

Remarque : FastPath est pris en charge uniquement par le fournisseur de persistance WSJPA.

L'optimisation de ces chemins de code est un processus complexe et, par conséquent, les modèles de domaine ne répondent pas tous aux exigences des optimisations WSJPA FastPath.

La fonction Fastpath peut améliorer les performances de certaines applications dont les données sont modélisées dans un format acceptable et qui n'utilisent pas de fonctions JPA étendues.

Examinez le code suivant :
public Customer findCustomer(int id) { 
		 		 return em.find(Customer.class, id); 
}

Cet exemple est une méthode auxiliaire simple qui recherche une entité client. Chaque fois que la méthode findCustomer est appelée, l'exécution JPA exécute de grandes quantités de code pour analyser la demande, accéder à la base de données et charger l'entité client. Sans l'optimisation FastPath, la majorité de la logique est identique pour la deuxième exécution et les exécutions suivantes de la méthode findCustomer. Un très petit nombre de décisions d'exécution de la première exécution sont conservées pour les appels suivants de la méthode findCustomer. Ce traitement du code redondant peut générer des problèmes de performance dans certains scénarios.

Lorsque la fonction FastPath est activée, lors du premier appel em.find(Customer.class, id), du code hautement optimisé est généré pour remplacer tous les appels suivants à em.find(Customer, id). Ce code généré suppose que le seul élément qui peut changer est l'ID chaque fois que vous recherchez un client. Par conséquent, vous pouvez générer du code sans pratiquement aucune décision. Lors du premier appel de méthode, si la génération FastPath aboutit, un message similaire au message suivant est consigné :
10855  fp_pu  INFO   [main] FP - Successfully generated FastPath com.ibm.ws.persistence.fastpath.entities.Customer$Find$FastPath@1f6b69d7".

Lorsque le message est consigné, toutes les exécutions suivantes de recherche d'un client utilisent le nouveau chemin généré.

L'exemple suivant explique comment exécuter un chemin de recherche. FastPath tente également d'optimiser le lazy loading des zones (relation et non-relation) et d'exécuter NamedQueries.

Configuration FastPath :

Lorsque la propriété d'unité de persistance wsjpa.FastPath=true est définie, l'exécution JPA tente de déterminer les opérations qui peuvent être exécutées en toute sécurité. Les propriétés Include et Exclude peuvent être utilisées pour configurer explicitement les opérations exécutées en utilisant FastPath.

Lorsque la propriété wsjpa.FastPath est définie, openjpa.MetaDataRepository=Preload=true doit être également défini. Par exemple :
<property name=”openjpa.MetaDataRepository” value=”Preload=true”/>
Remarque : Si un chemin ne peut pas être optimisé par l'exécution FastPath ou qu'il est configuré dans la propriété Exclude, il est exécuté par le code d'exécution JPA normal. Il s'agit d'une caractéristique importante qui permet l'expérimentation avec l'optimisation FastPath. Les chemins de code non optimisé sont convertis automatiquement dans le chemin de code JPA d'origine sans perte de fonction.
Syntaxe de configuration :
<property name=”wsjpa.FastPath”
                              value=”true(Include=’<path>;,<path>;...’;Exclude=’<path>,<path>...’)”>
Path syntax :
  • Outil de recherche : <nom d'entité qualifié complet> (tel que com.ibm.ws.jpa.Customer)
  • Zone avec lazy loading : <nom de zone qualifié complet> (tel que com.ibm.ws.jpa.Customer.cars)
  • Requête nommée : <nom de requête complet> (telle que com.ibm.ws.jpa.customer_find_by_id)
Règles :
  • Si aucune propriété (Include/Exclude) n'est définie, l'exécution balaye tous les types persistants et tente de déterminer les chemins pouvant être traités.
  • Si la propriété Include est définie est définie, seuls les chemins spécifiés sont traités et la propriété Exclude est ignorée.
  • Si la propriété Exclude est définie, tous les chemins qui ne figurent pas dans la liste d'exclusion tentent d'être traités.
  • Si la liste d'exclusion contient une zone et que le type de recherche de la zone est EAGER, la zone est ignorée, car elle ne fera jamais l'objet d'un lazy loading.
Exemple 1 :
<property name="wsjpa.FastPath" value="false"/>
Dans cet exemple, false est la valeur par défaut ; cette optimisation n'est pas retournée par défaut.
Exemple 2 :
<property name="wsjpa.FastPath" value="true"/>
L'exécution traite toutes les entités et tente de déterminer les outils de recherche, les opérations lazy load et les requêtes nommées qui peuvent être optimisées.
Exemple 3 :
<property name="wsjpa.FastPath" value="true(Exclude=com.ibm.ws.jpa.entities.Customer.address,customer.findById"/>
Comme dans l'exemple 2, à l'exception du lazy loading, la zone Customer.address et la requête nommée customer.findById sont exclus du traitement FastPath.
Exemple 4 :
<property name="wsjpa.FastPath" value="true(Include=com.ibm.ws.jpa.entities.Customer, customer.findById"/>
Les seules opérations traitées sont la recherche d'un client et l'exécution de la requête nommée ‘customer.findById’. Toutes les autres opérations sont exécutées en utilisant l'exécution JPA normale.

Limitations :

Comme indiqué précédemment, il existe trois compromis pour obtenir tous les gains de performance lié aux optimisations FastPath. Bien que cette fonction tente de prendre en charge un large éventail de modèles Entity et de fonctions JPA, certains scénarios ne sont pas pris en charge par l'optimisation FastPath. Voici la liste des limitations connues à ce stade :
  • Incompatible avec la propriété openjpa.DataCache
  • Incompatible avec la propriété openjpa.FetchPlan
  • Envoi d'un type de mode de verrouillage LockModeType et/ou d'une mappe de propriétés à la méthode de recherche EntityManager.
  • Stratégies de zone personnalisées
  • @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

  • Mappage de colonnes XML
  • Incorporables
  • Seul l'héritage de table unique est pris en charge.
  • @javax.persistence.PostLoad callback
  • Identificateurs délimités
  • Exécution d'un chemin qui provoque :
    • la recherche d'une zone ManyToMany
    • la recherche d'une collection implémentée comme mappe ou matrice
    • Exécution d'une instruction SQL qui génère une jointure dans une table de jointures
    • Exécution d'une instruction SQL qui produit une jointure plusieurs fois dans la même table de jointures. Par exemple : entité ayant plusieurs relations EAGER OneToOne avec la même entité.
    • Chargement de plusieurs niveaux de relations eager. Par exemple {A->(eager)B->(eager)C}
  • Appel des méthodes suivants setFirst, setFlush, setHind, setLockMode et setMax dans une requête nommée NamedQuery.
  • Incompatible avec les applications JPA qui utilisent PureQuery.
  • Incompatible avec les applications JPA qui utilisent la tentative d'accès.
  • Définition d'une propriété lors de l'exécution qui change le mode de recherche des données par JPA.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpafastpath
Nom du fichier : tejb_jpafastpath.html