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

SQL Anywhere 11.0.1 (日本語) » QAnywhere » QAnywhere リファレンス » QAnywhere のプロパティ » クライアント・メッセージ・ストア・プロパティ » カスタムのクライアント・メッセージ・ストア・プロパティ

 

カスタムのクライアント・メッセージ・ストア・プロパティ属性の使用

クライアント・メッセージ・ストア・プロパティには、ユーザが属性を定義できます。属性を定義するには、プロパティ名の後にドットを付け、その後に属性名を追加します。この機能の主な目的は、ユーザのネットワーク情報を転送ルールで使用できるようにすることです。

Ultra Light をクライアント・メッセージ・ストアとして使用する際のプロパティ属性は、限定的にサポートされています。Ultra Light メッセージ・ストアでは、事前定義の ias_Network プロパティのみをサポートしています。

例 (SQL Anywhere のみ)

次に、カスタムのクライアント・メッセージ・ストア・プロパティ属性を設定する簡単な例を示します。この例の Object プロパティは、Shape と Color の 2 つの属性を持ちます。Sharp 属性の値は Round、Color 属性の値は Blue です。

// C++ example.
mgr->setStringStoreProperty( "Object.Shape", "Round" );
mgr->setStringStoreProperty( "Object.Color", "Blue" );
// C# example.
mgr.SetStoreStringProperty( "Object.Shape", "Round" );
mgr.SetStringStoreProperty( "Object.Color", "Blue" );
// Java example
mgr.setStringStoreProperty( "Object.Shape", "Round" );
mgr.setStringStoreProperty( "Object.Color", "Blue" );
-- SQL example
BEGIN
    CALL ml_qa_setstoreproperty( 'Object.Shape', 'Round' );
    CALL ml_qa_setstoreproperty( 'Object.Color', 'Blue' );
    COMMIT;
END

すべてのクライアント・メッセージ・ストア・プロパティには、最初は値を持たない Type 属性があります。Type 属性の値は、別のプロパティの名前でなければなりません。プロパティの Type 属性を設定すると、そのプロパティは Type 属性の値に割り当てられているプロパティの属性を継承します。次の例の Object プロパティは、Circle プロパティの属性を継承しています。したがって、Object.Shape の値は Round、Object.Color の値は Blue になります。

// C++ example
QAManager qa_manager;
qa_manager->setStoreStringProperty( "Circle.Shape", "Round" );
qa_manager->setStoreStringProperty( "Circle.Color", "Blue" );
qa_manager->setStoreStringProperty( "Object.Type", "Circle" );
// C# example
QAManager qa_manager;
qa_manager.SetStringStoreProperty( "Circle.Shape", "Round" );
qa_manager.SetStringStoreProperty( "Circle.Color", "Blue" );
qa_manager.SetStringStoreProperty( "Object.Type", "Circle" );
// Java example
QAManager qa_manager;
qa_manager.setStringStoreProperty( "Circle.Shape", "Round" );
qa_manager.setStringStoreProperty( "Circle.Color", "Blue" );
qa_manager.setStringStoreProperty( "Object.Type", "Circle" );
-- SQL example
BEGIN
    CALL ml_qa_setstoreproperty( 'Circle.Shape', 'Round' );
    CALL ml_qa_setstoreproperty( 'Circle.Color', 'Blue' );
    CALL ml_qa_setstoreproperty( 'Object.Type', 'Circle');
    COMMIT;
END

次の C# の例は、メッセージ・ストア・プロパティを使用して、ユーザのネットワーク情報を転送ルールに指定する方法を示しています。

LAN、無線 LAN、無線 WAN の 3 つの接続オプションが用意されている Windows ラップトップがあるとします。LAN 経由でネットワークにアクセスするには、My LAN Card という名前のネットワーク・カードを使用します。無線 LAN 経由でネットワークにアクセスするには、My Wireless LAN Card という名前のネットワーク・カードを使用します。無線 WAN 経由でネットワークにアクセスするには、My Wireless WAN Card という名前のネットワーク・カードを使用します。

ここでは、LAN または無線 LAN を使用して接続している場合は、サーバにすべてのメッセージを送信し、無線 WAN を使用して接続している場合は、優先度の高いメッセージだけを送信するアプリケーションを開発します。優先度の高いメッセージとは、優先度が 7 以上のメッセージであると定義します。

まず、使用しているネットワーク・アダプタの名前を検索します。ネットワーク・アダプタの名前は、カードを装着し、ドライバをインストールした時点で決まります。特定のネットワーク・カードの名前を見つけるには、そのアダプタを介してネットワークに接続し、-vn オプションを指定して qaagent を実行します。QAnywhere Agent によって、次のようにネットワーク・アダプタ名が表示されます。

"Listener thread received message '[netstat] network-adapter-name !...'

次に、LAN、WLAN、WWAN の 3 種類のネットワーク・タイプに対応するクライアント・メッセージ・ストア・プロパティを定義し、各プロパティに Cost 属性を割り当てます。Cost 属性は 1 ~ 3 の値をとり、そのネットワークを使用したときに発生するコストを表します。1 が最も低いコストを表します。

QAManager qa_manager;
qa_manager.SetStoreProperty( "LAN.Cost", "1" );
qa_manager.SetStoreProperty( "WLAN.Cost", "2" );
qa_manager.SetStoreProperty( "WWAN.Cost", "3" );

次に、使用するネットワーク・カードごとに 1 つずつ、全部で 3 つのクライアント・メッセージ・ストア・プロパティを定義します。このプロパティ名はネットワーク・カード名と一致させます。ネットワークの種類を Type 属性に割り当てることで、各プロパティに適切なネットワーク種別を割り当てます。したがって、各プロパティは、それぞれのネットワークの種類の属性を継承します。

QAManager qa_manager;
qa_manager.SetStoreProperty( "My LAN Card.Type", "LAN" );
qa_manager.SetStoreProperty( "My Wireless LAN Card.Type", "WLAN" );
qa_manager.SetStoreProperty( "My Wireless WAN Card.Type", "WWAN" );

ネットワーク接続が確立されると、QAnywhere は、ias_Network プロパティの Adapter 属性に、My LAN Card、My Wireless LAN Card、または My Wireless WAN Card のいずれかを、使用しているネットワークに応じて自動的に設定します。同様に、ias_Network プロパティの Type 属性に、My LAN Card、My Wireless LAN Card、または My Wireless WAN Card のいずれかを自動的に設定して、使用しているネットワークの属性を ias_Network プロパティが継承するようにします。

最後に、次の転送ルールを作成します。

automatic=ias_Network.Cost < 3 or ias_Priority >= 7

転送ルールの詳細については、QAnywhere 転送ルールと削除ルールを参照してください。