Eine Task entwickeln, die eine Session-Bean aufruft

Die API Scheduler und die MBean-API WASScheduler unterstützen unterschiedliche Implementierungen der Schnittstelle "TaskInfo", die beide für die Planung eines bestimmten Verarbeitungstyps verwendet werden können.

Informationen zu diesem Vorgang

Führen Sie die folgenden Schritte aus, um eine Methode in einer TaskHandler-Session-Bean aufzurufen.

Vorgehensweise

  1. Erstellen Sie eine neue Unternehmensanwendung mit einem EJB-Modul. Diese Anwendung enthält das EJB-Modul TaskHandler.
  2. Erstellen Sie eine Stateless-Session-Bean im EJB-Modul, die die Methode process() in der fernen Schnittstelle com.ibm.websphere.scheduler.TaskHandler implementiert. Definieren Sie die zu erstellende Geschäftslogik in der Methode process(). Die Methode process() wird bei der Ausführung der Task aufgerufen. Die Home- und Remote-Schnittstellen müssen im Implementierungsdeskriptor der Bean wie folgt definiert werden:
    • com.ibm.websphere.scheduler.TaskHandlerHome
    • com.ibm.websphere.scheduler.TaskHandler
  3. Erstellen Sie eine Instanz der Schnittstelle BeanTaskInfo auf der Basis der folgenden Factory-Beispielmethode. Erstellen Sie unter Verwendung einer JSP-Datei, eines Servlet oder einer EJB-Komponente die Instanz wie im folgenden Codebeispiel gezeigt. Dieser Code muss in derselben Anwendung wie das zuvor erstellte EJB-Modul TaskHandler enthalten sein:
    // Annehmen, dass bereits ein Scheduler in JNDI gesucht wurde
    BeanTaskInfo taskInfo = (BeanTaskInfo) scheduler.createTaskInfo(BeanTaskInfo.class)

    Sie können die Instanz auch mit dem Tool wsadmin erstellen, wie das folgende JACL-Scripting-Beispiel zeigt:

    set taskHandlerHomeJNDIName ejb/MyTaskHandler
    
    # Den JNDI-Namen dem MBean-Namen zuordnen. Der MBean-Name wird gebildet, indem der
    # Schrägstrich (/) im JNDI-Namen durch einen Punkt (.) ersetzt wird, dem
    # die Angabe Scheduler_ vorangestellt wird.
    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
    
    # ObjectName-Format der Scheduler-MBean abrufen
    set schedO [$AdminControl makeObjectName $sched]
    
    # BeanTaskInfo-Objekt mit invoke_jmx erstellen
    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"
    Wichtig: Wenn Sie ein BeanTaskInfo-Objekt erstellen, wird die Task nicht zum persistenten Speicher hinzugefügt. Stattdessen wird ein Platzhalter für die erforderlichen Daten erstellt. Die Task wird erst dann dem persistenten Speicher hinzugefügt, wenn die Methode create() für einen Scheduler aufgerufen wird. Diesbezügliche Anleitungen finden Sie im Artikel "Task an einen Scheduler übergeben".
  4. Definieren Sie die Parameter im Objekt BeanTaskInfo. Diese Parameter definieren, welche Session-Bean aufgerufen wird und wann. Die Schnittstelle TaskInfo enthält verschiedene set()-Methoden, mit denen Sie die Ausführung der Task steuern können. Dazu gehört unter anderem, wann die Task gestartet wird und welche Aufgaben die Task ausgeführt, nachdem sie gestartet wurde.

    Die Schnittstelle BeanTaskInfo setzt voraus, dass mit der Methode setTaskHandler der JNDI-Name für TaskHandler oder TaskHandlerHome gesetzt wird. Wenn Sie die MBean-API WASScheduler für die Definition des Task-Handlers verwenden, muss der JNDI-Name der vollständig qualifizierte globale JNDI-Name sein.

    Die Schnittstelle TaskInfo gibt zusätzliche Steuerpunkte an, die in der API-Dokumentation dokumentiert sind. Definieren Sie anhand des folgenden Codebeispiels die Parameter mit der API-Methode der Schnittstelle TaskInfo:

    //Datumsobjekt für 30 Sekunden ab jetzt erstellen
    java.util.Date startDate = new java.util.Date(System.currentTimeMillis()+30000);
    
    //Beim Starten der Task aufzurufende Session-Bean suchen
    Object o = new InitialContext().lookup("java:comp/env/ejb/MyTaskHandlerHome");
    TaskHandlerHome home = (TaskHandlerHome)javax.rmi.PortableRemoteObject.narrow(o,TaskHandlerHome.class);
    
    //Startzeit und Task-Handler festlegen, die in TaskInfo abgerufen werden sollen
    taskInfo.setTaskHandler(home);
    taskInfo.setStartTime(startDate);

    Sie können die Parameter auch mit dem folgenden JACL-Scripting-Beispiel definieren:

    # Task konfigurieren
    puts "Setting up the task..."
    # Startzeit festlegen, wenn die Task zu einem bestimmten Zeitpunkt ausgeführt werden soll, z. B.:
    $bti setStartTime [java::new {java.util.Date long} [java::call System currentTimeMillis]]
    
    # Startintervall so festlegen, dass die Task in 30 Sekunden ab jetzt ausgeführt wird
    $bti setStartTimeInterval 30seconds
    
    # JNDI-Namen der EJB festlegen, die bei der Ausführung der Task aufgerufen wird. Da kein
    # J2EE-Kontext für die Anwendung vorhanden ist, wenn die Task von der MBean erstellt
    # wird, muss ein globaler JNDI-Name verwendet werden.
    $bti setTaskHandler $taskHandlerHomeJNDIName
    
    # Task nach Abschluss nicht löschen
    $bti setAutoPurge false
    
    # Namen der Task festlegen. Ein beliebiger Zeichenfolgewert kann verwendet werden.
    $bti setName Created_by_MBean
    
    # Wenn die Task mit einer speziellen Berechtigung ausgeführt werden muss, können Sie einen
    # Authentifizierungsalias für die Tasks festlegen. Authentifizierungsaliasnamen werden
    # in der Administrationskonsole erstellt.
    # $bti setAuthenticationAlias {myRealm/myAlias}
    
    puts "Task setup completed."

Ergebnisse

Es wurde ein BeanTaskInfo-Objekt erstellt, das alle relevanten Daten für den Aufruf einer EJB-Methode enthält.

Nächste Schritte

Übergeben Sie die Task zur Erstellung an einen Scheduler.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsch_schedulebtask
Dateiname:tsch_schedulebtask.html