Oracle SALTでは、 Oracle Tuxedoサービス・メタデータ・リポジトリを利用して、Oracle Tuxedoの従来のサービスとOracle SALTプロキシ・サービスの両方のサービス契約情報を定義します。リストされたすべてのOracle Tuxedoサービスのサービス規約情報を、ローカルOracle Tuxedoドメインによって提供されるOracle Tuxedoサービス・メタデータ・リポジトリ・システム・サービスにアクセスして取得します。通常は、次に示すように、SALTから TMMETADATA
システムを呼び出します。
GWWS
サーバーの実行時間の時Oracle Tuxedoサービス・メタデータ・リポジトリを呼び出し、適切な時間に必要なOracle Tuxedoサービス定義を取得します。
Oracle Tuxedoサービス・メタデータ・リポジトリを呼び出し、必要なOracle Tuxedoサービス定義を取得して、それをWSDL記述に変換します。
次のトピックでは、SALT特有のOracle Tuxedoサービス・メタデータ・リポジトリ・キーワードとパラメータの使用について説明します。
表3-1では、SALTで使用および解釈されるOracle Tuxedoサービス・メタデータ・リポジトリのサービス・レベル・キーワードを示します。
注: | リストされていないメタデータ・リポジトリのサービス・レベル・キーワードは、Oracle SALTとは関係性がなく、SALTコンポーネントがOracle Tuxedoサービス・メタデータ・リポジトリをロードするときに無視されます。 |
Oracle Tuxedoサービス・メタデータ・リポジトリでは、パラメータはOracle Tuxedoサービスの型付きバッファ内にカプセル化されたサブ要素として解釈されます。パラメータごとに、データ型、バッファ内の出現回数、サイズ制限、その他のOracle Tuxedoに固有の制限を設定できます。次に注意してください。
バッファの個々のパラメータがVIEW/VIEW32構造のメンバー1つを表します。
バッファの個々のパラメータが、バッファ内に存在する可能性のあるFML/FML32フィールド要素を表します。
Oracle Tuxedoによってバッファ全体が1つのデータのように扱われます。バッファに対して最大で1つのパラメータを設定することが認められており、制約ファセット(バッファ・サイズのしきい値など)を定義できます。
パラメータを使用してバッファ型の詳細について説明することができます。
表3-2では、SALTで使用および解釈されるOracle Tuxedoサービス・メタデータ・リポジトリのパラメータ・レベル・キーワードを示します。
注: | リストされていないメタデータ・リポジトリのパラメータ・レベル・キーワードは、Oracle SALTとは関係性がなく、SALTコンポーネントがOracle Tuxedoサービス・メタデータ・リポジトリをロードするときに無視されます。 |
|
|||
|
|||
この項では、ネイティブOracle TuxedoサービスをWebサービスとして公開するために必要な構成タスクと省略可能な構成タスクについて説明します。
1つまたは複数のHTTP/Sエンドポイントを介して一連のOracle TuxedoサービスをWebサービスとして公開するには、ネイティブWSDF
を定義する必要があります。
各ネイティブWSDF
は、一意のWSDF
名で定義する必要があります。WSDF
では、Webサービス・アプリケーションの詳細(SOAPプロトコルの詳細、Webサービス操作として公開するOracle Tuxedoサービスの一覧など)に対して1つまたは複数の<WSBinding
>要素を定義できます。
mapsoapheader
属性は、SOAPヘッダーを構成するために使用します。これにより、SOAPヘッダーを表すFML32フィールドが定義されます。これはTA_WS_SOAP_HEADER
STRINGタイプです。
注: | mapsoapheader 属性は、Oracle SALTに同梱されているwssoapflds.h ファイルで定義されます。 |
リスト3-1では、SOAPヘッダーの定義の例を示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Service name="toupper">
<Property name="mapsoapheader" value="true" />
</Service>
</Servicegroup>
....
</WSBinding>
</Definition>
mapsoapheader
属性のデフォルト値は「false」で、これは、GWWSがSOAPヘッダーとFMLフィールド間のマッピングを実行しないことを示します。
mapsoapheader
をtrue
に設定すると、着信サービスおよび発信サービスのマッピング動作は次のようになります。
着信サービスでは、リスト3-2のGWWSのSoapヘッダーの変換GWWSのSoapヘッダーの変換GWWSのSoapヘッダーの変換に示すように、GWWSはSoapヘッダーを変換します。
<cup:SoapHeader xmlns:cup='http://www.chinaunionpay.com/soa/esb/message/1_0'>
<cup:Head>
<cup:Name>xxx</cup:Name>
<cup:Value>xxx</cup:Value>
</cup:Head>
</cup:SoapHeader>
STRINGバッファは、TA_WS_SOAP_HEADER
フィールドに割り当てられ、ターゲットFML32バッファを挿入します。ターゲット・バッファ・タイプがFML32ではない場合、変換は有効になりません。
発信サービスでは、GWWSは、リクエスト・バッファからTA_WS_SOAP_HEADER
を受け取り、SOAPパッケージの構成時にSOAPヘッダーにそれを配置します。
個々のWSBindingオブジェクトは、<WSBinding
>要素を使用して定義します。個々のWSBindingオブジェクトは、WSDF
内で一意のWSBinding IDを使用して定義する必要があります。WSBinding IDは、GWWSによって使用されるSALTDEPLOY
ファイルの参照に必要なインジケータです。
個々のWSBindingオブジェクトは、<SOAP
>サブ要素を使用してSOAPプロトコルの詳細に関連付けることができます。WSBindingオブジェクトには、デフォルトではSOAP 1.1およびdocument/literal
スタイルのSOAPメッセージが適用されます。
リスト3-3では、<SOAP
>サブ要素を使用してSOAPプロトコルの詳細を再定義する方法を示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Service name="toupper" />
<Service name="tolower" />
</Servicegroup>
<SOAP version=”1.2” style=”rpc” use=”encoded”>
<AccessingPoints>
...
</AccessingPoints>
</SOAP>
</WSBinding>
</Definition>
<SOAP
>要素内で、一連のアクセス・エンドポイントを指定できます。対応するGWWS
サーバーは、これらのアクセス・エンドポイントのURL値を使用してリスニングHTTP/Sプロトコル・ポートを作成します。着信WSBindingオブジェクトに対して各GWWS
サーバーでHTTPおよびHTTPSエンドポイントを最大で1つ指定することをお薦めします。
個々のWSBindingオブジェクトは、<Servicegroup
>サブ要素を使用してOracle Tuxedoサービスのグループに定義する必要があります。<Servicegroup
>の下の各<Service
>要素は、WebサービスのクライアントからアクセスできるOracle Tuxedoサービスを表します。
個々のサービス・オブジェクトは、<Service
>要素を使用して定義します。各サービスは、公開されたOracle Tuxedoサービスを示すように「name」
属性で指定する必要があります。通常、Oracle Tuxedoサービス・メタデータ・リポジトリからOracle Tuxedoサービス規約情報を取得するには、「name」
値がキー値として使用されます。
リスト3-4では、WSBindingのサービス・グループを定義する方法を示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Service name="toupper" />
<Service name="tolower" />
</Servicegroup>
...
</WSBinding>
</Definition>
SOAP XMLペイロードおよびOracle Tuxedo型付きバッファの変換ルーチンをカスタマイズするために独自のプラグイン機能を作成できます。詳細は、Oracle SALT Webサービスのプログラミングの Oracle SALTプラグインの使用に関する項、および「プラグイン・ライブラリの構成」を参照してください。
プラグインを作成および構成すると、<service>要素を使用してそれを参照して、そのサービスのユーザー定義データ・マッピング・ルールを指定できます。<Msghandler>
要素は、メッセージ・レベル(<Input>
、<Output>
または<Fault>
)で定義して、メッセージを変換するために「P_CUSTOM_TYPE」
カテゴリ・プラグインのどの実装を使用する必要があるかについて指定できます。<Msghandler>
要素の内容はプラグインの名前です。
リスト3-5では、入力を変換するために「MBCONV」
カスタム・プラグインを使用するサービスと、出力を変換するために「XMLCONV」
カスタム・プラグインを使用するサービスを示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Service name="toupper" >
<Input>
<Msghandler>MBCONV</Msghandler>
</Input>
<Output>
<Msghandler>XMLCONV</Msghandler>
</Output>
</Service>
</Servicegroup>
...
</WSBinding>
</Definition>
高度なWebサービスの機能は、WS-Policyファイル(例えば、信頼性のあるメッセージングおよびWebサービスのメッセージ・レベル・セキュリティ)を構成して有効できます。これらの機能を使用するには、WS-Policyファイルの作成が必要になる場合があります。Web Service Policy Framework仕様により、Webサービスのポリシーを記述および通信するための汎用的なモデルと構文が提供されています。
WS-Policyファイルを使用する場合、<Policy
>要素を定義してこれらの異なるWS-PolicyファイルをWSDFに組み込む必要があります。ポリシー・ファイル・パスの指定にはlocation属性を使用します。絶対ファイル・パスでも相対ファイル・パスでも指定できます。省略可能なuse属性をメッセージ・レベルのアサーション・ポリシー・ファイルで使用すると、適用するメッセージ(リクエスト(入力)メッセージ、レスポンス(出力)メッセージ、またはフォルト・メッセージ、あるいはこれら3つの組合せ)を指定できます。
WSDF
には、WS-Policyファイルを参照する2つのサブ要素があります。
Servicegroup
>Service
>Oracle SALTには、使用されることの多い用途に合せてあらかじめパッケージ化されたWS-Policyファイルが含まれています。これらのWS-Policyファイルは$TUXDIR/udataobj/salt/policyディレクトリにあります。これらのファイルを参照するには、location=”salt:<policy_file_name>”を使用します。
リスト3-6では、WS-PolicyファイルをネイティブWSDF
ファイルに使用するサンプルを示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Policy location=”./endpoint_policy.xml” />
<Policy location=”/usr/resc/all_input_msg_policy.xml” use=”input” />
<Service name="toupper">
<Policy location=”service_policy.xml” />
<Policy location=”/usr/resc/input_message_policy.xml”
use=”input” />
</Service>
<Service name="tolower" />
</Servicegroup>
....
</WSBinding>
</Definition>
詳細は、「WSDFファイルで信頼性のあるメッセージング・ポリシー・ファイルの指定」および「WS-Securityポリシー・ファイルの使用」を参照してください。
Oracle TuxedoのネイティブWSDFが作成されたら、Oracle SALT WSDLの生成ユーティリティtmwsdlgen
を使用して、対応するWSDLファイルを生成できます。次のサンプル・コマンドでは、「app1.wsdf」
というWSDF
から「app1.wsdl」
というWSDLファイルを生成します。
tmwsdlgen -c app1.wsdf -o app1.wsdl
注: | tmwsdlgenを実行する前に、TUXCONFIG 環境変数を正しく設定し、TMMETADATAを使用して関連するOracle Tuxedoアプリケーションを起動する必要があります。 |
または、「-o」
オプションを使用して出力WSDLファイル名を指定できます。 指定しない場合、tmwsdlgenは、デフォルト値として「tuxedo.wsdl」
という名前のWSDLファイルを作成します。
ネイティブWSDFファイルに、CARRAY
バッファを使用するOracle Tuxedoサービスが含まれている場合、CARRAY
バッファ・マッピングに対して別のスタイルのWSDLファイルを生成するためにtmwsdlgenオプションを指定できます。デフォルトでは、CARRAY
バッファがSOAPメッセージでxsd:base64Binary
XMLデータ型としてマップされています。詳細は、Oracle SALT Webサービスのプログラミングの データ型のマッピングと変換に関する項、およびOracle SALTリファレンス・ガイドの tmwsdlgenに関する項を参照してください。
Oracle Tuxedoから外部Webサービスを呼び出すには、次の構成タスクを実行する必要があります。
Oracle SALTには、外部WSDLファイルをOracle Tuxedo定義に変換するためのWSDL変換コマンド・ユーティリティが付属しています。WSDLファイルはExtensible Stylesheet Language Transformations (XSLT)テクノロジを使用して変換されます。Oracle SALTのインストール・パッケージには、デフォルトのXSLTツールキットとして使用するApache Xalan Java 2.7.0がバンドルされています。
Oracle SALT WSDLコンバータは2つの部分で構成されています。
wsdlcvt
は、Xalanツールキットを呼び出します。 このラッパー・スクリプトでは、使いやすいWSDLコンバータ・インタフェースが提供されています。次のサンプル・コマンドでは、外部WSDLファイルを変換してOracle Tuxedo定義ファイルを生成しています。
wsdlcvt -i http://api.google.com/GoogleSearch.wsdl -o GSearch
表3-3では、Oracle SALT WSDLコンバータによって生成されたOracle Tuxedo定義ファイルを示します。
Oracle SALTでは、各wsdl:messageがOracle Tuxedo FML32タイプ・バッファにマップされます。Oracle SALT WSDLコンバータでは、各メッセージのXML Schemaが分解され、各基本XMLスニペットにFML32フィールドとしてマップされます。生成されたFML32フィールドは定義表ファイルで定義され、デフォルトではそのフィールド名がXML要素のローカル名と同じになります。
Oracle TuxedoアプリケーションからOracle SALTプロキシ・サービスにアクセスする場合は、生成されたFML32フィールドを参照してリクエスト・メッセージとレスポンス・メッセージを処理する必要があります。FML32環境変数を適切に設定して、Oracle TuxedoアプリケーションとGWWSサーバーの両方がフィールド名とフィールドID値をマップできるようにする必要があります。
|
|||
Oracle SALT WSDLコンバータでWSDLファイルをWSDFファイルに変換し、これを発信方向のOracle SALTデプロイメント・ファイルでGWWSサーバーにデプロイできます。この方法で生成されるWSDFファイルを、ネイティブでないWSDFファイルと呼びます。
|
|||
WSDLの埋め込みXML SchemaとインポートXML Schema(<xsd:import>で参照するXML Schemaコンテンツ)は、ローカルに.xsdファイルとして保存されます。これらはGWWSサーバーで使用するファイルで、同じディレクトリに保存する必要があります。
|
表3-4では、WSDL要素からTuxedoサービス・メタデータ定義キーワードへのマッピング・ルールを示します。
|
||||
表3-5では、WSDL要素からWSDF要素へのマッピング・ルールを示します。
発信Webサービス・アプリケーションを構成するには、以下の変換後のタスクを実行する必要があります。
WSDLファイルを変換すると、コンテキスト情報の切り捨てまたは消失のせいで、予期せぬ名前の競合が発生する場合があります。生成されたサービス・メタデータ定義とFML32フィールド表ファイルを使用する前に、以下のような名前の競合を解決する必要があります。
「tuxservice」
の定義が重複している場合は解決する Oracle SALTプロキシ・サービス・メタデータ定義のキーワードtuxservice
は、元のWebサービス操作のローカル名が15文字より長い場合はそれ以降を切り捨てた値になります。そのため、複数Oracle SALTプロキシ・サービス・エントリで、切捨て後のtuxserviceの値が重複する可能性があります。GWWSサーバーではtuxserviceの値を公開済のサービス名として使用するため、サービス・リクエストが確実に配信されるよう、複数のOracle SALTプロキシ・サービス間の名前の競合を手動で解決する必要があります。名前の競合を解決するには、tuxservice
に一意で意味のある名前を割り当てる必要があります。
外部WSDLファイルをOracle Tuxedo定義に変換すると、各wsdl:messageが解析され、wsdl:messageの基本XMLスニペットを表すFML32フィールドのセットが含まれているFML32バッファ・フォーマットとしてマップされます。生成されるFML32フィールドは、デフォルトでは対応するXML要素のローカル名に基づいて命名されます。
生成されたフィールド表ファイル内のFML32フィールド定義はフィールド名でソートされるため、重複している名前を簡単に見つけることができます。SOAP/FML32のマッピングを実現するには、フィールド名の競合を解決する必要があります。生成によって重複したフィールド名を、一意で意味のある他のFML32フィールド名値に変更する必要があります。それに合せて、生成されたOracle SALTプロキシ・サービス定義内の対応するサービス・メタデータ・キーワードparam
の値も変更する必要があります。FML32フィールドとサービス・メタデータ・キーワード「param」
の定義について生成されるコメントは、どのname
とparam
が対応するかを調べる際に有用です。
名前の競合が解決したら、tmloadreposユーティリティを使用して、Oracle SALTプロキシ・サービス・メタデータ定義をOracle Tuxedoサービス・メタデータ・リポジトリにロードする必要があります。詳細は、Oracle Tuxedoコマンド・リファレンス・ガイドのtmloadreposに関する項
を参照してください。
発信Webサービス用にGWWSサーバーを起動する前に、次の環境変数を設定する必要があります。
FIELDTBLS32
環境変数を更新します。XSDDIR
およびXSDFILES
環境変数を設定します。XSDDIR
およびXSDFILES
があります。これらは、GWWS
サーバーによって使用され、実行時にすべての外部XMLスキーマ・ファイルをロードします。複数のXMLスキーマ・ファイル名をカンマ「,」
で区切る必要があります。たとえば、XMLスキーマ・ファイルa.xsd
、b.xsd
およびc.xsd
を/home/user/myxsd
ディレクトリに配置すると、GWWS
サーバーを起動する前に、環境変数XSDDIR
およびXSDFILES
を次に示すように設定する必要があります。XSDDIR=/home/user/myxsd
XSDFILES=a.xsd,b.xsd,c.xsd
Oracle SALTデプロイメント・ファイル(SALTDEPLOY
)では、SALT Webサービスのアプリケーションを定義します。SALTDEPLOY
ファイルは、バイナリSALTCONFIGファイルのWebサービス・アプリケーションに対する重要な入力です。
SALTDEPLOY
ファイルを作成するには、次の手順に従います。
詳細は、Oracle SALTリファレンス・ガイドの Oracle SALTのデプロイメント・ファイル・リファレンスに関する項を参照してください。
必要なWSDFファイルをすべてOracle SALTデプロイメント・ファイルにインポートする必要があります。インポートされた各WSDFファイルには、一意のWSDF名が設定されている必要があり、この名前はデプロイメントに関連付けるためにGWWS
サーバーによって使用されます。インポートされた各WSDFファイルは、SALTDEPLOY
ファイルに指定した場所を介してアクセスできる必要があります。
リスト3-7には、SALTDEPLOY
ファイルにWSDFファイルをインポートする方法を示します。
<Deployment ..>
<WSDF>
<Import location="/home/user/simpapp_wsdf.xml" />
<Import location="/home/user/rmapp_wsdf.xml" />
<Import location="/home/user/google_search.wsdf" />
</WSDF>
...
</Deployment>
各GWWS
サーバーは、インポートされたWSDFファイルに定義した着信WSBindingオブジェクトおよび発信WSBindingオブジェクトのグループとともにデプロイできます。各WSBindingオブジェクトは、「ref=<wsdf_name>:<WSBinding id>」属性を使用して参照します。着信WSBindingオブジェクトについては、各GWWS
サーバーで、WSBindingオブジェクトのエンドポイント・リストから少なくとも1つのアクセス・エンドポイントを着信エンドポイントとして指定する必要があります。発信WSBindingオブジェクトについては、各GWWSサーバーで、WSBindingオブジェクトのエンドポイント・リストから0またはそれ以上のアクセス・エンドポイントを発信エンドポイントとして指定できます。
リスト3-8には、着信および発信エンドポイントでGWWSサーバーを構成する方法を示します。
<Deployment ..>
...
<WSGateway>
<GWInstance id="GWWS1">
<Inbound>
<Binding ref="app1:app1_binding">
<Endpoint use="simpapp_GWWS1_HTTPPort" />
<Endpoint use="simpapp_GWWS1_HTTPSPort" />
</Binding>
</Inbound>
<Outbound>
<Binding ref="app2:app2_binding">
<Endpoint use=" simpapp_GWWS1_HTTPPort" />
<Endpoint use=" simpapp_GWWS1_HTTPSPort" />
</Binding>
<Binding ref="app3:app3_binding" />
</Outbound>
</GWInstance>
</WSGateway>
...
</ Deployment>
GWWSサーバーは、機能をオン/オフにするプロパティまたはサーバーのパフォーマンスをチューニングする引数を設定するプロパティで構成できます。
プロパティは、<GWInstance>
の子要素<Properties>
に構成されます。個別の各プロパティは、「name」属性および「value」属性を含む<Property>
要素を使用して定義します。異なる「name」属性は、値を含む異なるプロパティ要素を表します。表3-6には、GWWSサーバー・レベル・プロパティを示します。
注: | GWWSでの複数のエンコーディング・サポートについては、「複数のエンコーディング・サポートの構成」を参照してください。 |
注: | パフォーマンス・チューニング・プロパティの詳細は、「Oracle SALTの実行時の管理」のGWWSサーバーのチューニングに関する項を参照してください。 |
リスト3-9には、GWWSプロパティの構成方法の例を示します。
<Deployment ..>
...
<WSGateway>
<GWInstance id="GWWS1">
.......
<Properties>
<Property name="thread_pool_size" value="20"/>
<Property name="enableMultiEncoding" value="true"/>
<Property name="timeout" value="600"/>
</Properties>
</GWInstance>
</WSGateway>
...
</ Deployment>
Oracle SALTでは、SOAPメッセージ用の複数のエンコーディング、およびSOAPメッセージとOracle Tuxedoバッファの間のエンコーディング・マッピングがサポートされています。Oracle SALTでは、次の文字エンコーディングがサポートされています。
注: | ASCII、BIG5、CP1250、CP1251、CP1252、CP1253、CP1254、CP1255、CP1256、CP1257、CP1258、CP850、CP862、CP866、CP874、EUC-CN、EUC-JP、EUC-KR、GB18030、GB2312、GBK、ISO-2022-JP、ISO-8859-1、ISO-8859-13、ISO-8859-15、ISO-8859-2、ISO-8859-3、ISO-8859-4、ISO-8859-5、ISO-8859-6、ISO-8859-7、ISO-8859-8、ISO-8859-9、JOHAB、KOI8-R、SHIFT_JIS、TIS-620、UTF-16、UTF-16BE、UTF-16LE、UTF-32、UTF-32BE、UTF-32LE、UTF-7、UTF-8 |
GWWSでの複数のエンコーディング・サポートを有効にするには、リスト3-10に示すように、GWWSサーバー・レベル・プロパティ「enableMultiEncoding」を「true」に設定する必要があります。
注: | GWWSでは、UTF-8以外の外部メッセージがUTF-8に変換されます。ただし、エンコーディングの変換はサーバーのパフォーマンスに影響します。 デフォルトでは、エンコーディングの変換はオフで、UTF-8エンコードのないメッセージが拒否されます。 |
<Deployment ..>
...
<WSGateway>
<GWInstance id="GWWS1">
.......
<Properties>
<Property name="enableMultiEncoding" value="true"/>
</Properties>
</GWInstance>
</WSGateway>
...
</ Deployment>
表3-7では、GWWSサーバー・レベルの複数エンコーディング・プロパティを有効にした場合に適用される、SOAPメッセージとTuxedoバッファの間のエンコーディング・マッピング・ルールの詳細について説明します。
|
||||
|
||||
|
Oracle SALTでは、すべてのGWWS
サーバーによって共有される一連のグローバル・リソースを SALTDEPLOY
ファイルに定義します。次のシステム・レベル・リソースをSALTDEPLOY
ファイルに構成できます。
証明書の情報は、SSLリスニング・エンドポイントを作成するまたは認証およびメッセージ署名用X.509証明書を使用するようにGWWS
サーバーで構成する必要があります。同じデプロイメント・ファイルに指定したすべてのGWWS
サーバーは同じ証明書の設定(秘密キー・ファイル、信頼されている証明書ディレクトリなどを含む)を共有します。
秘密キー・ファイルは<Certificate>/<PrivateKey>
サブ要素を使用して構成します。秘密キー・ファイルはPEMファイル形式で、ローカルで保存される必要があります。
<Certificate>/<VerifyClient>
サブ要素をtrue
に設定すると、SSLクライアントを確認できます。デフォルトでは、GWWS
サーバーはSSLクライアントを確認しません。
SSLクライアントを確認する場合やX.509証明書の認証機能が有効になっている場合、一連の信頼済み証明書はローカルで保存し、GWWS
サーバーで指定する必要があります。 GWWS
サーバーの信頼済み証明書を定義するには2つの方法があります。
注: | 識別名の"cn"属性は、証明書ルックアップ用のキーとして使用されます。名前で使用されるワイルドカードはサポートされません。空の件名フィールドは許可されません。この制約はOracle Tuxedoでも見つかります。 |
リスト3-11には、GWWS
サーバーの証明書を構成するSALTDEPLOY
ファイルのセグメントを示します。
<Deployment ..>
...
<System>
<Certificates>
<PrivateKey>/home/user/gwws_cert.pem</PrivateKey>
<VerifyClient>true</VerifyClient>
<CertPath>/home/user/trusted_cert</CertPath>
</Certificates>
</System>
</Deployment
プラグインは、GWWS
サーバーの起動中に呼び出される関数のセットです。 Oracle SALTには、プラグインを定義して実装するための共通インタフェースとして、プラグイン・フレームワークが用意されています。 プラグインを実装するには、実際の関数が含まれているダイナミック・ライブラリを使用します。 実装ライブラリはGWWS
サーバーの起動中に動的にロードされます。 関数は、プラグイン・インタフェースの実装として登録されます。
GWWS
サーバーがライブラリをロードできるように、ライブラリは<Plugin>/<Interface>
要素を使用してSALTDEPLOY
ファイルに指定する必要があります。
リスト3-12には、GWWS
サーバーがロードする複数のカスタマイズされたプラグイン・ライブラリを構成するSALTDEPLOY
ファイルのセグメントを示します。
<Deployment ..>
...
<System>
<Plugin>
<Interface lib=”plugin_1.so” />
<Interface lib=”plugin_2.so” />
</Plugin>
</System>
</Deployment
注: | プラグイン・ライブラリをSALT 2.0のプラグイン・インタフェースを使用して開発する場合、インタフェースの「id」 および「name」 属性を指定する必要はありません。 これらの値はプラグイン・インタフェースから取得できます。 |
注: | 詳細は、『Webサービスのプログラミング』の「Oracle SALTプラグインの使用」を参照してください。 |
現在のOracle SALTは以下の高度なWebサービス・メッセージング機能をサポートしています。
非同期Webサービス・メッセージングの着信と発信の両方をサポートします。
Oracle SALTでは、着信サービスおよび発信サービスの両方にWeb Service Addressingがサポートされます。GWWSサーバーによって使用されるWeb Service Addressing (WS-Addressing)のメッセージは、 Web Service Addressing標準(W3C Member Submission 2004年8月10日)に準拠している必要があります。
着信サービスは特有なWeb service addressingの構成が必要ではありません。GWWS
サーバーはWS-Addressingリクエスト・メッセージおよび非WS-Addressingリクエスト・メッセージによって受け付けて回答します。
発信サービスについては、以下の項で説明しているようにWeb service addressingの構成が必要です。
発信サービスについては、Web Service AddressingはWebサービス・バインディング・レベルで構成します。SALTDEPLOY
ファイルでは、各GWWS
サーバーは、WS-Addressingを有効にするために参照された任意の発信WSBindingオブジェクトに対して、<WSAddressing
>要素を使用してWS-Addressingエンドポイントを指定できます。
WS-Addressingエンドポイントを設定した後、GWWS
サーバーは起動時にリスニング・エンドポイントを作成します。発信WSBindingに指定したすべてのサービスはWS-Addressingメッセージで呼出します。
リスト3-13には、参照された発信Webサービス・バインディングに対してWS-Addressingを有効にするSALTDEPLOY
ファイルのセグメントを示します。
<Deployment ..>
...
<WSGateway>
<GWInstance id="GWWS1">
...
<Outbound>
<Binding ref="app1:app1_binding">
<WSAddressing>
<Endpoint address=”https://myhost:8801/app1_async_point”>
</WSAddressing>
<Endpoint use=" simpapp_GWWS1_HTTPPort" />
<Endpoint use=" simpapp_GWWS1_HTTPSPort" />
</Binding>
<Binding ref="app2:app2_binding">
<WSAddressing>
<Endpoint address=”https://myhost:8802/app2_async_point”>
</WSAddressing>
<Endpoint use=" simpapp_GWWS1_HTTPPort" />
<Endpoint use=" simpapp_GWWS1_HTTPSPort" />
</Binding>
</Outbound>
...
</GWInstance>
</WSGateway>
...
</ Deployment>
注: | GWWS サーバーの各発信Webサービス・バインディングを特定のWS-Addressingエンドポイント・アドレスに関連付けることができます。 これらのエンドポイントは、同じホスト名とポート番号で設定できますが、エンドポイント・アドレスのコンテキスト・パースの部分を異なっている必要があります。 |
注: | 外部Webサービス・バインディングは、WS-Addressingメッセージをサポートされない場合、実行時にAddressingエンドポイントの構成に障害が発生する可能性があります。 |
SALTDEPLOY
ファイルでのWS-Addressingエンドポイントの作成の有無にかかわらず、WSDFで特定の発信サービスのAddressing機能を明示的に無効にできます。特定の発信サービスのAddressing機能を無効にするには、WSDFファイル内の対応する<Service>定義で「disableWSAddressing」
プロパティを「true」に設定する必要があります。このプロパティは、着信サービスには影響しません。
リスト3-14には、Addressing機能を無効にするWSDFファイルのセグメントを示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Service name="toupper">
<Property name="disableWSAddressing" value=”true” />
</Service>
<Service name="tolower" />
</Servicegroup>
....
</WSBinding>
</Definition>
現在、Oracle SALTは着信サービスのみの信頼性のあるメッセージングをサポートしています。 信頼性のあるメッセージングの機能を有効にするには、Webサービスの信頼性のあるメッセージングのポリシー・ファイルを作成し、このポリシー・ファイルをWSDFに含める必要があります。 ポリシー・ファイルはWS-ReliableMessagingポリシー・アサーション仕様(2005年2月)に準拠している必要があります。
注: | 信頼性のあるメッセージング・ポリシーの定義を含むWSDFは、着信方向のみにGWWS サーバーで使用する必要があります。 |
信頼性のあるメッセージングのポリシー・ファイルは、WS-ReliableMessagingのアサーションを含む一般的なWS-Policyファイルです。 WS-ReliableMessagingのアサーションは、サポート対象のWS-ReliableMessage仕様のバージョン、ソース・エンドポイントの再伝送までの時間間隔、送信元エンドポイントの承認までの時間間隔などの機能を説明するXMLセグメントです。
WS-ReliableMessagingポリシー・ファイルの形式の詳細は、Oracle SALTリファレンス・ガイドの「Oracle SALT WS-ReliableMessagingポリシー・アサーションのリファレンス」を参照してください。
リスト3-15には、信頼性のあるメッセージングのポリシー・ファイルの例を示します。
<?xml version="1.0"?>
<wsp:Policy wsp:Name="ReliableSomeServicePolicy"
xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
xmlns:wsp=”http://schemas.xmlsoap.org/ws/2004/09/policy”
xmlns:beapolicy="http://www.bea.com/wsrm/policy">
<wsrm:RMAssertion>
<wsrm:InactivityTimeout Milliseconds="600000" />
<wsrm:AcknowledgementInterval Milliseconds="2000" />
<wsrm:BaseRetransmissionInterval Milliseconds="500"/>
<wsrm:ExponentialBackoff />
<beapolicy:Expires Expires="P1D" />
<beapolicy:QOS QOS=”ExactlyOnce InOrder" />
</wsrm:RMAssertion>
</wsp:Policy>
ネイティブWSDFファイルでは、<Servicegroup>レベルにおいてWS-ReliableMessagingポリシー・ファイルを参照する必要があります。リスト3-16には、WS-ReliableMessagingポリシー・ファイルの参照方法を示します。
<Definition ...>
<Policy location=”RMPolicy.xml” />
<WSBinding ...>
<Servicegroup ...><Service ... />
<Service ... />
...
</Servicegroup ...>
</WSBinding>
</Definition>
注: | Oracle SALTにおいて、信頼性のあるメッセージングではプロセス障害/システム障害の状況がサポートされていません。つまり、SALTではメッセージが永続ストレージ領域には保存されません。Oracle SALTはSOAPクライアントと「直接モード」でやりとりします。通常、システム障害からリカバリするには、クライアントとサーバーの間でビジネス・ロジックの同期化を行う必要があります。 |
Oracle SALTでは、トランスポート・レベルとSOAPメッセージ・レベルの両方のレベルでセキュリティがサポートされます。以下のトピックでは、各レベルにおいてセキュリティ機能を設定する方法について説明します。
Oracle SALTでは、SSLリンク・レベル・セキュリティを使用してポイントツーポイント・セキュリティが提供され、着信サービスおよび発信サービスの両方のサービス認証に対してHTTP基本認証メカニズムがサポートされます。
SSLを使用して着信エンドポイントでリンク・レベル・セキュリティを設定するには、エンドポイント・アドレスの前に接頭辞として「https://」
を指定できます。この着信エンドポイントを使用するGWWS
サーバーは、SSLリスニング・ポートを作成してWebサービス・クライアントをSSL接続で保護します。SSL機能では、証明書の設定を指定する必要があります。証明書の設定の詳細は、「証明書の構成」を参照してください。
発信エンドポイントへのSSL接続は、GWWSサーバーによって自動的に作成され、接頭辞「https://」のURLでパブリッシュされます。
Oracle SALTでは、Webサービスのクライアントを認証するかどうかは、Oracle Tuxedoセキュリティ・フレームワークによって決まります。Oracle SALT側に、着信HTTP基本認証を有効にする特定の構成はありません。Oracle Tuxedoシステムでは、ユーザー資格証明が必要な場合、Webサービス・クライアント・プログラムのかわりにHTTP基本認証を使用して、ユーザー資格証明を含めることができます。
GWWS
ゲートウェイでは、次に示す2つの認証パターンに関するOracle Tuxedoドメイン・セキュリティ構成がサポートされています。
GWWS
サーバーは、クライアントSOAPリクエストのHTTPヘッダーから次の文字列を取得し、Oracle Tuxedoでの認証用に渡します。
Authorization: Basic <base64Binary of username:password>
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
この例では、クライアントから渡されたOracle Tuxedoユーザー名は「Aladdin」
、パスワードは「open sesame」
であり、このペア値がOracle Tuxedoの認証に使用されます。
APP_PW
)を使用する場合 Oracle TuxedoでAPP_PWが使用されている場合、HTTPユーザー名の値は無視され、GWWS
サーバーはパスワード文字列のみをOracle Tuxedoアプリケーション・パスワードとして使用し、認証をチェックします。
USER_AUTH
)を使用する場合 Oracle TuxedoでUSER_AUTH
が使用されている場合、HTTPユーザー名とパスワードの両方の値が使用されます。この場合、GWWS
サーバーはOracle Tuxedoアプリケーション・パスワードをチェックしません。
注: | Webサービスのクライアントに対しては、ACL およびMANDATORY_ACL がサポートされていません。そのため、ACLに関するすべての構成仕様はOracle Tuxedoシステムによって無視されます。Oracle SALTでは、グループ情報がWebサービスのクライアントに対して使用可能になりません。 |
Oracle SALTは、発信HTTP基本認証のユーザー資格証明を作成する認証プラグインの開発を支援します。発信HTTP基本認証はエンドポイント・レベルにおいて設定します。発信エンドポイントにおいて、HTTPメッセージでユーザー・プロファイルが必要の場合、WSDFファイル内でHTTPエンドポイント用HTTPレルムを指定する必要があります。GWWS
サーバーは、ユーザー名とパスワードを作成するために認証プラグイン・ライブラリを呼出し、HTTP基本認証メカニズムを使用してリクエスト・メッセージに送信します。
リスト3-17には、発信エンドポイントに対するHTTP基本認証を有効化する方法を示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<SOAP>
<AccessingPoints>
<Endpoint id=”...” address=”...”>
<Realm>SIMP_REALM</Realm>
</Endpoint>
</AccessingPoints>
</SOAP>
<Servicegroup id="simpapp">
....
</Servicegroup>
....
</WSBinding>
......
</Definition>
サービス・リクエストを<「Realm」
>の設定で指定された発信エンドポイントに送信すると、Oracle Tuxedoクライアントuid
およびgid
がGWWS
サーバーから認証のプラグイン機能に渡されます。このプラグインはOracle Tuxedoクライアントの情報によってHTTP基本認証のusername/password
を確定できます。HTTP基本認証のusername/password
をマッピングするためにOracle Tuxedoクライアントuid / gid
を取得するには、Oracle Tuxedoセキュリティ・レベルもUBBCONFIG
ファイルに構成する必要があります。詳細は、「発信HTTP基本認証のOracle Tuxedoセキュリティ・レベルの構成」を参照してください。
発信認証プラグインを開発する方法の詳細は、『Webサービスのプログラミング』の「発信認証プラグインのプログラミング」を参照してください。
Oracle SALTでは、メッセージ・レベル・セキュリティに対してWebサービス・セキュリティ1.0および1.1をサポートします。 Oracle SALTでは、以下を保証するためにメッセージ・レベル・セキュリティを使用できます。
Webサービス・セキュリティのOracle SALTの実装: SOAPメッセージ・セキュリティの仕様は以下のユース・ケースをサポートします。
Oracle SALTでは、メッセージ・レベル・セキュリティの使用例のために使用される複数のWS-Securityポリシー1.0および1.2のファイルが含まれています。
Oracle SALTが正常にインストールされると、WS-Policyファイルが$TUXDIR/udataobj/salt/policy
に配置されます。
表3-8には、Oracle SALTに付属するデフォルトWS-Securityポリシー・ファイルを示します。
上述のWS-Security Policy 1.2 UserToken
ファイル以外のすべてのポリシー・ファイルを、ネイティブWSDF
ファイルの<Servicegroup>
または<Service>
レベルで参照できます。WSSP 1.2 UserToken
ファイルは、 <Servicegroup>
レベルのみで参照できます。サンプル「wsseapp」
には、WSSP 1.2 UserToken
ファイルを<Service>
レベルで使用するようにクリップする方法を示します。
リスト3-18には、サービス「TOUPPER」
で、クライアントがプレーン・テキスト形式のUsernameToken
とリクエスト形式のX509v3Tokenを送信する必要があり、X.509トークンで署名付きメッセージのSOAP:Body
部分も必要とする、ポリシー割当ての組合せを示します。
<Definition ...>
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Policy location="salt:wssp1.2-Wss1.1-X509V3-auth.xml"/>
<Service name="TOUPPER" >
<Policy location="D:/wsseapp/wssp1.2-UsernameToken-Plain.xml"/>
<Policy location="salt:wssp1.2-signbody.xml" use="input"/>
</Service>
</Servicegroup>
....
</WSBinding>
......
</Definition>
ポリシーは、<Policy>
要素の「location」属性で指定されます。接頭辞の「salt:」は、Oracle SALTに付属のデフォルト・ポリシー・ファイルがすでに使用されていることを示します。ユーザー定義ポリシー・ファイルは、ファイル・パスを直接指定して使用できます。
注: | ポリシーが<Servicegroup> レベルで参照されると、このサービス・グループのすべてのサービスに適用されます。 |
「signbody」ポリシーは、「use」属性を「input」に設定して使用する必要があります。これにより、ポリシーが入力メッセージに対してのみ適用されます。 出力メッセージのSOAP:Body
を署名していないので、これは必要です。
SALT構成ファイルのコンパイルとは、XMLバージョンSALTDEPLOY
ファイルから(SALTCONFIG)ファイルのバイナリ・バージョンを生成することです。構成ファイルをコンパイルするには、wsloadcfコマンドを実行します。wsloadcfはデプロイメント・ファイルを解析してバイナリ・ファイルをロードします。
wsloadcfはデプロイメント・ファイル、インポートされたWSDFファイルおよびデプロイメント・ファイルに参照したWS-Policyファイルを読み込み、各ファイルのXMLスキーマ形式によって構文をチェックします。また、必要に応じて、SALTCONFIGというバイナリ構成ファイルをロードします。SALTCONFIGおよび(必要に応じて) SALTOFFSET環境変数は、SALTCONFIGファイルを指し、(必要に応じて)情報を格納する場所にオフセットします。
SALT構成ファイルは、あらかじめ定義したXMLスキーマ・ファイルに従ってwsloadcfにより検証されます。Oracle SALTで必要なXMLスキーマ・ファイルは$TUXDIR/udataobj/salt.
ディレクトリに配置しています。
オプション「-n」
を指定すると、wsloadcf
はバイナリ・バージョンのSALTCONFIG
を生成せずに、検証の目的にのみ実行できます。
wsloadcf
の詳細は、Oracle SALTリファレンス・ガイドの「wsloadcf」を参照してください。
Oracle SALT構成を設定およびコンパイルした後、Oracle Tuxedo UBBCONFIGファイルは、Oracle TuxedoアプリケーションにOracle SALTコンポーネントが適用されるように更新する必要があります。表3-9には、Oracle SALTのUBBCONFIGファイルの構成タスクを示します。
Oracle SALTは、UBBCONFIG
ファイルに少なくとも1つのTMMETADATA
サーバーを定義する必要があります。Tuxedoサービス定義にアクセスするスループットを増加するために、複数のTMMETADATA
サーバーの指定も可能です。
リスト3-19には、Oracle TuxedoアプリケーションにTMMETADATA
サーバーを定義する方法を示すUBBCONFIG
ファイルのセグメントの一覧を示します。
......
*SERVERS
TMMETADATA SRVGRP=GROUP1 SRVID=1
CLOPT="-A -- – f domain_repository_file -r"
TMMETADATA SRVGRP=GROUP1 SRVID=2
CLOPT="-A -- – f domain_repository_file"
......
注: | 全体のOracle Tuxedoドメインに対してサービス・メタデータ・リポジトリ・ファイルを1つのみ保持することをお薦めします。これを確認するには、Oracle Tuxedoドメインで実行している複数のTMMETADATA サーバーが同じリポジトリ・ファイルを指す必要があります。 |
詳細は、Oracle TuxedoドキュメントのTuxedoサービス・メタデータ・リポジトリの管理に関する項を参照してください。
SALTDEPLOY
ファイルに定義されたGWWSインスタンスを起動するには、UBBCONFIGファイルの*SERVERS
セクションでGWWSサーバーを指定する必要があります。1つまたは複数のGWWSサーバー・インスタンスを並行してUBBCONFIGファイルに定義できます。各GWWSサーバーは、Oracle Tuxedoドメイン内でオプション「-i」
を使用して、一意のインスタンスIDに割り当てる必要があります。インスタンスIDは、XMLバージョンのSALTDEPLOY
ファイルおよび生成されたバイナリ・バージョンのSALTCONFIGファイルに存在する必要があります。
リスト3-20には、Oracle TuxedoアプリケーションにGWWSサーバーを定義する方法を示すUBBCONFIGファイルのセグメントの一覧を示します。
......
*SERVERS
GWWS SRVGRP=GROUP1 SRVID=10
CLOPT="-A -- – i GW1"
GWWS SRVGRP=GROUP1 SRVID=11
CLOPT="-A -- – i GW2"
GWWS SRVGRP=GROUP2 SRVID=20
CLOPT="-A -- -c saltconf_2.xml – i GW3"
......
詳細は、Oracle SALTリファレンス・ガイドの「GWWS」を参照してください。
注: | UBBCONFIGファイルでは、GWWS サーバーが起動する前にTMMETADATA システム・サーバーが確実に起動するよう設定してください。 GWWS サーバーはTMMETADATA によって提供されるサービスを呼び出すため、TMMETADATA よりも後に起動する必要があります。 |
注: | GWWS サーバーから呼び出される前にTMMETADATA が確実に起動するようにするため、UBBCONFIGファイルの*SERVERS 定義内で、TMMETADATA を先に、GWWS を後に記述するか、SEQUENCE パラメータを使用します。 |
注: | Oracle SALT構成情報は、生成されたバイナリ・バージョンのSALTCONFIG ファイルに対して、wsloadcf で事前にコンパイルされます。GWWS サーバーは、起動時にSALTCONFIG ファイルを読み込みます。環境変数SALTCONFIG は、GWWS サーバーを起動する前にバイナリ・バージョンのSALTCONFIG ファイル・エンティティに正しく設定する必要があります。 |
注: | オプション「-c」 はOracle SALTの現在のバージョンでは非推奨になっています。 SALT 1.1リリースにおいて、GWWS サーバーに対してSALT 1.1ファイルを指定ためにオプション「-c」 を使用します。 SALT 2.0では、GWWS サーバーは、起動時にSALTCONFIG ファイルを読込みます。 GWWS サーバーは、このオプションを指定して起動すると、このオプションは非推奨になっていることを示す警告メッセージが表示されます。 指定されたファイルは任意のファイルで、GWWS サーバーによって読み込まれません。 |
SALT GWWSサーバーでOracle Tuxedoドメインを構成するとき、Oracle SALTアプリケーションの要件によって、UBBCONFIG
ファイルに定義されたOracle Tuxedoシステム制限事項を設計および更新する必要があります。
ヒント: | *RESOURCESセクションに十分なMAXSERVERS番号を定義します。 |
Oracle SALTでは、Oracle TuxedoドメインのTMMETADATA
およびGWWS内で次のシステム・サーバーを起動する必要があります。TMMETADATA
およびGWWSサーバー数は、MAXSERVERS値に指定する必要があります。
ヒント: | *RESOURCES セクションに十分なMAXSERVICES 番号を定義します。 |
GWWSサーバーは、発信方向で作業する場合、外部wsdl:operationがOracle Tuxedoサービスでマップされ、GWWSサーバーを介して公開されます。すべてのGWWS
サーバーによって公開されたサービス数は、MAXSERVICES
値に指定する必要があります。
ヒント: | *RESOURCES セクションに十分なMAXACCESSERS 番号を定義します。 |
MAXACCESSERS
値は、このアプリケーションの特定のマシン上のOracle Tuxedo掲示板と同時に接続できるクライアントおよびサーバーのデフォルトの最大数を指定するために使用します。TMMETADATA
およびGWWS
サーバー数、最大同時Webサービス・クライアントのリクエスト数は、MAXACCESSERS
値に指定する必要があります。
ヒント: | *MACHINESセクションに十分なMAXWSCLIENTS番号を定義します。 |
GWWSサーバーが着信方向で作業する場合、Webサービスの各クライアントは、Oracle Tuxedoシステムのワークステーション・クライアントと見なされます。したがって、GWWSサーバーをデプロイするマシンのUBBCONFIG
で、MAXWSCLIENTS
に有効な数値を構成する必要があります。番号を共有します。
Oracle SALTの証明書を設定する時にセキュリティのパスワード・フレーズを設定する必要があります。 GWWS
サーバーは、SSLリンク・レベル暗号化やWebサービス・セキュリティX.509トークンおよび署名機能を有効化にする時、証明書を設定する必要があります。 証明書の秘密キー・ファイルを作成しパスワード・フレーズで暗号化する必要があります。
証明書に関連する機能を用いてGWWS
サーバーが指定される場合、それらは秘密キー・ファイルを読み込み、パスワード・フレーズを使用してそれらを復号化するために必要です。各GWWS
サーバーに対してパスワード・フレーズを構成するには、*SERVERS
セクションにおける各GWWS
サーバー・エントリの下にキーワードSEC_PRINCIPAL_NAME
およびSEC_PRINCIPAL_PASSVAR
を指定する必要があります。 tmloadcf
を使用してUBBCONFIG
ファイルをコンパイルする際には、管理者がパスワード・フレーズを入力する必要があり、これは秘密キー・ファイルを正しく復号化するために使用できます。
注: | Oracle SALTデプロイメント・ファイルに秘密キー・ファイルを1つのみ指定できます。Oracle SALTデプロイメント・ファイルに定義されているすべてのGWWSサーバーについては、秘密キー・ファイルの復号化のために同じパスワード・フレーズを指定する必要があります。 |
リスト3-21には、GWWS
サーバーに対してセキュリティのパスワード・フレーズを指定する方法を示すUBBCONFIG
ファイルのセグメントを示します。
......
*SERVERS
GWWS SRVGRP=GROUP1 SRVID=10
SEC_PRINCIPAL_NAME="gwws_certkey"
SEC_PRINCIPAL_VAR="gwws_certkey"
CLOPT="-A -- – i GW1"
GWWS SRVGRP=GROUP1 SRVID=11
SEC_PRINCIPAL_NAME="gwws_certkey"
SEC_PRINCIPAL_PASSVAR="gwws_certkey"
CLOPT="-A -- – i GW2"
......
詳細は、Oracle Tuxedo 11gR1ドキュメントのUBBCONFIG(5)
に関する項を参照してください。
Oracle SALTのGWWS
サーバーは、Webサービス・クライアントの有効性をチェックするためにOracle Tuxedo認証フレームワークに依存します。Oracle Tuxedoの従来のアプリケーションがすでに適用されている場合、Webサービス・クライアントは次のいずれかの方法でユーザー資格証明を送信する必要があります。
逆に、Oracle SALTに対してWebサービス・クライアントを認証する場合、Oracle TuxedoドメインでOracle Tuxedo認証を構成する必要があります。
Oracle Tuxedo認証の詳細は、Oracle Tuxedo 11gR1ドキュメントの 認証の管理に関する項を参照してください。
発信HTTP基本認証username /password
をマッピングするためにOracle Tuxedoクライアントuid / gid
を取得するには、UBBCONFIG
ファイルでOracle Tuxedoセキュリティ・レベルをUSER_AUTH
、ACL
またはMANDATORY_ACL
として構成する必要があります。
リスト3-22には、UBBCONFIG
ファイルでセキュリティ・レベルACLを定義する方法を示すUBBCONFIG
ファイルのセグメントを示します。
*RESOURCES
IPCKEY ...
......
SECURITY ACL
......
MPモードのOracle Tuxedoドメイン内の複数のマシンで実行しているGWWS
サーバーを設定するには、各Oracle Tuxedoマシンを異なるSALTDEPLOY
ファイルおよび一連の別々のコンポーネントで定義する必要があります。
以下のグローバル・リソースを別々のマシンに渡って広める必要があります。
2つのマシンでは、同じWSDFファイルを関連付けられて、同一の機能がある、異なるマシンで実行している2つのGWWS
サーバーを指定できます。 ただし、以下のアーティファクトの伝播を手動で行う必要があります。
この項では、SALT 1.1からSALT 2.0リリースにアップグレードするカスタマに対して次の2つの移行方法について説明します。
SALT 1.1からSALT 2.0リリースに更新した後、元のSALT 1.1構成ファイルを使用して既存のSALTアプリケーションを実行することができます。SALT 2.0では、これがサポートされています。
SALT構成コンパイラ・ユーティリティwsloadcf
は、1つのSALT 1.1形式の構成ファイルからバイナリ・バージョンのSALTCONFIG
をロードすることをサポートします。
SALT 1.1構成ファイルを使用してSALT 2.0 GWWS
サーバーを実行するには、次の手順に従います。
注: | Oracle Tuxedoドメインに定義された複数のSALT 1.1構成ファイルがある場合、ステップ1から3に従って、複数のバイナリ・バージョンSALTCONFIG ファイルを生成し、対応するGWWS サーバーを起動する必要があります。 |
wsloadcf
はSALT 1.1構成ファイルからバイナリ・バージョンのSALTCONFIG
をロードする時、このSALT 1.1構成ファイルを1つのWSDF
ファイルと1つのSALTDEPLOY
ファイルに変換されます。
SALT 1.1構成から変換されたファイルを取得した後、SALT 2.0スタイルの構成で起動することをお薦めします。
注: | 1つのSALT 2.0デプロイメントに複数のSALT 1.1構成ファイルを組み込むには、他のWSDFファイルをインポートするためにSATLDEPLOY ファイルを手作業で編集する必要があります。 |
リスト3-23には、指定されたSALT 1.1構成ファイルから変換されたSALTDEPLOY
ファイルおよびWSDF
ファイルを示します。
<Configuration xmlns=" http://www.bea.com/Tuxedo/Salt/200606">
<Servicelist id="simpapp">
<Service name="toupper" />
<Service name="tolower" />
</Servicelist>
<Policy />
<System />
<WSGateway>
<GWInstance id="GWWS1">
<HTTP address="//127.0.0.1:7805" />
<HTTPS address="127.0.0.1:7806" />
<Property name="timeout" value="300" />
</GWInstance>
</WSGateway>
</Configuration>
変換されたSALT 2.0 WSDFファイルおよびデプロイメント・ファイルを、リスト3-24およびリスト3-25に示します。
<Definition name="simpapp" wsdlNamespace="urn:simpapp.wsdl"
xmlns=" http://www.bea.com/Tuxedo/WSDF/2007">
<WSBinding id="simpapp_binding">
<Servicegroup id="simpapp">
<Service name="toupper" />
<Service name="tolower" />
</Servicegroup>
<SOAP>
<AccessingPoints>
<Endpoint id="simpapp_GWWS1_HTTPPort"
address=http://127.0.0.1:7805/simpapp />
<Endpoint id=" simpapp_GWWS1_HTTPSPort"
address=https://127.0.0.1:7806/simpapp />
</AccessingPoints>
</SOAP>
</WSBinding>
</Definition>
<Deployment xmlns=" http://www.bea.com/Tuxedo/SALTDEPLOY/2007">
<WSDF>
<Import location="/home/myapp/simpapp.wsdf" />
</ WSDF>
<WSGateway>
<GWInstance id="GWWS1">
<Inbound>
<Binding ref="simpapp:simpapp_binding">
<Endpoint use=" simpapp_GWWS1_HTTPPort" />
<Endpoint use=" simpapp_GWWS1_HTTPSPort" />
</Binding>
</Inbound>
<Properties>
<Property name="timeout" value="300" />
</Properties>
</GWInstance>
</WSGateway>
</ Deployment>
Oracle TuxedoにおけるHTMLアプリケーションのサポートは、Apache HTTP Server 2、Oracle HTTP ServerまたはiPlanetなどのHTTPサーバー環境にインストールされるモジュールまたはプラグインと、Oracle TuxedoベースのCGIのようなプロトコルに準拠する専用のOracle Tuxedoサーバー、もしくはPHP、PythonまたはRubyのスクリプトまたはアプリケーションを実行しているスクリプト・エンジンのいずれかを使用して行われます。スクリプト・エンジンでは、アプリケーションがSymfony (PHP)、Django (Python)またはRails (Ruby)のようなフレームワークをベースとしてOracle Tuxedoサーバーとして稼働することが可能です。
詳細は、『Oracle SALTインストレーション・ガイド』の概要、システム要件に関する項をそれぞれ参照してください。
Apache HTTPおよびOracle HTTP Server用のOracle Tuxedoモジュールが含まれるライブラリは、Oracle Tuxedoの$TUXDIR/udataobj/mod_tuxedo.so
(TUXDIR
はOracle Tuxedoをインストールした場所を表します)の場所にあり、次のHTTPサーバーのインストール場所にコピーする必要があります。
このモジュールはHTTPサーバーのアドレス領域(同じプロセス)内で稼働し、HTTPリクエストをOracle Tuxedoサービスに転送します。次にOracle Tuxedoサービスから送信されたリプライを取得し、それをクライアント(HTMLブラウザ)に送り返します。これは事前定義済のスクリプトを使用してインストールされている共有ライブラリとして配信され、Apache HTTP Server 2またはOracle HTTP Server (OHS) 11gR1で同様に動作します。
一部の要素には構成が必要です。ApacheまたはOHSのhttpd.conf
ファイルで次の構成手順を実行してください。
LoadModule tuxedo_module modules/mod_tuxedo.so
mod_tuxedo
に指定します。 Tuxconfig /home/user/tuxapp/tuxconfig
このパラメータはグローバル値(すべてのmod_tuxedo
リクエストが同じサービスを使用します)、もしくはディレクトリまたはロケーションごとの値として使用されるように構成されます。
後者の場合、PHP、PythonまたはRubyハンドラ・システム・プロセスとともに使用されるのであれば、TuxService
パラメータで構成される値と同じ値によってサービスを通知するように構成する必要があります。
Oracle Tuxedoサービスを直接呼び出す場合(例: RESTfulサービス):
注: | mod_tuxedo をロードするには、HTTPサーバーが稼働している環境(ApacheまたはOHS)で、$TUXDIR/lib (Windowsの場合は%TUXDIR%\bin )パスがLD_LIBRARY_PATH (Windowsの場合は%PATH% )に含まれている必要があります。 |
単一の構成済HTTPサーバー・インスタンスを複数のOracle Tuxedoアプリケーションに結合することが可能です。これを実行するには、個々のtuxconfigパラメータを、httpd.conf
ファイル内にある特定の<Directory>
または<Location>
に設定します。
Tuxconfig /home/user/tuxapp/tuxconfig
この例では、/var/www/tux
パスから開始するすべてのリクエストが前に構成されたTuxconfig
値を使用します。異なるアプリケーションにアクセスするためには、異なる<Directory>
または<Location>
が構成されている必要があります。
Oracle Tuxedoの呼出し(tpinit()
、tpcall()
、tpalloc()
、tpfree()
など)が原因のエラーはすべて、ApacheまたはOHSのエラー・ログに記録されます。このログ・ファイルは通常、'error_log'という名前の下にあるサーバー・インスタンス・ディレクトリの'logs'ディレクトリにあります。これらのエラーは生成中の呼出しを報告し、tpstrerror()
関数出力に従ってエラーを出力します。
MODTUX_CAT:1234: Error performing tpcall: 6 - TPENOENT - no entry found
Tuxedoに関連しないエラー(メモリー割当て、tuxconfigコマンド構文エラーなど)は同様のエラー・メッセージを同じ場所に出力しますが、tpstrerror()
出力は付加されません。
mod_tuxedo
によって生成されたエラーによって、リスト3-1に示すように内部サーバー・エラーがクライアント・ブラウザに返されます。
HTTPプロセス・サーバーがスレッドまたはハイブリッド・スレッド(mpm_worker
モジュール)モードを使用して動作している可能性があるため、mod_tuxedo
はOracle Tuxedoアプリケーションにマルチコンテキスト・モードで結合します。
注: | 1つのプロセスにつき52以上のスレッドを構成しないでください。 |
注: | 52以上のスレッドを使用すると、高負荷の状況で呼出しが完了できなくなり、TPESYSTEMエラーも報告される状態になる場合があります。 |
iPlanet用のOracle Tuxedo NSAPIプラグインが含まれるライブラリは、Oracle Tuxedoの$TUXDIR/udataobj/tux_nsapi.so
(TUXDIR
はOracle Tuxedoをインストールした場所を表します)の場所にあり、次の場所にコピーする必要があります。
iPlanetのインストール場所: <iPlanet install directory>/plugins
これによってiPlanet Web Serverが正しくロードできるようになります。
このプラグインはHTTPサーバーのアドレス領域(同じプロセス)内で稼働し、HTTPリクエストをOracle Tuxedoサービスに転送します。次にOracle Tuxedoサービスのリプライを取得し、それをクライアント(HTMLブラウザ)に送り返します。そして、事前定義済のスクリプトを使用してインストールされている共有ライブラリとして配信されます。
ライブラリは通常、<iPlanet install directory>/plugins
の場所にあります。一部の要素には構成が必要なため、次の手順に従います。
注: | iPlanetでHTTPサーバー・インスタンスを構成すると、https-<uname -n> というディレクトリが作成されます(例: https-myserver )。 |
https-<uname -n>/config/magnus.conf
ファイルを編集して次の行を追加します。 Init fn="load-modules" shlib="tux_nsapi.so" funcs="tux_init,tux_execute"
https-<uname -n>/config/magnus.conf
で次の行を追加して、動的HTMLを生成するスクリプト・エンジン(WEBHNDLR
)またはOracle Tuxedoサービスのどちらかが存在するTuxedoアプリケーションに、HTTPサーバーをリンクさせます。 Init fn="tux_init" tuxconfig="/<your APPDIR>/tuxconfig" tuxservice="WEBPHP"
https-<uname -n>/config/mime.types
ファイルに追加します。 type=magnus-internal/x-httpd-php exts=php
'php'
を、PythonまたはRubyの必要に応じて'py'
または'rb'
に置き換えます。
https-<uname -n>/config/<uname -n>-obj.conf
ファイルを編集して、次の行を最初のService行として追加します。 Service fn="tux_execute" type="magnus-internal/x-httpd-php"
注: | これによってOracle TuxedoモジュールがPHPスクリプトに関連付けられます。その他のタイプは、mime.typesファイルでMIMEタイプの追加/変更が必要になる可能性があります。詳細は、iPlanetのドキュメントを参照してください。 |
# In default object
NameTrans fn="pfx2dir" from="/media" dir="/usr/lib/python2.5/site-packages/django/contrib/admin/media" name="es-internal" # For static files: javascript, css style-sheets, etc.
NameTrans fn="assign-name" name="test" from="/*"
...
# Add object "test"
<Object name="test>
Service fn="set-variable" set-vars="service=PYWEB" # Override service name, should match -S CLOPT option in ubbconfig
Service fn="tux_execute"
</Object>
https-<uname -n>/bin/startserv
ファイルを編集して次の行を追加します。 TUXDIR=<path to Tuxedo installation>; export TUXDIR
FLDTBLDIR32=/media/src/TUX11g/udataobj; export FLDTBLDIR32
FIELDTBLS32=http.fml32; export FIELDTBLS32
LD_PRELOAD=libengine.so; export LD_PRELOAD
"#
の前に、サーバー・バイナリへのパスをPATH"行に追加(必ず正しいTUXDIR
の場所を指定)してから行を変更します。
WEBHNDLR
サーバーはOracle Tuxedoシステム・サーバーで、Webアプリケーションとして稼働するようにPHP、PythonおよびRubyスクリプトを組み込むことができます。
これらのWebアプリケーションはPHP用のスタンドアロン・スクリプト、Python用のWSGI準拠のスクリプト、またはRuby用のRack準拠のスクリプトなどになります。これによってSymfony (PHP)、Django (Python)またはRails (Ruby)などのフレームワークをOracle Tuxedoサーバーとして実行できます。
スクリプト言語ベースのアプリケーションを実行するOracle Tuxedoサーバーは、両方の環境を利用できます。
詳細は、Oracle SALTコマンド・リファレンス・ガイドのWEBHNDLR(5)
に関する項と、Oracle SALTプログラミング・ガイドのWebアプリケーション・プログラミングに関する項を参照してください。
Oracle Tuxedo SCAコンポーネントの構成には、次のタスクがあります。
SCA ATMIクライアントは、SCAパラダイムで記述し、buildscaclient
ユーティリティで構築するネイティブOracle Tuxedoクライアントです。クライアントの実行ファイルは、root.composite
ファイルが格納されるディレクトリのサブディレクトリに格納する必要があります。
注: | APPDIR 環境変数に、root.composite ファイルのディレクトリを指定する必要があります。 |
リスト3-27には、クライアント・アプリケーションのルート・コンポジット・ファイル$APPDIR/root.composite
を示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="testApp">
<component name="testStringClientComp">
<implementation.composite name="ECHO"/>
</component>
</composite>
$APPDIR/ECHO
ディレクトリにはECHOアプリケーションが格納されています。ディレクトリ名「ECHO」
は、<implementation.composite name="ECHO"/>
に指定された名前と一致する必要があります。リスト3-28には、クライアント・アプリケーションのコンポジット・ファイルを示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="ECHO">
<reference name="ECHO">
<interface.cpp header="ECHO.h"/>
<binding.atmi requires="legacy">
<tuxconfig>/tux/application/ECHOServer/tuxconfig</tuxconfig>
<inputBufferType target="TestString">STRING</inputBufferType>
<outputBufferType target="TestString">STRING</outputBufferType>
<errorBufferType target="TestString">STRING</errorBufferType>
<binding.atmi>
</reference>
</composite>
このディレクトリには、このクライアント・アプリケーションのクライアント・ダイナミック・リンク・ライブラリも格納されます。たとえば、リスト3-28の例を使用すると、$APPDIR/ECHO/ECHO.so
共有オブジェクトがECHOディレクトリに格納されます。ターゲット「TestStr」
は、バッファ・タイプのグループ化に使用します。
このディレクトリには、クライアントの実行ファイルも格納されます。クライアント・アプリケーションに関連付けられたネーミング規則はありません。このクライアントECHOアプリケーションは、ECHOアプリケーション・ディレクトリに「doEchoClient」
が含まれる可能性が非常に高くなります。たとえば、$APPDIR/ECHO/doEchoClient
となります。
注: | SCA_COMPONENT を設定する必要があります。リスト3-28では、SCA_COMPONENT=testStringClientComp となります。 |
JATMIクライアント・アプリケーションの構成コンポジット・ファイルは、Java .jar
ファイルの一部です。JATMIクライアントのコンポジット・ファイルは、パッケージの一部ではなく、.jar
ファイルのベースに配置されます。クライアント・アプリケーションを呼び出すと、SCA Javaランタイムによってコンポジット・ファイルがロードされます。特別なセットアップは必要ありません。
注: | クライアント・アプリケーションの.jar ファイルはCLASSPATH に含める必要があります。次の.jar ファイルもCLASSPATH の一部に含める必要があります。 |
リスト3-29には、SCA JATMIのクライアント・コンポジット・ファイルの例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:f="binding-atmi.xsd"
name="EchoComposite">
<reference name="ECHO" promote="EchoComponent/ECHO">
<interface.java class="com.abc.sca.java.Echo" />
<f:binding.atmi requires="legacy">
<f:serviceType>RequestResponse</f:serviceType>
<f:inputBufferType>FML</f:inputBufferType>
<f:outputBufferType>FML</f:outputBufferType>
<f:fieldTables>com.abc.sca.java.fml.FMLTABLE
</f:fieldTables>
<f:workStationParameters>
<f:networkAddress>//STRIATUM:15011
</f:networkAddress>
</f:workStationParameters>
</f:binding.atmi>
</reference>
<component name="EchoComponent">
<implementation.java
class="com.abc.sca.java.EchoComponentImpl />
</component>
</composite>
SCAワークステーション・クライアントの構成は、SCAネイティブ・クライアントの構成に似ています。1つの相違点は、SCAワークステーション・クライアントの場合、コンポジット内で<workStationParameters>
要素とそのサブ要素を使用する必要があることです。SCAランタイムは、クライアントがSCAネイティブ・クライアントとSCAワークステーション・クライアントのどちらで構築されたかを自動的に検出し、それに応じて適切な参照バインディング・ライブラリをロードします。
SCA Oracle Tuxedoワークステーション・クライアントのディレクトリ階層も、SCAネイティブ・クライアントに似ています。どちらの場合も、環境変数$APPDIR
を使用して、クライアント・アプリケーションの場所を指定します。
リスト3-30およびリスト3-31には、SCA Oracle Tuxedoワークステーション・クライアントの構成の例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="testApp">
<component name="testStringClientComp">
<implementation.composite name="ECHO"/>
</component>
</composite>
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="ECHO">
<reference name="ECHO">
<interface.cpp header="ECHO.h"/>
<binding.atmi requires="legacy">
<inputBufferType target="TestString">STRING</inputBufferType>
<outputBufferType target="TestString">STRING</outputBufferType>
<errorBufferType target="TestString">STRING</errorBufferType>
<workStationParameters>
<networkAddress>//STRIATUM:4890</networkAddress>
<encryptBits>128/128</encryptBits>
</workStationParameters>
<remoteAccess>WorkStation</remoteAccess>
</binding.atmi>
<reference>
</composite>
SCA Webサービス・クライアントは、基本的にはSCAネイティブ・クライアントと同じですが、<binding.atmi>
要素ではなく<binding.ws>
要素を使用する点が異なります。SCAランタイムは、クライアントが使用しているバインディングを自動的に検出し、それに応じて適切な参照バインディングをロードします。
SCA Webサービス・クライアントのディレクトリ階層も、ネイティブ・クライアントに似ています。どちらの場合も、$APPDIR
環境変数を使用して、クライアント・アプリケーションの場所を指定します。
リスト3-32およびリスト3-33には、SCA Webサービス・クライアントの構成の例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="testApp">
<component name="calcClient">
<implementation.composite name="calcClient"/>
</component>
</composite>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"name="calcClient">
<reference name="Calculator">
<interface.cpp header="CalcService.h"/>
<binding.ws
endpoint="http://calc.sample#wsdl.endpoint
(Calculator/CalculatorSOAP11port)"/>
</reference>
</composite>
<interface.cpp>
要素は、適切なプロキシ・スタブを構築するために必要です。また、<binding.ws>
に指定したエンドポイントを配置するクライアント・ディレクトリに、WSDLファイルを格納する必要があります。さらに、次の手順に従って、Oracle Tuxedo Webサービス・ゲートウェイ(GWWS)を構成する必要もあります。
TMMETADATA
およびGWWSサーバーが停止していることを確認します。wsdlcvt
を実行します。これにより、WSDFファイル、Oracle Tuxedoメタデータ・リポジトリのインタフェース定義ファイル、fml32フィールド表、およびXMLスキーマが生成されます。TMMETADATA
サーバー・リポジトリにロードします(例: $ tmloadrepos -I calc.mif metadata.repos -y
)。詳細は、tmloadrepos
に関するドキュメントを参照してください。gwws.dep
というファイル)に、WSDFへの参照を追加します。リスト3-34では、追加された要素が青色で強調表示されています。$ wsloadcf -y gwws.dep
)。TMMETADATA
を再起動します。<?xml version="1.0" encoding="UTF-8"?>
<saltdep:Deployment xmlns:saltdep="http://www.bea.com/Tuxedo/SALTDEPLOY/2007" xmlns="http://www.bea.com/Tuxedo/SALTDEPLOY/2007" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<saltdep:WSDF>
<saltdep:Import location="calc.wsdf"/>
</saltdep:WSDF>
<saltdep:WSGateway>
<saltdep:GWInstance id="GWWS1">
<saltdep:Outbound>
<saltdep:Binding ref="calc:CalculatorSOAP11Binding">
<saltdep:Endpoint use="CalculatorSOAP11port"/>
</saltdep:Binding>
</saltdep:Outbound>
</saltdep:GWInstance>
</saltdep:WSGateway>
<saltdep:System/>
</saltdep:Deployment>
SCA ATMIサーバーでは、SCA ROOTは$APPDIR
と同じです。SCAアプリケーションを記述するのに少なくとも1つのコンポジット・ファイルが必要です。SCAランタイムは、このコンポジット・ファイルを検索し、そこから、Oracle Tuxedo環境でホストするSCAサーバー・アプリケーションのすべてのcomposite
およびcomponentType
ファイルをロードします。
リスト3-35には、Oracle Tuxedoアプリケーション・ドメインでホストする2つのSCAアプリケーションが含まれている、root.composite
という名前のルート・コンポジット・ファイルを示します。2つのアプリケーションの名前は、PurchaseおよびFinanceです。これらの2つのSCAアプリケーションには、少なくとも2つのサブディレクトリがあります。1つはPurchase.component
、もう1つはFinance.component
という名前です。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="root">
<component name="Purchase.component">
<implementation.composite name="Purchase" />
</component>
<component name="Finance.component">
<implementation.composite name="Finance" />
</component>
</composite>
リスト3-36では、Purchase.component
ディレクトリには、Purchaseアプリケーションのコンポジット・ファイルPurchase.composite
が格納されることを示します。同様に、Finance.component
ディレクトリには、Financeアプリケーションのコンポジット・ファイルFinance.composite
が格納されます。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="Purchase">
<service name="purchase">
<interface.cpp header="Purchase.h" />
<binding.atmi requires="legacy">
<map target="Order">ORDER</map>
<map target="TrackOrder">TRACKORDER</map>
</binding.atmi>
<reference>PurchaseServiceComponent</reference>
</service>
<component name="PurchaseServiceComponent">
<implementation.cpp library="Purchase" header="PurchaseImpl.h" />
</component>
</composite>
リスト3-37では、Purchase.composite
は、$APPDIR/Purchase.component
ディレクトリにPurchaseImpl.componentTypeファイル
が格納され、アプリケーション実装としてCPPを使用していることを示します。この構成を使用するSCAサーバーをbuildscaserver
ユーティリティを使用して構築すると、実行時に2つのSCAサービス(ORDER
およびTRACKORDER
)が自動的に公開されます。サービスの実際のCPP実装は、Order
およびTrackOrder
という名前になります。
<?xml version="1.0" encoding="UTF-8"?>
<componentType xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<service name="purchase">
<interface.cpp header="Purchase.h"/>
</service>
</componentType>
Oracle Tuxedo内でホストしbuildscaserver
で構築するこれらの2つのSCAアプリケーションが、PurchaseSvr
およびFinanceSvr
という名前だと仮定します。UBBCONFIGファイルの*SERVERSセクションに次の行を追加する必要があります。
PurchaseSvr SRVGRP=PURCHASEGRP SRVID=500
FinanceSvr SRVGRP=FINANCEGRP SRVID=600
*SERVICESセクションにサービスを追加する必要はありません。Oracle TuxedoでホストするSCAサービスは動的に公開されます。
コンポーネントのWebサービス・バインディングの構成(サーバー側)は、SCAコンポーネントをホストするためのATMIバインディングの構成に似ています。
リスト3-38には、root.composite
という名前のルート・コンポジット・ファイルを示します。これには、Oracle Tuxedoアプリケーション・ドメインでホストする1つのSCAコンポーネントが含まれます。2つのアプリケーションの名前は、PurchaseおよびFinanceです。これらの2つのSCAアプリケーションには、少なくとも2つのサブディレクトリがあり、1つはPurchase.component
、もう1つは Finance.component
という名前です。
リスト3-39には、実際のコンポーネント・サブディレクトリを示します。リスト3-40には、componentType
サイドファイルを示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="root">
<component name="account">
<implementation.composite name="account" />
</component>
</composite>
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="account">
<service name="AccountService">
<interface.wsdl interface="http://www.bigbank.com/AccountService#wsdl.interface(AccountService)"/>
<binding.ws/>
<reference>AccountServiceComponent</reference>
</service>
<component name="AccountServiceComponent">
<implementation.cpp library="Account" header="AccountServiceImpl.h"/>
</component>
</composite>
<?xml version="1.0" encoding="UTF-8"?>
<componentType xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<service name="AccountService">
<interface.cpp header="AccountService.h"/>
</service>
</componentType>
上述のSCAコンポーネントは、-wオプション(Webサービスに対して)を指定したbuildscaserver
を使用して構築され、WSServer
という名前のOracle Tuxedoサーバーでホストされます。
ここで、Oracle Tuxedo UBBCONFIGファイルの*SERVERSセクションに、WSServer SRVGRP=ACCTGRP SRVID=500
という行を追加する必要があります。
*SERVICESセクションにサービスを追加する必要はありません。Oracle TuxedoでホストするSCAサービスは動的に公開されます。
さらに、Oracle Tuxedo Webサービス・ゲートウェイ(GWWS)を構成する必要があります。次の手順に従います。
TMMETADATA
およびGWWSサーバーが停止していることを確認します。wsdlcvt
を実行します。これにより、WSDFファイル、Oracle Tuxedoメタデータ・リポジトリのインタフェース定義ファイル、fml32フィールド表、およびXMLスキーマが生成されます。TMMETADATA
サーバー・リポジトリにロードします(例: $ tmloadrepos -I AccountService.mif metadata.repos -y
)。
詳細は、tmloadrepos
に関するドキュメントを参照してください。gwws.dep
というファイル)に、WSDFへの参照を追加します。リスト3-41では、追加された要素が青色で強調表示されています。$ wsloadcf -y gwws.dep
)。TMMETADATA
を再起動します。<?xml version="1.0" encoding="UTF-8"?>
<saltdep:Deployment xmlns:saltdep="http://www.bea.com/Tuxedo/SALTDEPLOY/2007" xmlns="http://www.bea.com/Tuxedo/SALTDEPLOY/2007" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<saltdep:WSDF>
<saltdep:Import location="AccountService.wsdf"/>
</saltdep:WSDF>
<saltdep:WSGateway>
<saltdep:GWInstance id="GWWS1">
<saltdep:Inbound>
<saltdep:Binding ref="AccountService:AccountServiceSOAP">
<saltdep:Endpoint use="AccountServiceSOAP"/>
</saltdep:Binding>
</saltdep:Inbound>
</saltdep:GWInstance>
</saltdep:WSGateway>
<saltdep:System/>
</saltdep:Deployment>
Oracle Tuxedo SCAコンポーネントでは、次の2種類のセキュリティがサポートされます。
Oracle Tuxedoアプリケーション・ドメインのTUXCONFIG
ファイルの*RESOURCES
セクションにSECURITY
キーワードを追加すると、Oracle Tuxedoアプリケーション・ドメイン・セキュリティが設定されます。アプリケーション・セキュリティのレベルには、NONE
、APP_PW
、USER_PW
、ACL
およびMANDATORY_ACL
の5つがあります。NONE
以外のすべてのセキュリティ・レベルでは、Oracle Tuxedoアプリケーションへのアクセスを取得するため、少なくともユーザーからのアプリケーション・パスワードが必要になります。USER_PW
レベル以上では、ユーザーを認証してユーザー資格証明を確立するために、追加のユーザー・パスワードが必要になります。合計で2つのパスワードを構成する必要がある可能性があります。
すべてのSCAクライアントは、Oracle Tuxedoアプリケーション・サーバーへのアクセスを取得するために、このパスワード情報が必要になります。SCAクライアントがパスワード情報を取得するには、次の2つの方法があります。
Oracle SALT管理者がパスワードの取得を構成するには、次のタスクを実行する必要があります。
リスト3-42およびリスト3-43には、SCA ATMIクライアント・アプリケーションの例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="simple.app">
<component name="simpapp.TuxClient">
<implementation.composite name="simpapp.client"/>
<reference name="TOUPPER">tuxToupper</reference>
</component>
</composite>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="simpapp.client">
<reference name="TOUPPER">
<interface.cpp header="ToupperTuxService.h"/>
<binding.atmi requires="legacy">
<tuxconfig>d:\tests\tuxedo\sca\tests\TUXCONFIG</tuxconfig>
<inputBufferType target="charToup">STRING</inputBufferType>
<outputBufferType target="charToup">STRING</outputBufferType>
<authentication
<passwordIdentifier>aaa</passwordIdentifier>
</authentication>
</binding.atmi>
</reference>
</composite>
上述のコンポジットでは、Oracle Tuxedoアプリケーション・ドメインのパスワード識別子「aaa」
を定義しており、これにより、ATMI参照バインディングが、実行時に、識別子「aaa」
でpassword.store
ファイルからパスワードを取得できるようにしています。必要なユーザー認証によって、Oracle Tuxedoアプリケーション・ドメイン・セキュリティを強化できます。その場合、セキュリティ・レベルをSECURITY=USER_PW
以上に設定して、scapasswordtool -i crusoe -a
コマンドを使用します。
次に、テキスト・エディタやsimpapp.client.composite
ファイルを編集できるその他のツールを使用して、<binding.atmi/authentication>
要素に<userPasswordIdentifier>crusoe</userPasswordIdentifier>
というエントリを追加します。
これで、パスワード「crusoe」を使用するすべてのユーザーが、Oracle Tuxedoアプリケーションにアクセスできるようになります。
Oracle Tuxedoリンク・レベル・セキュリティには2種類あります。1つはリンク・レベルの暗号化(LLE)を使用して簡単に構成できるもの、もう1つはより一般的に使用されるトランスポート層セキュリティ(TLS)です(Secure Sockets Layer(SSL)とも呼びます)。ネイティブのATMI参照バインディングを使用するSCA ATMIクライアントの場合は、トランスポート・メソッドがネイティブ・メッセージ・キューでありOracle Tuxedo BRIDGEであるため、SCAレベルでリンク・レベル・セキュリティを構成する必要はありません。
SCA JATMIクライアントの参照バインディングでは、リンク・レベル・セキュリティはサポートされません。リンク・レベル・セキュリティの構成が可能な唯一のSCAクライアントは、SCAワークステーションATMIクライアントです。
SCAワークステーションATMIクライアントでは、コンポジット・ファイルに構成された<workStationParameters>
要素が含まれています。SCAランタイムは、このタイプのクライアントに適した参照バインディングを自動的にロードします。
リンク・レベルの暗号化を構成するには、コンポジット・ファイルに<encryptBits>
要素を追加します。LLEでは、次の要素を構成しないようにしてください。それらはSSL暗号化に固有であり、SSL暗号化を使用していると見なされるためです。
<encryptBits>
要素には、このクライアントがネゴシエートを試みる暗号化の強度を指定します。<encryptBits>
要素の構文は、<minimum encryption strength>/<maximum encryption strength>
です。最小の56ビット暗号化を構成するには、コンポジット・ファイルに次のエントリを追加する必要があります。
<networkAddress>//STRIATUM:8741</networkAddress>
<encryptBits>56/128</encryptBits>
注: | encryptBits には、クライアント接続がネゴシエートを試みる暗号化の強度を指定します。フォーマットは、<minencryptbits> /<maxencprytbits> (たとえば128/128)です。指定できる値は、0(暗号化なし)、40、56、128または256です。無効な値を指定すると、構成例外が発生します。 |
これにより、SCAワークステーション参照バインディングでは、WSHとのネゴシエートにおいて強度が56から128ビットの暗号化が必要と判断されます。 UBBCONFIGファイルの*SERVERSセクションに、次の行を追加する必要もあります。
WSL SRVGRP=GROUP1 SRVID=1001 CLOPT="-A -- -n //STRIATUM:8741 -a -z 56 -Z 256
TLS/SSLによるリンク・レベル・セキュリティを有効にするには、<encryptBits>
に加えて、secPrincipalName
、secPrincipalLocation
、およびsecPrincipalPassId
を構成する必要があります。
注: | 識別名の"cn"属性は、証明書ルックアップ用のキーとして使用されます。名前で使用されるワイルドカードはサポートされません。空の件名フィールドは許可されません。この制約はOracle Tuxedoでも見つかります。 |
これら3つのパラメータにより、SCAワークステーションATMIクライアントがTLS/SSL接続を確立する必要がある場合のパラメータを指定します。
リスト3-44には、TLS/SSLを構成する際に、/binding.atmi/workStationParameters
内のクライアント・コンポジット・ファイルに追加する必要がある行を示します。
<networkAddress>//STRITUM:8742</networkAddress>
<secPrincipalName>crusoe</secPrincipalName>
<secPrincipalLocation>/tux/udataobj/security/keys/crusoe.pem</secPrincipalLocation>
<secPrincipalPassId>crusoe</secPrincipalPassId>
Oracle Tuxedoでは、クライアントがポート8742で接続する場合にTLS/SSLを使用することを示すために、WSLに-S 8742
を追加する必要があります。
WSL SRVGRP=GROUP1 SRVID=1001
CLOPT="-A -- -n //STRIATUM:8741 -S 8742 -z 56 -Z 128"
サービスの検索を有効にすると、サービスを提供するサーバーによってサービス規約情報が収集され、この情報が TMMETADATA(5)
で実装された内部サービスに送信されます。通信のオーバーヘッドを軽減するため、同じサービス規約は1回のみ送信されます。
サービス規約は、TMMETADATA
サーバーによって収集されたデータに基づいて生成されます。規約情報は、メタデータ・リポジトリに格納するか、テキスト・ファイルに出力しておいてtmloadrepos
でメタデータ・リポジトリにロードできます。Oracle SALTでは、tmscd
コマンドを使用してサービス規約の実行時収集を管理できます。詳細は、Oracle SALTコマンド・リファレンス・ガイドのtmscd
に関する項を参照してください。
生成されたサービス規約情報には、サービス名、リクエスト・バッファ情報、応答バッファ情報、およびエラー・バッファ情報(エラーがある場合のみ)が含まれます。TMMETADATA
サーバーへの送信が失敗した場合、収集されたサービス規約情報は破棄されます。バッファ情報には、バッファ・タイプ、サブタイプ、およびFML/FML32のフィールド情報(name、type、subtype
)が含まれます。
検索は、FML32バッファ内のすべての埋め込みバッファでサポートされます。 FML/FML32フィールドが出現すると、検索によってメタデータ・リポジトリ内のcount
/requiredcount
のパターンが自動的に更新されます。 フィールドの出現がパターンに影響することはありませんが、「requiredcount」
で最小出現回数を指定できます。規約検索の期間全体での最大出現回数は「count」
で指定します。
VIEW/VIEW32/X_C_TYPE/X_COMMONの場合は、ビュー名のみが検索されます。 ORACLE SALTでメタデータ・リポジトリを使用している場合は、ビュー名に基づいてビューの詳しい説明を生成できます。
注: | autodiscovery (表3-10を参照)を指定したパターンは比較されます。 |
注: | メタデータ・リポジトリ内に同じautodiscovery パターンがすでに存在する場合は、新しい方のパターンが無視されます。 |
サポートされるのは、アプリケーションATMIサービス(ローカル、または/TDOMAINゲートウェイ経由でインポートされたもの)のみです。 サービス規約検索では、以下のサービスはサポートされません。
注: | 応答のないサービスは、メタデータ・リポジトリでは「oneway」サービスとしてマップされます。 |
サービスがtpreturn()
のかわりにtpforward()
を発行すると、そのサービスの応答バッファ情報が転送先のサービスの応答バッファ情報と同じになります。次に例を示します。
収集されたサービス規約検索情報を、メタデータ・リポジトリに直接格納するかわりにファイルに書き出す場合、 TMMETADATA(5)
-o<filename>
オプションを使用し、tmloadrepos
を使用して、ファイルをメタデータ・リポジトリに手動でロードする必要があります。詳細は、Oracle Tuxedoコマンド・リファレンス・ガイドのtmloadrepos
に関する項を参照してください。
ファイルをメタデータ・リポジトリのかわりのストレージとして使用する場合、出力はtmloadreposで設定されたフォーマットに準拠しています。このファイルは、サービス・ヘッダー・セクションと、パラメータごとのパラメータ・セクションで構成されます。サービス・ヘッダーには、表3-10に示す項目が含まれます。「service」フィールドのフォーマットは、<TuxedoServiceName>+'_'+<SequenceNo>
です。Oracle Tuxedoサービスに複数のパターンが認識された場合に名前の競合を避けるため、接尾辞 <SequenceNo>
が使用されます。
注: | <SequenceNo> は、メタデータ・リポジトリにすでに格納された最後の<SequenceNo> の番号から始まります。 |
サービス・パラメータには、表3-11に示す項目が含まれます。
入力: service=SVC, request=STRING, reply = TPSUCCESS + STRING
出力パターン: service=SVC_1,tuxservice=SVC,inbuf=STRING,outbuf=STRING
入力: service=SVC, request=STRING, reply = TPFAIL+ STRING
出力パターン(抜粋): Service=SVC_1, tuxservice=SVC,inbuf=STRING,outbuf=NULL,errbuf=STRING
service=SVC, request=STRING, reply = TPSUCCESS + STRING
service=SVC, request=STRING, reply = TPFAIL+ STRING
service=SVC_1,tuxservice=SVC,inbuf=STRING,outbuf=STRING
Service=SVC_2, tuxservice=SVC,inbuf=STRING,outbuf=NULL,errbuf=STRING
入力: service=FMLS,request=FML32(name,pwd),reply=TPSUCCESS+FML32(id)
service=FMLS_1,tuxservice=FMLS,inbuf=FML32,outbuf=FML32
param: input(name, pwd), output(id)
service=FMLS,request=FML32(name,pwd),reply=TPSUCCESS+FML32(id)
service=FMLS,request=FML32(name,pwd,token),reply=TPSUCCESS+FML32(id)
service=FMLS_1,tuxservice=FMLS,inbuf=FML32,outbuf=FML32
param: input(name, pwd), output(id)
service=FMLS_2,tuxservice=FMLS,inbuf=FML32,outbuf=FML32
param: input(name, pwd,token), output(id)
注: | これらの構成の変更は、SALTDEPLOY 追加擬似スキーマおよびWSDF追加擬似スキーマの付録に要約されています。 |
注: | 追加情報は、『Oracle SALT相互運用性ガイド』を参照してください。 |
Oracle Tuxedoまたは/DomainのTLogファイルと同様に、トランザクション・ログ(TLogDevice)要素を使用して、GWWSシステム・サーバーを構成する必要があります。リスト3-45に示すように、TLOGDevice
要素が、SALTCONFIG
ソース・ファイル(SALTDEPLOY
)に追加されます。
TLOGName
要素も追加して、GWWSインスタンスで同じTLogデバイスを共有できます。
TLogデバイスは、Webサービス・ゲートウェイ・インスタンスごとに1つのみ設定できます(つまり、トランザクション・ログ要素は/Deployment/WSGateway/GWInstanceの子要素です)。
<Deployment xmlns="http://www.bea.com/Tuxedo/SALTDEPLOY/2007">
<WSDF>
...
</WSDF>
<WSGateway>
<GWInstance id="GW1">
<TLogDevice location="/app/GWTLOG"/>
<TLogName id="GW1TLOG"/>
...
</GWInstance>
</WSGateway>
...
</Deployment>
Oracle Tuxedoベースのサービスは、コーディネータを使用してDurable 2PCプロトコルに登録されます。
Oracle Tuxedoがコーディネータ(発信方向)である場合、GWWSシステム・サーバーでは、Volatile 2PCまたはDurable 2PCの登録リクエストを許可し、それに応じてこれらを処理します。
図3-2では、典型的なWS-ATコンテキスト・サービスの呼出しのアプリケーションとプロトコルのフローを示します。
Oracle SALT GWWSゲートウェイの構成手順および実行時の動作を、(図3-2に示すようなOracle Tuxedoドメインのロールに応じて)次の項に示します。
Webサービスとして公開されたOracle Tuxedoサービスは、着信WS-ATトランザクション・リクエストに関連付けられたローカル・トランザクションを開始するために、トランザクション・ログ・ファイルを作成しGWWSデプロイ構成ファイルにこれを追加する以外の固有の構成を必要としません。
トランザクションをOracle Tuxedoドメインに伝播できることを確認するためには、次の手順を実行します。
CoordinationContext
要素を含む着信コールは、Oracle Tuxedoグローバル・トランザクションを作成します。Oracle Tuxedoクライアントが外部WebサービスへのOracle Tuxedoグローバル・トランザクションを伝播するために、次の手順を実行します。
CoordinationContext
要素が作成され、アプリケーション・リクエストとともにSOAPヘッダーに送信されます。RegistrationService
要素のCoordinationContext
要素とともに送信され、トランザクションで使用します。プロトコル交換(準備/コミットまたはロールバックなど)とともに、この手順は両側で透過的です。 リスト3-46に示すように、MaxTran
要素を使用して、内部トランザクション表のサイズを構成できます。デフォルトはMAXGTT
です。
注: | MaxTran 値は省略可能です。構成された値がMAXGTT より大きい場合、これは無視され、かわりにMAXGTT が使用されます。 |
<Deployment xmlns="http://www.bea.com/Tuxedo/SALTDEPLOY/2007">
<WSDF>
...
</WSDF>
<WSGateway>
<GWInstance id="GW1">
...
<MaxTran value="500"/>
...
</GWInstance>
</WSGateway>
...
</Deployment>
WS-ATは、リクエストが操作呼出しを原子性トランザクションの一部として作成する必要
または可能性
があるかどうかを示すことができるポリシー・アサーションを定義します。
policy.xml
ファイルには、WS-ATポリシー要素が含まれます。リスト3-47に示すように、WS-ATは、ATAssertion
要素をOptional
属性に定義する場合、/wsat:ATAssertion/@wsp:Optional="true"
となります。
<?xml version="1.0"?>
<wsp:Policy wsp:Name="TransactionalServicePolicy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsat="http://docs.oasis-open.org/ws-tx/wsat/2006/06">
<wsat:ATAssertion wsp:Optional="true"/>
</wsp:Policy>
注: | 外部WSDLを適切にインポートするために、wsdlcvt コマンドを変更して、ATAssertion 要素を含むpolicy.xml ファイルを生成します(WSDL内に存在する場合)。発信リクエストでは、ATAssertion 要素を含むpolicy.xml ファイルを作成し、SALTDEPLOY ソースで適切に示す必要があります。 |
着信トランザクションの場合、実行時に特定の動作変更は行われません。クライアントのWSDLの消費は、構成された値に基づいて決定し、通常の場合のように、実行時の動作が続きます。
ATAssertion
で"Optional=true"
が構成されない場合、トランザクションで呼出しを行う必要があります。対応するXAトランザクションが存在しない場合、WS-TXトランザクションは開始されますが、Oracle Tuxedo XAトランザクションには関連付けられません。XAトランザクションが存在する場合、動作の変更はありません。ATAssertion
で"Optional=true"
が構成されると、対応するOracle Tuxedo XAトランザクションが呼出しのコンテキストに存在する場合のみ、発信トランザクション・コンテキストがリクエストされます。ATAssertion
が構成されない場合、対応するサービス呼出しはトランザクションの外側で行われます。Oracle Tuxedo XAトランザクションのコンテキストで外部Webサービスへの呼出しが行われる場合、Webサービス呼出しはトランザクションを伝播しません。 これにより、グローバル・トランザクションからあるWebサービス呼出しを除外することができ、ほとんどの既存のWebサービス呼出し(WS-TXをサポートしていない)のデフォルトを表します。
WSDLの生成が拡張されて、対応するサービスのポリシー・ファイルに構成されたアサーションに対応するATAssertion
要素が生成されます。
発信リクエストでは、WSDL変換ツールであるwsdlcvt
が、ATAssertion
要素を含むpolicy.xml
ファイルを生成します(処理されたWSDL内に存在する場合)。policy.xml
ファイルの場所を、SALTDEPLOY
ソースに適切に構成する必要があります。