Développement d'une tâche qui appelle un bean session
L'API du planificateur et l'API MBean WASScheduler prennent en charge différentes implémentations de l'interface TaskInfo, chacune permettant de planifier un type de travail particulier.
Pourquoi et quand exécuter cette tâche
Pour créer une tâche qui appelle une méthode sur un bean session TaskHandler, procédez comme suit :
Procédure
- Créez une nouvelle application d'entreprise avec un module EJB (Enterprise JavaBeans). Cette application héberge le module EJB TaskHandler.
- Créez un bean session sans état dans le module EJB qui implémente la méthode
process() dans l'interface distante com.ibm.websphere.scheduler.TaskHandler. Placez la logique métier à créer dans la méthode process(). La méthode process() est appelée lors du déclenchement de la tâche.
Les interfaces Home et Remote doivent être définies comme suit dans le bean descripteur de déploiement :
- com.ibm.websphere.scheduler.TaskHandlerHome
- com.ibm.websphere.scheduler.TaskHandler
- Créez une instance de l'interface BeanTaskInfo en utilisant l'exemple de méthode
de fabrique suivant. A l'aide d'un fichier JSP (JavaServer Pages, d'un servlet
ou d'un composant EJB, créez l'instance comme indiqué dans l'exemple de code suivant. Ce code doit coexister dans la même application que le module EJB TaskHandler précédemment créé :
// Assume that a scheduler has already been looked-up in JNDI. BeanTaskInfo taskInfo = (BeanTaskInfo) scheduler.createTaskInfo(BeanTaskInfo.class)
Vous pouvez également utiliser l'outil wsadmin pour créer l'instance comme indiqué dans l'exemple de script JACL suivant :
set taskHandlerHomeJNDIName ejb/MyTaskHandler # Map the JNDI name to the mbean name. The mbean name is formed by replacing the / in the jndi name # with . and prepending Scheduler_ regsub -all {/} $jndiName "." jndiName set mbeanName Scheduler_$jndiName puts "Looking-up Scheduler MBean $mbeanName" set sched [$AdminControl queryNames WebSphere:*,type=WASScheduler,name=$mbeanName] puts $sched # Get the ObjectName format of the Scheduler MBean set schedO [$AdminControl makeObjectName $sched] # Create a BeanTaskInfo object using invoke_jmx puts "Creating BeanTaskInfo" set params [java::new {java.lang.Object[]} 1] $params set 0 [java::field com.ibm.websphere.scheduler.BeanTaskInfo class] set sigs [java::new {java.lang.String[]} 1] $sigs set 0 java.lang.Class set ti [$AdminControl invoke_jmx $schedO createTaskInfo $params $sigs] set bti [java::cast com.ibm.websphere.scheduler.BeanTaskInfo $ti] puts "Created the BeanTaskInfo object: $bti"
Important : La création d'un objet BeanTaskInfo n'ajoute pas la tâche dans le magasin persistant. Elle crée plutôt une marque de réservation pour les données nécessaires. La tâche n'est ajoutée dans le magasin persistant que lorsque la méthode create() est appelée sur un planificateur, comme décrit dans la rubrique Soumission de tâches aux planificateurs. - Définissez des paramètres au niveau de l'objet BeanTaskInfo. Ces paramètres
définissent quel bean session est appelé et quand. L'interface TaskInfo contient plusieurs
méthodes set() qui permettent de contrôler l'exécution de la tâche, y compris l'heure d'exécution
et le type de travail qu'elle effectue.
Pour l'interface BeanTaskInfo, les noms JNDI (Java Naming and Directory Interface) TaskHandler (JNDI) ou TaskHandlerHome sont définis à l'aide de la méthode TaskHandler. Si vous utilisez l'API MBean WASScheduler pour définir le gestionnaire de tâche, le nom JNDI doit être le nom JNDI global complet.
L'interface TaskInfo indique d'autres points de contrôle, décrits dans la documentation sur les API. Définissez les paramètres à l'aide de la méthode d'API d'interface TaskInfo comme indiqué dans l'exemple de code suivant :
//create a date object which represents 30 seconds from now java.util.Date startDate = new java.util.Date(System.currentTimeMillis()+30000); //find the session bean to be called when the task starts Object o = new InitialContext().lookup("java:comp/env/ejb/MyTaskHandlerHome"); TaskHandlerHome home = (TaskHandlerHome)javax.rmi.PortableRemoteObject.narrow(o,TaskHandlerHome.class); //now set the start time and task handler to be called in the task info taskInfo.setTaskHandler(home); taskInfo.setStartTime(startDate);
Vous pouvez également définir des paramètres à l'aide de l'exemple de script JACL suivant :
# Setup the task puts "Setting up the task..." # Set the startTime if you want the task to run at a specific time, for example: $bti setStartTime [java::new {java.util.Date long} [java::call System currentTimeMillis]] # Set the StartTimeInterval so the task runs in 30 seconds from now $bti setStartTimeInterval 30seconds # Set JNDI name of the EJB which will get called when the task runs. Since there is no # application J2EE Context when the task is created by the MBean, this must be a # global JNDI name. $bti setTaskHandler $taskHandlerHomeJNDIName # Do not purge the task when it's complete $bti setAutoPurge false # Set the name of the task. This can be any string value. $bti setName Created_by_MBean # If the task needs to run with specific authorization you can set the tasks Authentication Alias # Authentication aliases are created using the Admin Console. # $bti setAuthenticationAlias {myRealm/myAlias} puts "Task setup completed."
Résultats
Que faire ensuite


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsch_schedulebtask
Nom du fichier : tsch_schedulebtask.html