ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLinkソリューション・ガイド
12c (12.1.3)
E57549-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

21 TopLinkライブ・データ問合せを使用したデータの更新

この章では、TopLinkのライブ・データ問合せ(ライブ問合せ)を使用して、バッキング・データ・ストアで変更を監視し、その後クライアント・アプリケーションに非同期的に変更されたすべてのデータを送信する方法を説明します。

この章の内容は次のとおりです。

ユース・ケース

TopLinkが有効なアプリケーションで問合せを実行すると、バッキング・データ・ストアのデータを追加、変更または削除できます。問合せを再実行せずに、更新に関する情報がアプリケーションで受信されることが重要です。

解決方法

TopLinkのライブ問合せをOracle Database連続問合せ通知(CQN)とともに使用して、データの変更をクライアントに通知するためにマージ・トラッキングをキャッシュします。

コンポーネント

Oracle WebLogic Server WebソケットでTopLinkライブ問合せを使用する例については、http://www.oracle.com/toplink/tlds.live.wsの例を参照してください。

21.1 ソリューションの概要

TopLinkのライブ問合せをOracle Database連続問合せ通知(CQN)とともに使用すると、バッキング・データ・ストアの変更をクライアント・アプリケーションに非同期的に通知するためにTopLinkでマージ・トラッキングをキャッシュできます。データベース(およびオプションでキャッシュ)では、問合せの基準と一致するデータ変更が監視され、それらの変更はクライアントに返されます。

21.1.1 Oracle Database CQNの概要およびTopLinkのキャッシュのトラッキング

CQNは、アプリケーションが変更通知をデータベースに対して登録することを許可するOracle Databaseの機能です。問合せを登録すると、問合せの結果がトランザクションによって変更されると、アプリケーションにデータベースから通知されるようにできます。この種類のCQN通知は、問合せ結果変更通知(QRCN)といいます。


注意:

11g以前のOracle Databaseリリースでは、変更通知機能はデータベース変更通知(DCN)と呼ばれていました。リリース11gでは、Oracle Database連続問合せ通知(CQN)に名前が変更されています。


TopLinkライブ問合せではQRCNを利用し、問合せに指定した基準と一致するデータに対する変更が、クライアント通知の実装を介してアプリケーションに返されるようになっています。


注意:

最初の問合せの実行と変更結果へのサブスクライブは、2つの操作で行う必要があります。


CQNおよびQRCNの詳細は、『Oracle Database開発者ガイド』の連続問合せ通知(CQN)の使用に関する項を参照してください。特に、問合せ結果変更通知(QRCN)に関する項を参照してください。

キャッシュに対するサブスクリプションはoracle.toplink.dataservices.livedata.cache.CacheSubscriptionProviderクラスを介して提供されます。

21.1.2 TopLinkライブ・データ問合せの作成および使用

問合せに名前を付け、データベース(オプションでキャッシュ)のイベントに基づいて通知をサブスクライブし、プロパティ・オブジェクトを介してサブスクリプションを構成します。

ライブ・データ問合せを設定する主な手順は次のとおりです。

  • ClientNotifierインタフェースの実装を定義する。

  • QRCNサブスクリプションを構成するプロパティ・オブジェクトを作成する。

  • QRCN通知をサブスクライブする。

  • 使用する名前付き問合せの名前を指定する。QRCNによってサポートされている問合せの種類のガイドラインについては、『Oracle Database開発者ガイド』の連続問合せ通知(CQN)の使用に関する項を参照してください。

  • 問合せのパラメータを指定します。

  • サブスクリプションを作成します。

  • サブスクリプションにClientNotifierの実装を追加します。

  • ClientNotifierの実装を作成および追加します。

通知をサブスクライブするには、データベースのイベントに基づくのみでなく、キャッシュ内のイベントに基づいて通知をサブスクライブすることも可能です。キャッシュ・サブスクリプションは、データベース・サブスクリプションで使用しているのと同じ、問合せ、パラメータおよびClientNotifierを使用して作成します。

21.2 ソリューションの実装

この項では、データ変更をクライアントに通知するTopLinkライブ問合せを設定および使用する次のタスクについて説明します。

21.2.1 手順1: 前提条件

ライブ問合せを使用するには、次が必要です。

  • Oracle Database 11.2.0.2以上

  • TopLink 12c (12.1.2.0.0)以上。

21.2.2 手順2: データベース権限の付与

他の許可に加え、データベース・ユーザーには、CHANGE NOTIFICATION権限が付与されている必要があります。これを実行するには、SYSなどのDBA権限を持っているか、データベース管理者にそれを適用してもらう必要があります。

grant change notification to user

Oracle Databaseの権限の付与の詳細は『Oracle Databaseセキュリティ・ガイド』の権限とロール認可の構成に関する項を参照してください。

21.2.3 手順3: ライブ・データ問合せおよびCQNサブスクリプションの作成

例21-1の例に従って、ライブ・データ問合せおよびCQNサブスクリプションを作成します。この例では、特定のPersistenceContextでCQN通知のサブスクリプションを定義するクラス定義の部分を示します。


注意:

完全なクラス定義には、クライアントに通知するコード(およびオプションでロギング)も含まれます。これについては、この章では説明しません。


例21-1 TopLinkライブ・データ問合せのCQN通知へのサブスクリプション

...
// Import TopLink Live Data classes
import oracle.toplink.dataservices.DataServicePersistenceContext;
import oracle.toplink.dataservices.livedata.Subscription;
import oracle.toplink.dataservices.livedata.SubscriptionFactory;
import oracle.toplink.dataservices.livedata.cache.CacheSubscriptionProvider;
import oracle.toplink.dataservices.livedata.notification.ClientNotifier;
import oracle.toplink.dataservices.livedata.notification.Notification;
import oracle.toplink.dataservices.livedata.notification.NotificationType;
import oracle.toplink.dataservices.livedata.qcn.QCNSubscriptionProvider;
import weblogic.websocket.WebSocketConnection;
...
// Client notifier code---
class Notifier implements ClientNotifier {
// The implementation of the client notifier)
...
}
 
// Notification subscription code---

// The name of the query.
private String queryName;

// The parameters associated with the query. 
private Map<String, String> parameters;

// The persistence context that this CQN notifier listens to.
private DataServicePersistenceContext persistenceContext;
 
 // Returns the query parameters associated with this notifer.
Map<String, String> getParameters() {
return this.parameters;
}

// Returns the name of the query that this notifier listens to.
String getQueryName() {
return this.queryName;
}
 
// Subscribe with the associated PersistenceContext, to listen to query result change events.
public void subscribe() {

   // properties object for configuation of the subscription
   Map<String, Object> properties = new HashMap<String, Object>();

   // subscribe to notifcation through Oracle CQN 
   properties.put(SubscriptionFactory.SUBSCRIPTION_TYPE, QCNSubscriptionProvider.QCN);
   properties.put(CacheSubscriptionProvider.QUERY_PARAMETERS, this.parameters);
   properties.put(CacheSubscriptionProvider.QUERY_NAME, this.queryName);
   Subscription subscription = this.persistenceContext.getSubscriptionFactory().
                                    getOrCreateSubscription(this.queryName, properties);
   // Register for QRCN subscription
   subscription.addClientNotifier(this);

   properties.put(SubscriptionFactory.SUBSCRIPTION_TYPE, CacheSubscriptionProvider.CACHE);
   subscription = this.persistenceContext.getSubscriptionFactory().
                       getOrCreateSubscription(this.queryName, properties);
   // Register for cache subscription
   subscription.addClientNotifier(this);
}
 
public String toString() {
return "Notifier [query = " + this.queryName + "]";
}
 
// Unsubscribe from the PersistenceContext listening to query result change events.
 */
public void unsubscribe() {
   Map<String, Object> properties = new HashMap<String, Object>();
   properties.put(SubscriptionFactory.SUBSCRIPTION_TYPE, QCNSubscriptionProvider.QCN);
   properties.put(CacheSubscriptionProvider.QUERY_PARAMETERS, this.parameters);
   properties.put(CacheSubscriptionProvider.QUERY_NAME, this.queryName);
   Subscription subscription = this.persistenceContext.getSubscriptionFactory().getSubscription(this.queryName, this.parameters);
   subscription.removeClientNotifier(this);
}
// Update the object with changes 
public void updatedObject(Object updatedObject) {
sendMessage(updatedObject, NotificationType.UPDATE);
}

21.3 その他の参考資料

TopLinkライブ・データ問合せの詳細は、次を参照してください。