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

SQL Anywhere 11.0.1 (日本語) » Ultra Light データベース管理とリファレンス » Mobile Link クライアントとしての Ultra Light » Ultra Light クライアント » Ultra Light での同期の設計

 

Ultra Light アプリケーションへの同期の追加

Ultra Light では、設定されている通信ストリーム (ネットワーク・プロトコル) で Mobile Link サーバとの特定の接続を開始することで同期が開始されます。ネットワークに直接接続している場合の同期のサポートに加えて、Palm OS デバイスでは HotSync 同期が、Windows Mobile デバイスでは ActiveSync 同期がサポートされます。

接続の定義

各 Ultra Light リモートは、ネットワーク・プロトコルによって Mobile Link サーバと同期します。ネットワーク・プロトコルは同期ストリーム・パラメータを使用して設定します。サポートされているネットワーク・プロトコルには、TCP/IP、HTTP、HTTPS、TLS があります。選択するプロトコルについて、Mobile Link サーバのホストやポートなどその他の必要な接続情報を定義するストリーム・パラメータを指定する必要があります。

また、user_name パラメータと version パラメータで Mobile Link のユーザ情報と同期スクリプトのバージョンを指定する必要もあります。

同期動作の定義

同期動作は、さまざまな同期パラメータを設定することで制御できます。パラメータの設定方法は、使用している Ultra Light インタフェースによって異なります。

検討する必要がある重要な動作は、次のとおりです。

  • 同期の方向   デフォルトでは、同期は双方向です。一方向だけの同期を行うには、upload_only パラメータまたは download_only パラメータを使用します。一方向の同期を実行することによって、同期に必要な時間を最小限に抑えることができます。また、ダウンロード専用同期では、Ultra Light データベースに対してあらかじめすべての変更をコミットする必要はありません。コミットしなかった変更は同期に含まれず、アップロードされません。したがって、不完全なトランザクションでも問題は起こりません。

    ダウンロード専用同期を使用する場合は、ダウンロードと重なっているローがローカル・レベルで変更されていないことを確認してください。ローカル・レベルでデータが変更されていると、SQLE_DOWNLOAD_CONFLICT エラーによって、Ultra Light アプリケーションの同期は失敗します。

  • 同期中の変更   アップロード・フェーズでは、Ultra Light アプリケーションは、読み込み専用として Ultra Light データベースにアクセスできます。ダウンロード・フェーズでは、読み込み/書き込みアクセスが許可されますが、アプリケーションがローを変更してからダウンロードによってこのローが変更されようとすると、ダウンロードが失敗し、ロールバックが行われます。disable_concurrency 同期パラメータを設定することで、同期中のデータへの同時アクセスを無効にすることができます。

♦  Ultra Light アプリケーションに同期コードを追加するには、次の手順に従います。
  1. 同期情報の構造体のフィールドとして、セッションに必要な同期パラメータとプロトコル・オプションを指定します。

    たとえば、C/C++ API を使用する場合は、ul_synch_info 構造体に適切な値を設定して、Ultra Light アプリケーションに同期を追加します。

    ul_synch_info info;       
           // define a sync structure named "info"
            ULEnableTcpipSynchronization( &sqlca );
           // use a TCP/IP stream
           conn->InitSynchInfo( &info );
           // initialize the structure
           info.stream = ULSocketStream();
           // specify the Socket Stream
           info.stream_parms= UL_TEXT( "host=myMLserver;port=2439"  );
           // set the MobiLink host information
           info.version = UL_TEXT( "custdb 11.0" );
           // set the MobiLink version information
           info.user_name = UL_TEXT( "50" );
           // set the MobiLink user name
           info.download_only =ul_true;
           // make the synchronization download-only
  2. 同期を初期化します。

    TCP/IP を使用して直接同期する場合は、API 固有の同期関数を呼び出します。これらの関数は、同期操作の成功または失敗を示すブール値を返します。同期が失敗した場合は、別の構造体で詳細なエラー・ステータスのフィールドを検証して、追加のエラー情報を取得できます。

    HotSync 同期の場合は、引数として ul_synch_info 構造体を指定して ULSetSynchInfo 関数を使用する必要があります。ul_synch_info 構造体を指定すると、以後の同期で使用できるように、この構造体が現在のデータベースにアタッチされます。

    ActiveSync 同期の場合は、ActiveSync プロバイダからの同期メッセージを取得し、DoSync 関数を使用して ULSynchronize を呼び出す必要があります。

  3. 同期の進行状況をユーザにレポートする場合は、observer コールバック関数を使用します。

    ヒント

    DLL が非常に大きいか、ネットワーク接続の信頼性が低いため、DLL を正常に実行できない場合は、再開可能なダウンロードを実装できます。失敗したダウンロードの処理失敗したダウンロードの再開を参照してください。

参照