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

  1. Créez une nouvelle application d'entreprise avec un module EJB (Enterprise JavaBeans). Cette application héberge le module EJB TaskHandler.
  2. 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
  3. 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.
  4. 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

Un objet BeanTaskInfo a été créé. Il contient toutes les données appropriées pour appeler une méthode EJB.

Que faire ensuite

Envoyez la tâche à un planificateur pour la créer.

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=tsch_schedulebtask
Nom du fichier : tsch_schedulebtask.html