Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » MobiLink - Serverinitiierte Synchronisation » Praktische Einführung in die serverinitiierte Synchronisation » Praktische Einführung: Konfigurieren der serverinitiierten Synchronisation unter Verwendung von Gateways

 

Lektion 5: Konfigurieren des Notifiers

In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Einrichten der konsolidierten Datenbank.

In dieser Lektion konfigurieren Sie drei Notifier-Ereignisse, um festzulegen, wie der Notifier Push-Anforderungen erstellt, die Anforderungen an den MobiLink Listener sendet und abgelaufene Anforderungen löscht.

Der Notifier erkennt Änderungen in der konsolidierten Datenbank und erstellt mithilfe des begin_poll-Ereignisses Push-Anforderungen. In diesem Fall füllt das begin_poll-Skript die PushRequest-Tabelle, sofern in der Tabelle Dealer Änderungen vorhanden sind und eine entfernte Datenbank nicht mehr auf dem neuesten Stand ist.

Das request_cursor-Skript ruft Push-Anforderungen ab. Jede Push-Anforderung legt fest, welche Informationen in der Nachricht gesendet werden und welche entfernte Datenbank die Informationen empfängt.

Das Notifier-Ereignis request_delete legt Bereinigungsvorgänge fest. Mit diesem Skript kann der Notifier automatisch implizit gelöschte und abgelaufene Anforderungen entfernen.

 Erstellen und Konfigurieren eines neuen Notifiers
  1. Erweitern Sie im linken Fensterausschnitt von Sybase Central unter MobiLink 12 sis_cons_project, Konsolidierte Datenbanken und dann sis_cons.

  2. Rechtsklicken Sie auf Benachrichtigung und klicken Sie dann auf Neu » Notifier.

  3. Im Feld Wie lautet der Name des neuen Notifiers? geben Sie CarDealerNotifier ein.

  4. Klicken Sie auf Fertig stellen.

  5. Geben Sie das begin_poll-Ereignisskript ein.

    1. Wählen Sie im rechten Fensterausschnitt CarDealerNotifier und klicken Sie dann auf Datei » Eigenschaften.

    2. Klicken Sie auf die Registerkarte Ereignisse.

    3. Wählen Sie begin_poll aus der Liste Ereignisse.

    4. Geben Sie die folgenden SQL-Anweisungen in das angezeigte Textfeld ein:



      --
      -- Insert the last consolidated database 
      -- modification date into @last_modified 
      --
      DECLARE @last_modified timestamp;
      SELECT MAX(last_modified) INTO @last_modified FROM Dealer;
      
      --
      -- Delete processed requests if the mluser is up-to-date
      --
      DELETE FROM PushRequest
          FROM PushRequest AS p, ml_user AS u, ml_subscription AS s
          WHERE p.status = 'processed'
              AND u.name = p.mluser
              AND u.user_id = s.user_id
              AND @last_modified <= GREATER(s.last_upload_time, s.last_download_time);
      
      --
      -- Insert new requests when a device is not up-to-date
      --
      INSERT INTO PushRequest(mluser, subject, content) 
      SELECT u.name, 'sync', 'ignored'
          FROM ml_user as u, ml_subscription as s
          WHERE u.name IN (SELECT name FROM ml_listening WHERE listening = 'y')
              AND u.user_id = s.user_id
              AND @last_modified > greater(s.last_upload_time, s.last_download_time)
              AND u.name NOT LIKE '%-dblsn'
              AND NOT EXISTS(SELECT * FROM PushRequest 
                  WHERE PushRequest.mluser = u.name
                      AND PushRequest.subject = 'sync')

      Im ersten größeren Abschnitt des begin_poll-Skripts werden verarbeitete Anforderungen aus der PushRequest-Tabelle entfernt, wenn ein Gerät aktualisiert wurde:

      @last_modified <= GREATER(s.last_upload_time, s.last_download_time)

      @last_modified ist das maximale Änderungsdatum in der Tabelle Dealer der konsolidierten Datenbank. Der Ausdruck 'greater(s.last_upload_time, s.last_download_time)' stellt den letzten Synchronisationszeitpunkt für eine entfernte Datenbank dar.

      Sie können Push-Anforderungen mit dem request_delete-Ereignis auch direkt löschen. Das begin_poll-Ereignis stellt in diesem Fall jedoch sicher, dass abgelaufene oder implizit gelöschte Anforderungen erst entfernt werden, nachdem eine entfernte Datenbank synchronisiert wurde.

      Der nächste Codeabschnitt prüft auf Änderungen in der Spalte last_modified der Tabelle Dealer und gibt eine Push-Anforderungen für alle aktiven MobiLink Listener aus (aufgelistet in der Tabelle ml_listening), die nicht aktualisiert wurden:

      @last_modified > GREATER(s.last_upload_time, s.last_download_time)

      Beim Füllen der Tabelle PushRequest setzt das begin_poll-Skript den Betreff auf 'sync'.

  6. Geben Sie das request_cursor-Skript ein.

    1. Klicken Sie auf request_cursor aus der Liste Ereignisse.

    2. Geben Sie die folgende SQL-Anweisung in das angezeigte Textfeld ein:

      SELECT
          p.req_id,
          'Default-DeviceTracker',
          p.subject,
          p.content,
          p.mluser,
          p.resend_interval,
          p.time_to_live
          FROM PushRequest AS p

      Die Tabelle PushRequest stellt dem request_cursor-Skript Zeilen bereit.

      Die Reihenfolge und die Werte in der request_cursor-Ergebnismenge sind wichtig. Der zweite Parameter legt z.B. das Standard-Gateway Default-DeviceTracker fest. Ein Device Tracking-Gateway protokolliert, wie Benutzer erreicht werden, und wählt automatisch UDP oder SMTP für die Verbindung mit entfernten Geräten aus.

  7. Geben Sie das request_delete-Skript ein.

    1. Klicken Sie auf request_delete aus der Liste Ereignisse.

    2. Geben Sie die folgende SQL-Anweisung in das angezeigte Textfeld ein:

      UPDATE PushRequest SET status='processed' WHERE req_id = ?

      Anstatt die Zeile zu löschen, aktualisiert dieses request_delete-Skript den Zustand einer Zeile in der PushRequest-Tabelle auf 'processed'.

  8. Klicken Sie auf OK, um die Notifier-Ereignisse zu speichern.

  9. Fahren Sie fort mit Lektion 6: Konfigurieren von Gateways und Netzbetreibern.

 Siehe auch