Options de configuration des temporisateurs Entreprise JavaBeans persistants
Les temporisateurs EJB ne nécessitent aucune configuration outre le fait d'activer la fonction ejbPersistentTimer et de définir la source de données par défaut (dont l'ID est DefaultDataSource) afin de pointer vers une base de données. Des paramètres de configuration facultatifs sont disponibles pour contrôler les comportements, comme sélectionner une source de données différente, contrôler quand et avec quelle fréquence la base de données est interrogée pour rechercher les tâches du temporisateur persistant, et si et avec quelle fréquence les tâches du temporisateur ayant échoué ou ayant été annulées sont relancées.
La configuration du temporisateur EJB est spécifiée par un élément de configuration timerService facultatif. Les attributs de configuration des temporisateurs EJB persistants sont regroupés sous une configuration persistentExecutor. Par défaut, le service de temporisation EJB utilise une instance d'exécuteur persistant appelée defaultEJBPersistentTimerExecutor. Il est possible de personnaliser la configuration du temporisateur persistant EJB en configurant le service de temporisation afin d'utiliser une instance différente de l'exécuteur persistant. Cependant, pour personnaliser la configuration du temporisateur persistant EJB, il est préférable de substituer l'instance defaultEJBPersistentTimerExecutor afin d'hériter de ses valeurs par défaut.
<persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="50"/>
- Personnalisation de la librairie de base de données pour les tâches du temporisateur persistant
- Les tâches du temporisateur persistant EJB sont conservées dans une base de données. La configuration relative à la base de données est regroupée sous l'élément de configuration databaseStore. A moins qu'il ne soit configuré autrement, une instance de databaseStore appelée defaultDatabaseStore est utilisée pour les temporisateurs persistants EJB de même que pour d'autres fonctions du produit nécessitant une base de données. Exemple de substitution de l'instance defaultDatabaseStore :
<databaseStore id="defaultDatabaseStore" dataSourceRef="DB2DataSource" tablePrefix="MYTIMERS"/>
Exemple de configuration de l'instance defaultEJBPersistentTimerExecutor pour utiliser une instance databaseStore différente :<persistentExecutor id="defaultEJBPersistentTimerExecutor" taskStoreRef="MyDBStore"/> <databaseStore id="MyDBStore" dataSourceRef="DB2DataSource" tablePrefix="MYTIMERS"> <authData user="user1" password="password1"/> </databaseStore>
- Activation et désactivation de l'exécution des tâches du temporisateur persistant
Les tâches du temporisateur persistant EJB sont activées pour s'exécuter au moment de la validation de la transaction depuis laquelle elles sont planifiées. Pour empêcher les tâches du temporisateur persistant de s'exécuter, vous pouvez définir l'attribut enableTaskExecution sur la valeur false pour que le service de temporisation EJB continue d'enregistrer les tâches du temporisateur persistant dans la base de données mais sans les exécuter. Si la valeur est définie sur true, le service de temporisation EJB commencera à exécuter les temporisateurs qui étaient planifiés antérieurement ainsi que les nouveaux temporisateurs planifiés.
- Personnalisation de l'interrogation du stockage de persistance pour les tâches du temporisateur
- Une interrogation initiale unique du stockage de persistance est réalisée au démarrage pour localiser les tâches du temporisateur planifiées antérieurement. Lorsque des tâches sont planifiées, les informations sur la prochaine exécution planifiée sont conservées et gardées en mémoire, de sorte qu'il n'est pas nécessaire de continuer d'interroger le stockage de persistance. Ce comportement est idéal dans de nombreux cas, mais peut ne pas être toujours souhaitable.
- Si les tâches du temporisateur ont des dépendances externes auprès d'autres services, l'interrogation initiale peut avoir lieu trop tôt et les tâches du temporisateur peuvent échouer dû au fait que les services externes requis ne sont pas disponibles. Si cela se produit, un délai d'interrogation initial peut être utilisé pour repousser l'interrogation initiale d'une quantité de temps définie.
- Si le nombre de temporisateurs persistants EJB planifiés est élevé, il est possible que la mémoire consommée soit trop importante. Dans ce cas, vous pouvez configurer un intervalle d'interrogation pour interroger le stockage de persistance de façon périodique et rechercher uniquement les tâches de temporisateur que vous souhaitez exécuter durant l'intervalle jusqu'à la prochaine interrogation. La taille d'interrogation limite également le nombre de tâches de temporisateur pouvant être lues dans la base de données à chaque intervalle d'interrogation, ce qui peut entraîner des retards dans l'exécution des tâches.
Exemple de configuration :<persistentExecutor id="defaultEJBPersistentTimerExecutor" initialPollDelay="5m" pollInterval="10m" pollSize="200"/>
- Relances des tâches de temporisateur persistant ayant échoué ou ayant été annulées
Lorsque les exécutions du temporisateur persistant EJB échouent ou sont marquées pour être annulées, elles sont immédiatement relancées une fois. Si la relance immédiate échoue, elles sont relancées à un intervalle fixe jusqu'à ce que leur exécution aboutisse. Il est possible de limiter le nombre de tentatives de relance en spécifiant une limite de relance dans la configuration. Vous pouvez également contrôler l'intervalle entre les relances en spécifiant un intervalle de relance dans la configuration.
Exemple de configuration :<persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="100" retryInterval="2m"/>