Mise en mémoire cache des données pour un service de temporisateur

Si vous souhaitez optimiser l'accès de la base de données et les appels SQL pour un service de temporisateur EJB, vous pouvez activer le serveur d'applications afin de mettre en mémoire cache les données du temporisateur. La mise en cache permet au serveur d'applications pour réutiliser les données de minuteur sans avoir à interroger la base de données chaque fois que des données sont nécessaires.

Pourquoi et quand exécuter cette tâche

En permettant au serveur d'applications de mettre en mémoire cache les données d'un service de temporisateur Enterprise JavaBeans (EJB), vous pouvez réduire le nombre d'instructions SQL générées pour les appels des méthodes de l'interface du temporisateur. Lorsque cette fonction est activée, les données du temporisateur sont mises en mémoire cache dans l'objet du temporisateur lorsque vous créez cet objet du temporisateur.

La spécification des beans d'entreprise exige d'un appel SQL vers la base de données soit lancé pour chaque appel vers l'interface javax.ejb.Timer de telle sorte que l'application puisse assurer que le temporisateur EJB utilise les données les plus actuelles disponibles. Si ces méthodes sont souvent appelées ou que vous avez de nombreux temporisateurs EJB qui appellent l'une de ces méthodes, le serveur d'applications génère de nombreuses instructions SQL sur une très courte durée. Dans certains cas, vous pouvez penser que la stricte conformité à cette exigence est dangereuse pour les performances et génère plus de frais que ce qui est garanti.

Par exemple, imaginez un cas dans lequel un temporisateur expire uniquement à 12h00 chaque lundi. Durant la semaine, toutes les applications qui appellent les méthodes de l'interface du temporisateur entraînent la création d'un appel SQL, mais l'appel retourne toujours les mêmes données. De plus, lorsqu'une application appelle la méthode ejbTimeout pour un temporisateur, les données associées à ce temporisateur ne peuvent pas changer ; les données du temporisateur stockées dans la base de données ne peuvent être mises à jour lorsqu'une méthode ejbTimeout est exécutée pour ce temporisateur. C'est pourquoi tous les appels de méthode suivants que les applications lancent au cours de la période d'exécution entraînent la génération d'un appel SQL inutile et trajet superflu vers la base de données.

Si en revanche vous activez la mise en mémoire cache des données du temporisateur, le serveur d'applications interroge uniquement la base de données la première fois qu'une méthode configurée est appelée. Pour tous les appels suivants vers l'une des méthodes configurées, le serveur d'applications utilise les données mises en mémoire cache pour la durée de vie de l'objet du temporisateur et un nouvel appel SQL doit être généré.

Eviter les incidents Eviter les incidents: Prenez connaissance des conditions suivantes :
  • Lorsque cette fonction est activée, votre configuration n'est pas conforme à la spécification EJB.
  • Cette fonction peut offrir pour un temporisateur la possibilité d'utiliser des données périmées. Les données mises en mémoire cache d'un service de temporisateur deviennent périmées une fois que la période d'expiration suivante pour le temporisateur est passée.

    Par exemple, supposez que vous possédez un temporisateur configuré pour expirer toutes les heures. Si vous créez et enregistrez l'objet du temporisateur, les données que le serveur d'applications met en mémoire cache pour cet objet seront uniquement valides pendant une heure. Les données mises en mémoire cache sont les mêmes que les données stockées dans la base de données.

    Si vous appelez l'une des méthodes de temporisateur pendant la première heure, les données du temporisateur sont valides. Après cette période d'expiration, en revanche, les données mises en mémoire cache pour le temporisateur deviennent périmées et ne correspondent pas aux données se trouvant réellement dans la base de données. Dans cet exemple, si vous avez interrogé le conteneur EJB pour tous les temporisateurs au bout d'une heure et demi, l'application récupère un nouvel objet de temporisateur contenant les données mises en mémoire cache qui seront valides pendant trente minutes ; ceci est dû au fait qu'à deux heure, le temporisateur expire à nouveau et toutes les données mises en mémoire cache sont alors périmées.

gotcha

Procédure

  1. Dans la console d'administration du serveur d'applications, sélectionnez le serveur que vous souhaitez configurer. Cliquez sur Serveurs > Serveurs d'applications > server.
  2. Dans la zone Infrastructure du serveur, sélectionnez Gestion des processus et Java > Définition des processus.
  3. Dans la zone Propriétés supplémentaires, sélectionnez Machine virtuelle Java.
  4. Dans la zone Propriétés supplémentaires du panneau Java™ Virtual Machine, sélectionnez Propriétés personnalisées.
  5. Créez ou modifiez la propriété personnalisée com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor.
    • Si cette propriété n'existe pas encore, cliquez sur Nouveau pour la créer.
    • Si la propriété existe déjà, sélectionnez-la et cliquez sur Modifier pour changer sa valeur.
  6. Entrez com.ibm.websphere.ejbcontainer.allowCachedTimerDataForname pour le nom de la propriété personnalisée.
  7. Déterminez la meilleure valeur pour vos besoins et votre environnement. La valeur de cette propriété vous permet d'effectuer autant de contrôle de la mise en mémoire cache que nécessaire. Vous pouvez définir un caractère générique ou utiliser des noms de temporisateur spécifiques et vous pouvez affiner le contrôle des méthodes mises en mémoire cache en affectant des valeurs entières en fonction de ces méthodes.
    Ces valeurs entières vous permettent d'avoir un contrôle précis des méthodes que vous activez pour utiliser les données mises en mémoire cache. Les entiers sont affectés par bean ou à tous les beans si vous utilisez un astérisque (*). Les valeurs entières et leurs méthodes correspondantes sont les suivantes :
    1
    Méthode Specifies the getHandle()
    2
    Méthode Specifies the getInfo()
    4
    Méthode Specifies the getNextTimeout()
    8
    Méthode Specifies the getTimeRemaining()
    16
    Méthode Specifies the getSchedule()
    32
    Méthode Specifies the isPersistent()
    64
    Méthode Specifies the isCalendarTimer()
    Remarque : Vous pouvez appliquer cette propriété à ces méthodes individuelles en utilisant la valeur entière affectée ou bien vous pouvez l'appliquer à une combinaison de ces méthodes. Par exemple :
    • Pour appliquer cette propriété à la méthode getHandle et à la méthode getTimeRemaining, calculez la somme des valeurs entières des deux méthodes et utilisez la valeur 9 (1+8).
    • Pour appliquer la propriété aux sept méthodes, utilisez la valeur 127 (1+2+4+8+16+32+64), faute de quoi, vous ne pourrez pas spécifier d'entier. Le comportement par défaut lorsque cette propriété est définie consiste à appliquer la mise en mémoire cache à toutes les méthodes.
    Lorsque vous prenez votre décision, utilisez un caractère générique pour spécifier tous les temporisateurs ou définissez les noms JNDI des beans de temporisateur pour lesquels le serveur d'applications applique la mise en mémoire cache.
    • Vous pouvez saisir un astérisque (*) qui configurera tous les temporisateurs éventuellement suivis d'une valeur entière ou de la somme des valeurs entières indiquant la méthode applicable de l'interface du temporisateur. Si vous ne définissez de valeur entière, le serveur d'applications applique la mise en mémoire cache à toutes les méthodes.
      Par exemple, la valeur suivante applique la mise en mémoire cache aux méthodes de tous les temporisateurs :
      *
    • Vous pouvez saisir le nom du bean de temporisateur EJB éventuellement suivi d'une valeur entière ou de la somme des valeurs entières indiquant la méthode applicable de l'interface du temporisateur. Pour saisir plusieurs beans de temporisateur, séparez chaque nom d'application de deux points (:). Si vous ne définissez de valeur entière, le serveur d'applications applique la mise en mémoire cache à toutes les méthodes.
      Par exemple, la valeur suivante applique la mise en mémoire cache à toutes les méthodes de MyTimerBean1 et MyTimerBean2:
      MyApp1#MyEJBModule1#MyTimerBean1:MyApp2#MyEJBModule2#MyTimerBean2
  8. Cliquez sur OK.
  9. Redémarrez le serveur d'applications.

Exemple

Les exemples suivants présentent différentes façons d'implémenter la fonction de mise en mémoire cache pour les services du temporisateur. Supposez que vous ayez deux applications et que chaque application possède des temporisateurs. Les temporisateurs utilisent les noms J2EE suivants :
  • App1#EJBJar1.jar#EJBTimer1
  • App2#EJBJar2.jar#EJBTimer2
Les exemples présentent la valeur à utiliser pour la propriété personnalisée com.ibm.websphere.ejbcontainer.allowCachedTimerDataForname.
Exemple 1
Cet exemple applique la mise en mémoire cache à toutes les méthodes, pour tous les temporisateurs et toutes les applications.
Utilisez l'une des valeurs suivantes :
  • Utilisation des valeurs par défaut :
    *
  • Indication d'un entier :
    *=127
Exemple 2
Cet exemple applique la mise en mémoire cache à la méthode getInfo pour tous les temporisateurs et toutes les applications.
Utilisez la valeur suivante :
*=2
Exemple 3
Cet exemple applique la mise en mémoire cache aux méthodes getHandle et getNextTimeout de EJBTimer2.
Utilisez la valeur suivante :
App2#EJBJar2.jar#EJBTimer2=5
Exemple 4
Cet exemple applique la mise en mémoire cache à :
  • la méthode getInfo method on EJBTimer1
  • et aux méthodes getNextTimeout et getTimeRemaining de EJBTimer2
Utilisez la valeur suivante :
App1#EJBJar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12

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_timercache
Nom du fichier : tejb_timercache.html