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

SAP Sybase SQL Anywhere 16.0 » Mobile Link サーバ起動同期 » サーバ起動同期チュートリアル » チュートリアル:ゲートウェイを使用したサーバ起動同期の設定

 

レッスン 5:Notifier の設定

このレッスンでは、Notifier で Push 要求を作成し、要求を Mobile Link Listener に送信し、有効期限が切れた要求を削除する方法を定義する、3 つの Notifier イベントを設定します。

前提条件

このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:統合データベースのセットアップを参照してください。

このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:ゲートウェイを使用したサーバ起動同期の設定

内容と備考

Notifier は、統合データベース内の変更を検出し、begin_poll イベントを使用して Push 要求を作成します。この場合、変更が Dealer テーブルで発生し、リモートデータベースが最新でない場合、begin_poll スクリプトは、PushRequest テーブルを設定します。

request_cursor スクリプトは、Push 要求をフェッチします。各 Push 要求により、メッセージで送信される情報、情報を受信するリモートデータベースが決まります。

request_delete Notifier イベントはクリーンアップ処理を指定します。このスクリプトを使用すると、暗黙に除外された要求、期限が切れた要求が自動的に削除されます。

 ♦ タスク
  1. Sybase Central の左ウィンドウ枠の [Mobile Link 16] で、sis_cons_project[統合データベース]sis_cons の順に展開します。

  2. [通知] を右クリックし、[新規] » [Notifier] をクリックします。

  3. [新しい Notifier の名前を指定してください。] フィールドに CarDealerNotifier と入力します。

  4. [完了] をクリックします。

  5. begin_poll イベントスクリプトを入力します。

    1. 右ウィンドウ枠で CarDealerNotifier を選択し、[ファイル] » [プロパティ] をクリックします。

    2. [イベント] タブをクリックします。

    3. [イベント] リストから [begin_poll] を選択します。

    4. 表示されたテキストフィールドで次の SQL 文を入力します。



      --
      -- 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')

      begin_poll スクリプトの最初の主要セクションでは、デバイスが最新の状態でない場合は、PushRequest テーブルからの処理済み要求は削除されます。

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

      @last_modified は、統合データベース Dealer テーブルで最大の変更が行われた日です。式 greater( s.last_upload_time, s.last_download_time) は、リモートデータベースの最後の同期時間を表します。

      request_delete イベントを使用して、直接 Push 要求を削除することもできます。ただし、この場合に begin_poll イベントを使用すると、リモートデータベースが同期する前に、同期期限が切れた要求や暗黙的に除外された要求が削除されないようにすることができます。

      コードの次のセクションは、Dealer テーブルの last_modified カラムに加えられた変更をチェックし、ml_listening テーブルにリストされた最新の状態にないすべてのアクティブ Mobile Link Listener に対して Push 要求を発行します。

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

      PushRequest テーブルが移植されると、begin_poll スクリプトが件名を 'sync' に設定します。

  6. request_cursor スクリプトを入力します。

    1. [イベント] リストから [request_cursor] をクリックします。

    2. 表示されたテキストフィールドで次の SQL 文を入力します。

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

      PushRequest テーブルによって、request_cursor スクリプトにローが入力されます。

      順序と request_cursor 結果セットの値は重要です。たとえば、2 番目のパラメータは、デフォルトのゲートウェイ Default-DeviceTracker を定義します。デバイストラッキングゲートウェイは、ユーザへのアクセス方法を追跡し、UDP または SMTP を自動的に選択してリモートデバイスに接続します。

  7. request_delete スクリプトを入力します。

    1. [イベント] リストから [request_delete] をクリックします。

    2. 表示されたテキストフィールドで次の SQL 文を入力します。

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

    request_delete スクリプトは、ローを削除するのではなく、PushRequest テーブルのローのステータスを 'processed' に更新します。

  8. [OK] をクリックして Notifier イベントを保存します。

結果

3 つの Notifier イベントが定義されます。

 参照