サーバーからクライアントへのデータ変更のプッシュ

サーバーサイドのデータ変更をクライアントにプッシュするには、flex.data.DataServiceTransaction クラスを使用します。このクラスの詳細については、公開されている『Flex データサービス Javadoc マニュアル』を参照してください。DataServiceTransaction クラスのインスタンスは、Data Management Service によって管理されているオブジェクトの状態を変更する処理ごとに、作成されます。このオブジェクトをサーバーサイドコードから使用し、DataService コンポーネントの autoSyncEnabled プロパティが true に設定されたクライアントに格納されている、管理されたデータに、変更をプッシュできます。

変更を sync メソッドの中から追加した場合は、Data Management Service によって DataServiceTransaction クラスのインスタンスが作成されます。そのため、このクラスの静的な getCurrentDataServiceTransaction() メソッドを呼び出し、その次に updateItem()deleteItem()、または createItem() メソッドを呼び出して、追加の変更をトリガすることができます。これらのメソッドは、このトランザクションで永続化が完了した変更を適用する場合、または永続化しようとしている変更を適用する場合に、呼び出してください。現在のトランザクションがロールバックされた場合、これらの変更はクライアントにプッシュされません。

トランザクションをロールバックするには、通常の J2EE アプリケーションのように javax.transaction.UserTransaction インスタンスをロールバック済みとしてマークします。または、DataServiceTransaction の setRollbackOnly() を呼び出すこともできます。

DataServiceTransaction クラスによって、スレッドローカル状態にある現在のトランザクションにアクセスでき、トランザクションの完了時にクライアントにプッシュされるメッセージが保持されます。また、このクラスを使用して、トランザクションの完了前および完了後の同期イベントを登録します。

DataServiceTransaction インスタンスはそれぞれスレッドローカル状態に格納され、一度に 1 つのスレッドだけで処理されるものと見なされます。このインスタンスはスレッドセーフではありません。

DataServiceTransaction クラスをアセンブラの sync、update、create、または delete メソッドの中から使用する場合は、このトランザクションにおいて既に変更途中のアイテムに対する変更を指定することは避けてください。そのような変更を指定した場合、現在アクティブな変更が変えられるのではなく、そのオブジェクトに対する追加の変更がキューに置かれるため、競合が生じる可能性があります。代わりに、変更済みプロパティ値を使用して NewVersion インスタンスを更新し、新しく変更されたすべてのプロパティ値を、送信された変更済みプロパティのリストに追加してください。たとえば、インスタンスに対するすべての更新が完了した後に、そのインスタンスの versionId を変更する必要がある場合は、versionId を変更リストに追加でき、newVersion インスタンスで versionId の値を更新することもできます。

ChangeObject インスタンスを使用している場合は、addChangedPropertyName() メソッドを呼び出して versionId プロパティを追加します。updateItem() メソッドを使用している場合は、単にそのプロパティを、updateItem() メソッドに提供されたリストに追加します。

DataServiceTransaction.refreshFill() メソッドを使用すると、アセンブラの sync メソッドの一部として、または他のサーバーサイドコードから、サーバーコードの fill または一致する fill のセットを手動で更新できます。このメソッドでは fill パラメータのリストを指定します。このリストを使用して、アクティブなクライアントによって現在キャッシュされている、一致する fill のリストが作成されます。このリストには null を指定できます。この場合は、その宛先のすべての fill が一致することになります。リストが null ではない場合、refreshFill() では、次の表に示す規則に基づいてすべてのスロットが一致した場合に、同じ数のパラメータを持つクライアントによる fill について、比較が実行されます。

規則

null 値

そのスロットを無条件で比較します。

クラス値

その種類のそのスロットにあるパラメータを比較します。

上記以外の値

equals メソッドを使用して fill パラメータを比較します。

メモ

 

Flex データサービス Java API を使用するコードをコンパイルするときは、"messaging.jar" ファイルと "flex-messaging-common.jar" ファイルをクラスパスにインクルードする必要があります。


Flex 2.01