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
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é.

- 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.
Procédure
Exemple
- App1#EJBJar1.jar#EJBTimer1
- App2#EJBJar2.jar#EJBTimer2
- 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
- Utilisation des valeurs par défaut :
- 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
App1#EJBJar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12