Rational DOORS の OSLC DXL サービス

IBM® Rational® DOORS® では、OSLC Requirements Management (RM) 仕様バージョン 2 が実装され、HTTP プロトコルを使用して Rational DOORS DXL スクリプトを実行するために使用可能なサービスが組み込まれています。
Rational では、Open Services for Lifecycle Collaboration (OSLC) に基づくテクノロジーを採用して、Rational のツールおよび Rational 以外のツールとの統合を実現しています。Rational DOORS は、HTTP 経由で Rational DOORS の DXL スクリプトを実行するために使用可能な OSLC DXL サービスによって、標準の OSLC 機能を補完します。このサービスは、DXL スクリプト・ライブラリーの概念に基づいています。サービスを使用するための手順は、以下のとおりです。
  1. ユーザーが、必要な OSLC DXL スクリプトを探します。
  2. ユーザーが、スクリプトを呼び出して、必須パラメーターを OSLC コールに組み込みます。 DXL サービス URI の GET 要求を送信すると、応答に、作成者によって提供されたスクリプトのヘルプ情報が含まれます。DXL サービス URI の PUT 要求を、オプション・パラメーターを指定して送信すると、サービスが起動されます。
  3. スクリプトが相互協調処理サーバーで実行されます。
  4. 結果が通知されます。

サービス・インターフェース全体で公開される DXL スクリプトを決定可能な Rational DOORS 管理者が制御およびカスタマイズ可能なスクリプト。 管理者は、「runDXL」などの、潜在的なセキュリティー・リスクとみなされる可能性のある特定の機能を呼び出す機能をロックできます。

ユーザー・インターフェース・ウィジェットなどの特定の DXL はサポートされません。

サービス・ディスカバリーは OAuth によって保護されているため、OSLC DXL サービスを使用する場合は、ユーザー名とパスワードを入力して認証を行う必要があります。

OSLC DXL サービスを使用するための標準的な手順は、以下のとおりです。
  1. DXL スクリプトを作成します。
  2. DXL スクリプトをサービスとしてインストールします。
  3. サービス・ディスカバリーを使用してサービスを見つけます。
  4. このサービスを呼び出します。
  5. 応答から戻り値を抽出します。

  1. 以下のコードを含む、helloWorld.inc という名前の DXL ファイルを作成します。
    void getHelloString(string language)
    {
    	string hello = null
    
    	if ("French" == language)
    	{
    		hello = "Bonjour le monde"
    	} 
    	else if ("Finnish" == language)
    	{
    		hello = "Hei maailma"
    	} 
    	else if ("Latin" == language)
    	{
    		hello = "Ave mundi"
    	}
    	else 
    	{
    		hello = "Hello world"
    	}
    
    	setDxlServiceResult hello
        
    	print hello "¥n"
    }
  2. helloWorld.inc ファイルを /addins/services ディレクトリーにコピーします。このディレクトリーのデフォルトの場所は、C:¥Program Files (x86)¥IBM¥Rational¥DOORS¥9.5¥lib¥dxl¥addins¥services です。
  3. Rational DOORS クライアントを開いて、管理者としてログインします。
  4. DXL をインストールするには、DXL ウィンドウを開き、以下の DXL コードを入力します。 helloWorld という名前のサービスが作成されます。
    OSLCDXLService os = null
    string err = null
    
    string dxlCode = "#include <addins/services/helloWorld.inc>¥n"  
    err = addOrUpdateOSLCDXLService("helloWorld", "Hello world in several languages", dxlCode, "getHelloString")  
    if (!null err) 
    { 
    	print err 
    }  
    else  
    { 
    	print "Installed Service¥n" 
    }
  5. このサービスを呼び出します。 URI は、http://servername:portnumber/dwa/rm/dxl/helloWorld のようになります。
  6. accept および content-type の両ヘッダーを、application/rdf+xml と入力して設定します。
  7. 要求コンテンツが以下のコードのようになっていることを確認します。
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:doors="http://jazz.net/doors/xmlns/prod/jazz/doors/2.0/">
      <doors:Arguments>
      <doors:arguments>English</doors:arguments>
      </doors:Arguments>
    </rdf:RDF>
  8. 引数をサービスに渡すには、<doors:arguments> エレメントを使用します。 必須の引数を表すエレメント・テキストに文字列を入力します。 DXL サービスは、その文字列を、サービス DXL 関数で必要とされる引数に変換します。前の例では、English というパラメーターが 1 つ指定されているだけであり、このパラメーターは、getHelloString 関数に渡されます。DXL 関数で 2 つのパラメーターが予期されている場合には、要求は以下の例のようになります。
    <doors:Arguments>
    <doors:arguments>English,French</doors:arguments>
    </doors:Arguments>
    受信側の DXL サービスは、コンマ区切りのリストを EnglishFrench の別々の文字列に分割します。
  9. 文字列型以外の引数が使用されている場合には、DXL を使用してそれらの引数を適切な型に変換する必要があります。例えば、引数が整数の場合は、intOf 演算子を使用して、コンマ区切りのリストから抽出された文字列を int 型の値に変換することができます。その後、その値をメソッドに渡します。
    応答コンテンツは、以下のコードのようになっています。
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:doors="http://jazz.net/doors/xmlns/prod/jazz/doors/2.0/">
      <doors:DxlServiceResult rdf:about="http://my-desktop:8080/dwa/rm/dxl/helloWorld>
      <doors:result>Hello world</doors:result>
      </doors:DxlServiceResult>
    </rdf:RDF>

サービスは、マーシャルを一切実行しません。引数はストリング形式で指定します。 DXL スクリプトはそこから値を抽出し、必要な個々のパラメーターに変換します。


フィードバック