Eine Task entwickeln, die eine JMS-Nachricht sendet

Sie können eine Task erstellen, mit der eine JMS-Nachricht (Java Message Service) an eine Warteschlange oder ein Topic gesendet wird. Die API Scheduler und die MBean-API WASScheduler unterstützen unterschiedliche Implementierungen der Schnittstelle "TaskInfo", die beide für die Planung eines bestimmten Typs von Arbeit verwendet werden können.

Informationen zu diesem Vorgang

Führen Sie die folgenden Schritte aus, um eine Task zu erstellen, die eine JMS-Nachricht (Java Message Service) an eine Warteschlange oder ein Topic sendet.

Vorgehensweise

  1. Erstellen Sie mit der Factory-Methode "Scheduler.createTaskInfo()" eine Instanz der Schnittstelle "MessageTaskInfo". Erstellen Sie die Instanz mit einer JSP-Datei, einem Servlet oder einem EJB-Container. Beispiel:
    //Zu verwendenden Scheduler suchen
    Scheduler scheduler = (Scheduler)new InitialContext.lookup("java:comp/env/Scheduler");
    
    MessageTaskInfo taskInfo = (MessageTaskInfo) scheduler.createTaskInfo(MessageTaskInfo.class);
    Sie können die Instanz auch, wie im folgenden Jacl-Scripting-Beispiel gezeigt, mit dem Tool wsadmin erstellen:
     # Beispiel für das Erstellen einer Task mit dem Task-Typ MessageTaskInfo
    # MBean mit den folgenden Parametern aufrufen:
    #    <scheduler jndiName>     = JNDI-Name der Scheduler-Ressource, z. B.
    #                                     scheduler/myScheduler
    #    <JNDI name of the QCF>   = Der globale JNDI-Name der Warteschlangenverbindungsfactory.
    #    <JNDI name of the Queue> = Der globale JNDI-Name des Warteschlangenziels.
    
    set jndiName [lindex $argv 0]
    set jndiName_QCF [lindex $argv 1]
    set jndiName_Q [lindex $argv 2]
    
    # 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 "." jndiNameset 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]
    
    # MessageTaskInfo-Objekt mit invoke_jmx erstellen
    puts "Creating MessageTaskInfo"
    set params [java::new {java.lang.Object[]} 1]
    $params set 0 [java::field com.ibm.websphere.scheduler.MessageTaskInfo 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 mti [java::cast com.ibm.websphere.scheduler.MessageTaskInfo  $ti]
    puts "Created the MessageTaskInfo object: $mti"
    Achtung: Wenn Sie ein MessageTaskInfo-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 übertragen".
  2. Parameter für das Objekt "MessageTaskInfo" definieren. 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 "TaskInfo" legt zusätzliche Verhaltenseinstellungen fest, die in der API-Dokumentation beschrieben sind. Erstellen Sie die Instanz mit einer JSP-Datei, einem Servlet oder einem EJB-Container. Beispiel:

    //Datumsobjekt für 30 Sekunden ab sofort erstellen
    java.util.Date startDate = new java.util.Date(System.currentTimeMillis()+30000);
    
    
    //Jetzt die Startzeit und die JNDI-Namen für die Verbindungsfactory für Warteschlangen und die Warteschlange setzen
    taskInfo.setConnectionFactoryJndiName("jms/MyQueueConnectionFactory");
    taskInfo.setDestination("jms/MyQueue");
    taskInfo.setStartTime(startDate);
    Sie können die Instanz auch, wie im folgenden Jacl-Scripting-Beispiel gezeigt, mit dem Tool wsadmin erstellen:
    # Task konfigurieren
    puts "Setting up the task..."
    # Startzeit festlegen, wenn die Task zu einem bestimmten Zeitpunkt ausgeführt werden soll, z. B.:
    $mti setStartTime [java::new {java.util.Date long} [java::call System currentTimeMillis]]
    
    # Startintervall so festlegen, dass die Task ab jetzt alle 30 Sekunden ausgeführt wird
    $mti setStartTimeInterval 30seconds
    
    # Globale JNDI-Namen für Verbindungsfactory und Warteschlange angeben, an die die
    # Nachricht gesendet werden soll.
    $mti setConnectionFactoryJndiName $jndiName_QCF
    $mti setDestinationJndiName $jndiName_Q
    
    # Nachricht festlegen
    $mti setMessageData "Test Message"
    
    # Task nach Abschluss nicht löschen
    $mti setAutoPurge false
    
    # Namen der Task festlegen. Es kann jeder Zeichenfolgewert verwendet werden.
    $mti 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.
    # $mti setAuthenticationAlias {myRealm/myAlias}
    
    puts "Task setup completed."

Ergebnisse

Es wurde ein MessageTaskInfo-Objekt erstellt, das alle relevanten Daten für eine Task enthält, die eine JMS-Nachricht sendet.

Nächste Schritte

Übergeben Sie die Task zur Erstellung an einen Scheduler. Diesbezügliche Anweisungen finden Sie im Artikel "Task an einen Scheduler übergeben".

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_schedulemtask
Dateiname:tsch_schedulemtask.html