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
- Erstellen Sie eine neue Unternehmensanwendung mit einem EJB-Modul. Diese Anwendung enthält das EJB-Modul TaskHandler.
- 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
- 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". - 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
Nächste Schritte


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