Fournisseur de cache dynamique pour le cache de niveau 2 JPA 2.0
Vous allez apprendre à utiliser le service de cache dynamique de WebSphere Application Server en tant que fournisseur de cache de niveau 2 (L2) Java Persistence API (JPA). JPA 2.0 a normalisé l'interface de cache L2. WebSphere Application Server prend en charge la norme JPA. Le service de cache dynamique se branche en tant que fournisseur de cache de niveau 2 sur JPA. Le cache L2 optimise les performances de votre application JPA, et vous pouvez configurer et contrôler le service de cache dynamique pour votre application JPA dans l'environnement WebSphere Application Server.
Un fournisseur de cache L2 JPA de cache dynamique pour JPA 2.0 partage des états d'entité entre différents contextes de persistance, différentes transactions et différents utilisateurs. Lorsque la mise en cache est activée, les entités introuvables dans le contexte de persistance sont chargées à partir du cache L2. Avec la mise en cache L2, les entités actuellement chargées n'ont pas besoin d'accéder aux bases de données. Pour en savoir plus sur la mise en cache L2, voir la spécification JPA 2.0.
JPA utilise plusieurs caches L2 configurables pour maximiser les performances. Le cache de données JPA est un cache de données d'objets persistants qui fonctionne au niveau d'EntityManagerFactory. Lorsqu'il est activé, le cache de données est vérifié avant d'effectuer un aller vers le magasin de données. Des données sont stockées dans le cache lorsque des objets sont validés et lorsque des objets persistants sont chargés à partir du magasin de données. Outre le cache de données, JPA définit des interfaces de fournisseur de service pour un cache de requête.
La cache de requête stocke les ID objet renvoyés par les exécutions de requête. Lorsque vous exécutez une requête, JPA assemble une clé basée sur les propriétés de la requête et les paramètres utilisés au moment du lancement, puis recherche un résultat de requête mise en cache. Si un résultat est trouvé, les ID objet dans le résultat mis en cache sont recherchés et les objets ayant une capacité de persistance qui sont trouvés sont renvoyés. Sinon, la requête est exécutée sur la base de données et les ID objet qui sont chargés par la requête sont placés dans le cache. La liste des ID objet n'est pas mise en cache tant que la liste renvoyée au moment du lancement de la requête n'est pas complètement parcourue.
- Synchronisation et réplication de cache distribué sur les clusters via les services DRS (Data Replication Service) et HA (High-Availability) de WebSphere Application Server.
- Surveillance de cache de requête et de cache de données sophistiquée et avancée, optimisation et administration du cache. Le cache L2 hérite de l'ensemble de l'écosystème des outils de cache dynamique disponibles.
- Prise en charge z/OS de la région serviteur native.
- Performances égales sinon supérieures à celle du fournisseur de cache par défaut.
La norme JPA fournit des alias qui permettent de configurer facilement les plug-ins JPA. Le fournisseur de cache L2 de cache dynamique pour JPA 2.0 est généralement configuré avec l'alias dynacache. Vous pouvez utiliser l'alias dynacache pour définir les propriétés DataCache et QueryCache de JPA. Si la propriété QueryCache est définie pour utiliser l'alias dynacache, la propriété DataCache utilisera également cet alias. Vous pouvez configurer les propriétés QueryCache et DataCache pour qu'elles utilisent différents types de fournisseur de cache. Vous pouvez définir la valeur par défaut pour la propriété QueryCache et définir le cache dynamique pour la propriété DataCache ou inversement. Dans l'idéal, il est recommandé de définir le service de cache dynamique de WebSphere Application Server pour les propriétés DataCache, QueryCache et DataCacheManager. Si la valeur de la propriété DataCache est dynacache, le fournisseur RemoteCommitProvider est sans effet car les services DRS et HA sont optimisés pour effectuer la synchronisation de cache. Vous ne pouvez pas activer la propriété QueryCache séparément de DataCache. La propriété QueryCache tire profit de la disponibilité de la propriété DataCache où les données d'entité sont mises en cache.
Configuration du fournisseur L2 de cache dynamique JPA (méthode de base)
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<property name="openjpa.QueryCache" value="dynacache"/>
<property name="openjpa.DataCacheManager" value="dynacache"/>
Nom du cache dynamique | Nom de la propriété | 2e appel |
---|---|---|
Fournisseur de cache DataCache | com.ibm.ws.cache.openjpa. DynacacheDataCache | dynacache |
Fournisseur de cache QueryCache | com.ibm.ws.cache.openjpa. DynacacheQueryCache | dynacache |
RemoteCommitProvider | com.ibm.ws.cache.openjpa. NoOpRemoteCommitProvider | aucun |
DataCacheManager | com.ibm.ws.cache.openjpa. DynacacheDataCacheManager | dynacache |
Configuration du fournisseur L2 de cache dynamique JPA (méthode avancée)
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache",
CacheSize=1000,
EnableDiskOffload=true,
DiskCacheSizeInGB=4,
DiskOffloadLocation=c:\temp,
EnableCacheReplication=true)"/>
Propriétés personnalisées de cache dynamique | Valeurs par défaut |
---|---|
CacheName | Valeur par défaut |
CacheSize | 2000 |
EnableDiskOffload | false |
EnableCacheReplication | false |
DiskCacheSizeInGB | non applicable |
DiskOffloadLocation | non applicable |
ReplicationType | 1, 2 ou 4. 1 signifie NOT_SHARED, 2 PUSH et PUSH_PULL |
wsadmin>set mbean [$AdminControl queryNames type=DynaCache,*]
wsadmin> $AdminControl invoke $mbean getCacheIDsInMemory {default \S}
66
71
10
A5614-67
wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=5
TOTAL_READ_COUNT=5
WRITE_COUNT=4
TOTAL_WRITE_COUNT=4
wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default openbook.domain.Customer}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=0
TOTAL_READ_COUNT=0
WRITE_COUNT=1
TOTAL_WRITE_COUNT=1
Vous pouvez également utiliser le moniteur de cache étendu pour afficher le contenu de l'ID et des valeurs de clé du cache placés dans le cache par le module d'exécution JPA.Utilisation du fournisseur de cache L2 du cache dynamique dans un environnement en cluster
Les clients peuvent couramment définir une instance de cache dans WebSphere Application Server et référencer ce nom dans la propriété CacheName de la valeur de propriété JPA DataCache. Vous pouvez définir une instance de cache d'objet à l'aide du fichier cacheinstances.properties, de la propriété DistributedMapFactory ou de la console d'administration.
Toutes les propriétés sont facultatives et si elles ne sont pas spécifiées, les propriétés par défaut sont utilisées. Si l'instance de cache n'existe pas, le service de cache dynamique crée l'instance de cache. La configuration avancée pour une instance QueryCache Dynacache est exécutée de façon similaire.
Le cache de données de JPA fonctionne à la fois dans un environnement à machine virtuelle Java unique et dans un environnement à plusieurs machines virtuelles Java. Le service DRS (Data Replication Service) permet d'effectuer la mise en cache sur plusieurs machines virtuelles dans un environnement WebSphere Application Server, Network Deployment en cluster.
Pour les entités et les requêtes des instances DataCache et QueryCache du cache dynamique qui sont répliquées sur des serveurs dans un environnement WebSphere Application Server, Network Deployment à l'aide du service DRS, configurez un domaine de réplication et associez celui-ci à l'instance de cache. En outre, la propriété openjpa.RemoteCommitProvider openJPA de l'unité persistante doit avoir pour valeur none.
- Créez un domaine de réplication dans la console d'administration et associez-le à l'instance de cache baseCache via le panneau du service de cache dynamique sur tous les serveurs d'applications qui doivent partager le cache distribué. Le service de cache dynamique utilise ce domaine de réplication pour répliquer des données sur des serveurs qui appartiennent à ce dernier.
- Configurez l'instance de cache en affectant la valeur true à la propriété enableCacheReplication lorsque vous définissez la configuration de l'instance de cache. Si vous ne spécifiez pas la propriété replicationType, l'instance de cache est configurée par défaut avec le mode de partage NOT_SHARED, où seules les invalidations sont propagées. Vous pouvez configurer l'instance de cache avec les types de partage NOT_SHARED, PUSH et PUSH_PULL. Pour en savoir plus sur ce sujet, voir la rubrique sur la réplication de cache.
- Affectez la valeur true à la propriété personnalisée de machine virtuelle Java, com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup, sur tous les serveurs d'applications appartenant au domaine de réplication. Cette propriété personnalisée permet un amorçage plus en amont et plus rapide des instances de cache JPA présentes sur des serveurs.
- Créez une bibliothèque partagée pour rendre les classes entité disponibles dans le chemin d'accès aux classes du serveur d'applications. Pour cela, définissez une bibliothèque partagée et associez-la au chargeur de classe du serveur. Cette étape est nécessaire pour permettre au service de cache dynamique et au service DRS de désérialiser les objets entité répliqués. Pour plus d'informations sur les bibliothèques partagées, voir les rubriques décrivant les collections de bibliothèques partagées, la gestion des bibliothèques partagées et l'association de bibliothèques partagées à des serveurs.
- Affectez la valeur none à openjpa.RemoteCommitProvider.
- org.apache.openjpa.event.SingleJVMRemoteCommitProvider (configuré avec l'alias "sjvm")
- org.apache.openjpa.event.TCPRemoteCommitProvider
- org.apache.openjpa.event.JMSRemoteCommitProvider
Identification et résolution des problèmes lié au cache L2 JPA
# Significant dynamic cache OpenJPA messages in the SystemOut.log file
DYNA1081I: OpenJPA L2 DataCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".
# Applicable only if QueryCache is enabled
DYNA1080I: OpenJPA L2 QueryCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".