Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionインテグレーターズ・ガイド 11g リリース1 (11.1.1) B63033-06 |
|
![]() 前 |
![]() 次 |
この章では、Oracle Business IntelligenceサーバーのメタデータWebサービスの概要を紹介し、Oracle BIサーバーとのWebサービス接続の構成、Webサービスのコールに使用されるメソッド、Webサービスの保護およびOracle BIサーバーのXMLプロシージャの使用について説明します。
この章の内容は次のとおりです。
Oracle BIサーバーではセマンティック・モデルを使用して、操作関連の動作を格納および制御します。セマンティック・レイヤーは共通エンタープライズ情報モデルと呼ばれ、Oracle BI管理ツールによって管理されるメタデータ内で取得されます。
以前のバージョンのOracle Business Intelligenceでは、管理ツールを使用してメタデータ・リポジトリに格納された情報にアクセスしていました。しかし、このバージョンのOracle Business Intelligenceでは、Oracle BIサーバーのメタデータWebサービスにより、Webサービス・インタフェースを使用してOracle BIサーバーのストアド・プロシージャをコールできます。これらのプロシージャにより、メタデータについての情報を取得したり、メタデータを変更したりできます。
たとえば、サーバーのリポジトリを新しいメタデータで更新する場合、開発者は、管理ツールを開いたり、変更後のリポジトリを使用してサーバーを再起動したりする必要がなくなります。開発者は、ストアド・プロシージャを使用して、リポジトリの異なる2つのバージョンから作成されたパッチXMLを直接適用できます。
Oracle BIサーバーのメタデータWebサービスをコールするには、同期と非同期の2つの手法があります。即座にレスポンスが返されるケースでは、同期手法が適している場合があります。ただし、要求の処理が遅延する場合があるため、多くの場合はWebサービスを非同期でコールする手法を使用し、クライアント・アプリケーションの処理を続行して後からレスポンスを処理できるようにすると便利です。
このトピックには、次の項が含まれています。
このトピックでは、BIサーバーのデフォルト・インストールを使用しない場合について説明します。デフォルトでは、Oracle BIサーバーのメタデータWebサービスは、次のURLで実行されるOracle BIサーバー・インスタンスに接続しようとします。
jdbc:oraclebi://localhost:9703/
しかし、BIサーバーが別のマシン上にデプロイされている場合、別のポートを使用する場合、またはWebサービスとサーバー間でSSL接続を構成する場合は、Oracle WebLogic Server管理コンソールで作成したOracle Business Intelligence JDBCデータ・ソースを使用する必要があります。Oracle BIサーバーのメタデータWebサービスは、次の名前のデータ・ソースを探し、見つかった場合はそれを使用してOracle BIサーバーに接続します。
jdbc/bi/server
Oracle Business Intelligence JDBCデータ・ソースの作成手順は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Edition開発者ガイド』のOracle WebLogicでのBI JDBCデータ・ソースの作成方法に関する項を参照してください。
ただし、Oracle BIサーバーのメタデータWebサービスとともに使用する場合のOracle Business Intelligence JDBCデータ・ソースの設定には、次の要件があります。プリファレンスが適用されるように、このデータ・ソースの設定が完了した時点で、Webサービスを停止および再起動してください。
新規JDBCデータ・ソースウィザードの「接続プロパティ」ページの「URL」フィールドで、Oracle BIサーバーに対して構成したポートを指定します。既存の指示では「9703」を指定するようにされていますが、「9703」は正しいポート番号ではない可能性があります。
BI JDBCデータ・ソースを作成して保存した後は、データ・ソースの設定を変更する必要があります。データ・ソースの「設定」にアクセスし、「接続プール」タブをクリックします。各設定項目を、次のように変更します。
「文キャッシュ・サイズ」フィールドに「0」と入力します。この値を指定することで、文のキャッシュが無効になります。
「詳細設定」タブで、「接続作成の再試行間隔」フィールドに「10」と入力します(または0より大きな任意の数値)。
Oracle BIサーバーのメタデータWebサービスは、Oracle Web Services Manager (WSM)を使用して保護します。Oracle BIサーバーのメタデータWebサービスをコールするには、クライアント・コードを適切なクライアント側ポリシーによって構成し、ストアド・プロシージャのコール権限を持つユーザーにセキュリティ資格証明を提供する必要があります。
このトピックには、次の項が含まれています。
事前定義済のリストから組織のセキュリティ指針に合ったセキュリティ・ポリシーを選択して、Webサービスに割り当てます。
Webサービスのセキュリティ・ポリシーの例を次に示します。
oracle/wss11_saml_token_with_message_protection_service_policy
Oracle BIサーバーのメタデータWebサービスを正常にコールするには、一致するクライアント側ポリシーをクライアント・コードで設定し、必要な情報を指定する必要があります。たとえば、前述のサービス・ポリシーに一致するクライアント側ポリシーは、次のとおりです。
oracle/wss11_saml_token_with_message_protection_client_policy
この例では、クライアント・コードで、ストアド・プロシージャをコールする権限を持つユーザーの有効なSAMLトークンを、SOAPメッセージ・ヘッダーに追加する必要があります。Webサービスのセキュリティ・ポリシーにより、有効なトークンを持たないSOAPメッセージは必ずすべて拒否されます。トークンが有効な場合は、Webサービスがシステムのユーザー資格証明を使用してOracle BIサーバーに接続し、トークンで指定されたユーザーを偽装します。
WSMの詳細、および定義済ポリシーの適用および構成方法は、Oracle Fusion Middleware Webサービスのセキュリティおよび管理者ガイドを参照してください。
Oracle BIサーバーのメタデータWebサービスを正常に使用するには、事前にWSMを構成しておく必要があります。Oracle BIサーバーのメタデータWebサービスおよびアクション・フレームワークには、同じ構成を使用します。
Oracle BIサーバーのメタデータWebサービスを使用するためのWSMの構成は、「Oracle Web Services Managerの構成」を参照してください。
Oracle BIサーバーのメタデータWebサービスを実行するユーザーには、manageRepositories権限を付与する必要があります。セキュリティの設定方法、およびこの権限の適用方法は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionセキュリティ・ガイド』を参照してください。
この項では、Oracle BIサーバーのメタデータWebサービスのコールについて説明します。
通常、同期コールの場合は、Oracle BIサーバーのメタデータWebサービスは次の場所にデプロイされます。
http://server:port/AdminService/AdminService
WSDLは次の場所にあります。
http://server:port/AdminService/AdminService?WSDL
Oracle BIサーバー上のストアド・プロシージャを同期的にコールするには、次のメソッドを使用します。
このメソッドは、結果セットを返すことが想定されていないプロシージャのコールに使用します。表4-1は、このメソッドの各引数についての情報を示します。
このメソッドは、結果セットを返すことが想定されるプロシージャのコールに使用します。
このメソッドは、結果セットを一連のResultsRowオブジェクトとして模倣するオブジェクトを返します。各ResultsRowにはそれぞれ1つ以上の列が含まれ、各列はタイプと値を定義します。エラーが発生した場合、ほとんどのストアド・プロシージャは、文字列による1つの列からなる行を1つ以上返します。このため、返された結果を注意深く確認することが重要です。
結果セットを返すプロシージャは、、NQSModifyMetadata、NQSQueryMetadata、NQSExtractMetadataProject (レコード・セットをバイナリ・データとして返す)およびNQSQueryProjectsです。これらはすべて問合せタイプのプロシージャで、単にプロシージャの実行中に発生したエラー・メッセージ(存在する場合)を返すNQSModifyMetadataを除いて、興味深い結果を返します。NQSModifyMetadataは、callProcedureWithResultsと一緒でなくても同期的にコールできますが、その場合はどのようなメッセージが返されたかを知ることはできません。
表4-2は、このメソッドの各引数についての情報を示します。
このメソッドは内部のみで使用され、BIサーバー拡張ユーティリティをコールします。このユーティリティはADFソースのフレックス・オブジェクトの変更をインポートし、ビジネス・モデルとマッピングのレイヤーとプレゼンテーション・レイヤーにマップします。
このメソッドは、startExtenderコマンドが起動されたことを示す文字列を返します。
詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド』のbiserverextenderユーティリティを使用したフレックス・オブジェクト変更の自動マッピングに関する項を参照してください。
WSDLのstartExtender()メソッド用のシグネチャは、次のとおりです。
<xsd:sequence> <xsd:element name="adminBeanServerUrl" type="xsd:string"/> <xsd:element name="biAdminUser" type="xsd:string"/> <xsd:element name="biAdminPassword" type="xsd:string"/> <xsd:element name="jobID" type="xsd:string"/> <xsd:element name="connectionDetails" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="startExtender" type="tns:startExtender"/> <xsd:complexType name="startExtenderResponse"> <xsd:sequence> <xsd:element name="return" type="xsd:string"/> </xsd:sequence> </xsd:complexType>
たとえば、startExtender()のコールは、次のようになります。
startExtender(localhost:7001", "wlsuser", "wlspassword", " <ConnectionDetails> <ConnectionPool> <ConnectionPoolName>"oracle.apps.fscm.model.analytics.
applicationModule.FscmTopModelAM_FscmTopModelAMLocal"."Connection Pool" </ConnectionPoolName> </ConnectionPool> <NewEssbaseConnection> <DatabaseName>computer.example.com:10215</DatabaseName> <UserName>FUSION_APPS_GL_ESSBASE_APPID</UserName> <Password>D7EDED84BC624A917F5B462A4DCA05
CDCE256EEEEEDC97D5575BA27BADBC24F0E7675
6D92C558D91CA53D63E2D7450E3FAEA57FA6B914D4D</Password> <CubeNamesList> <CubeName>BI_VF_USA_Accounting_Flexfie</CubeName> </CubeNamesList> </NewEssbaseConnection> </ConnectionDetails>");
表4-3は、このメソッドの各引数についての情報を示します。
次のコードを使用してクライアント側のセキュリティを設定します。このコードを使用すると、SAMLトークン内の認証情報を渡すように構成された、管理サービスのクライアント側インスタンスを設定できます。このコードは認証されたWebアプリケーションに格納されている必要があります。セッションの認証情報は、Oracle BIサーバーのメタデータWebサービスに自動的に渡されます。次の例のようなコードを使用するには、クライアント側のプロキシ・クラスを生成する必要があります。
次の例では、adminwebservice.clientパッケージ内でプロキシが生成されています。
import adminwebservice.client.*; /** * Looks up an instance of the Admin Service and sets the correct authentication information on it. * @return Admin Proxy to the admin service. */ protected Admin getAdminService() throws Exception { String SERVICE_NAMESPACE = "http://ws.admin.obiee.oracle/"; String SERVICE_NAME = "AdminService"; String PORT_NAME = "AdminPort"; String WSS_POLICY_CONFIG_FILE_SAML = "wss-policy-saml.xml"; URL wsdlURL = new URL ("http://localhost:7001/AdminService/AdminService?WSDL"); QName serviceQname = new QName(SERVICE_NAMESPACE, SERVICE_NAME); QName portQname = new QName(SERVICE_NAMESPACE, PORT_NAME); ServiceDelegateImpl serviceDelegate = new ServiceDelegateImpl (wsdlURL, serviceQname, OracleService.class); Admin admin = serviceDelegate.getPort( portQname, Admin.class); ((BindingProvider)admin).getRequestContext().put(ClientConstants.CLIENT_ CONFIG,toElement(this.getClass().getResourceAsStream(WSS_POLICY_CONFIG_ FILE_SAML))); ((BindingProvider)admin).getRequestContext().put(BindingProvider. ENDPOINT_ADDRESS_PROPERTY, getServiceUrl()); return admin; }
WSS_POLICY_CONFIG_FILE_SAML
WSS_POLICY_CONFIG_FILE_SAMLは、次のような内容を持つファイルのリソース名です。
<?xml version="1.0" encoding="UTF-8"?> <oracle-webservice-clients> <webservice-client> <port-info> <policy-references> <policy-reference uri="oracle/wss11_saml_token_with_ message_protection_client_ policy"category="security"/> </policy-references> </port-info> </webservice-client> </oracle-webservice-clients>
通常、非同期コールの場合は、Oracle BIサーバーのメタデータWebサービスは次の場所にデプロイされます。
http://server:port/AsyncAdminService/service
非同期サービスでは、WSDLは次の場所にあります。
http://server:port/AsyncAdminService/service?wsdl
クライアントから見ると、非同期メソッド・コールは2つの一方向メッセージ交換で構成されています。クライアントは非同期コールを開始する前に、非同期Webサービスからのレスポンスをリスニングするためのコールバック・サービスをデプロイする必要があります。
内容は次のとおりです。
JDeveloperのWebサービス・プロキシの作成ウィザードを使用して、「非同期として生成」オプションを選択すると、非同期プロキシが生成されます。このウィザードを使用してWebサービス・クライアントを作成する場合の詳細は、JDeveloperのオンライン・ヘルプのWebサービス・プロキシの作成に関する項を参照してください。生成されたコールバック・サービス・コードを変更して、レスポンスを処理できます。その後、コールバック・サービスをWebサービスとしてデプロイする必要があります。デプロイした後は、コールバック・サービスのURLをreplyToフィールドとしてクライアント・コードに追加します。
コールバック・サービス作成の詳細は、『Oracle Fusion Middleware Oracle Infrastructure Webサービス開発者ガイド』の非同期Webサービス・クライアントの定義に関する項を参照してください。
ポリシーは次の非同期コンポーネントにアタッチできます。
非同期Webサービスをコールするクライアント
非同期Webサービス
非同期コールバック・クライアント
非同期コールバック・サービス
実行時にコンポーネントにポリシーをアタッチするには、Fusion Middleware Controlを使用します。非同期Webサービスとクライアント・ポリシーは互いに適合している必要があります。同様に、非同期コールバック・クライアントとコールバック・サービス・ポリシーも互いに適合している必要があります。
コールバック・サービスのセキュリティ構成の詳細は、『Oracle Fusion Middleware Oracle Infrastructure Webサービス開発者ガイド』の非同期Webサービスとクライアントへのポリシーのアタッチに関する項を参照してください。
次のコードを使用して、非同期メタデータWebサービスのクライアント側インスタンスを作成および初期化できます。このコードに含まれているのは、クライアント側のインスタンスを構成し、oracle/wss_username_token_client_policyポリシーに必要な認証情報を渡す場合の例です。次の例のようなコードを使用するには、クライアント側のプロキシ・クラスを生成する必要があります。
/** * Looks up an instance of the Asynchronous Admin Service and * sets the correct authentication information on it. * @return Asynchronous Admin Proxy to the admin service. */ protected AsyncAdmin getAsyncAdminService() throws Exception { String SERVICE_NAMESPACE = "http://ws.admin.obiee.oracle/"; String SERVICE_NAME = "AsyncAdminService"; String SECURITY_POLICY = "oracle/wss_username_token_client_policy"; URL wsdlURL = new URL("http://localhost:7001/AsyncAdminService/service?wsdl"); QName serviceQname = new QName(SERVICE_NAMESPACE, SERVICE_NAME); AsyncAdminService service = new AsyncAdminService(wsdlURL, serviceQname); SecurityPoliciesFeature securityFeature = new SecurityPoliciesFeature(new String[] { SECURITY_POLICY }); AsyncAdmin admin = service.getAsyncAdminPort(securityFeature); Map<String, Object> requestContext = ((BindingProvider) admin).getRequestContext(); requestContext.put(BindingProvider.USERNAME_PROPERTY, "weblogic"); requestContext.put(BindingProvider.PASSWORD_PROPERTY, "welcome1"); return admin; }
次のコードに、非同期メタデータWebサービスのメソッドをコールする前にコールバック情報を指定する方法を示します。
String CALLBACK_URL = "http://localhost:7001/ClienCallback/AsyncAdminResponseImplPort"; AddressingVersion WS_ADDR_VER = AddressingVersion.W3C; WSEndpointReference replyTo = new WSEndpointReference(CALLBACK_URL, WS_ADDR_VER); Header replyToHeader = replyTo.createHeader(WS_ADDR_VER.replyToTag); String messageID = UUID.randomUUID().toString(); WSBindingProvider wsbp = (WSBindingProvider) getAsyncAdminService(); wsbp.setOutboundHeaders(new StringHeader(WS_ADDR_VER.messageIDTag, messageID), replyToHeader);
Oracle Business Intelligenceには、JDBCまたはODBC経由でOracle BIサーバーをコールする場合に使用できる、いくつかのOracle BIサーバーXMLプロシージャが用意されています。Oracle BIサーバーXMLプロシージャは、バイナリ(RPD)形式のリポジトリでのみ使用できます。
ここでは、次のプロシージャについて詳しく説明します。
プロジェクト抽出プロシージャは、リポジトリからプロジェクトを抽出するために使用します。出力される結果セットには、リポジトリ内で定義された各プロジェクトを示す行が含まれます。
このプロシージャの構造は、次のとおりです。
NQSExtractMetadataProject Input 1. PROJECT_NAMES 2.RPD_NAME (optional) Output 1. RPD_OBJECT
表4-4は、プロジェクト抽出プロシージャの入力および出力パラメータと、それぞれの説明を示します。
メタデータ変更プロシージャは、変更をリポジトリに適用するために使用します。出力される結果セットには、0または1つの行が含まれます。1行が返された場合、この行にはエラー・メッセージが含まれます。
メタデータは、コマンドラインXMLユーティリティ(biserverxmlgen、biserverxmlexecおよびbiserverxmlcliなど)のような他のメソッドを使用し、管理ツール内でコピーおよび貼付けを行うことによって変更できます。biserverxmlgen、biserverxmlexecおよびbiserverxmlcliのコマンドライン・ツールの詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Edition XMLスキーマ・リファレンス』のXMLの生成および実行に関する項を参照してください。
このプロシージャの構造は、次のとおりです。
NQSModifyMetadata Input 1. XUDML_TEXT 2. ORIGINAL_RPD (optional) 3. RPD_NAME (optional) 4. IGNORE_XUDML_ERRORS (optional) Output 1. ERROR_MESSAGES
表4-5は、メタデータ変更プロシージャの入力および出力パラメータと、それぞれの説明を示します。
表4-5 メタデータ変更プロシージャのパラメータと説明
パラメータ | 説明 |
---|---|
XUMDL_TEXT |
サーバーに適用される完全なOracle BI Server XMLテキスト。元のリポジトリが入力パラメータに設定されている場合を除き、通常はメタデータ定義は直接適用され、既存の定義を上書きします。 |
ORIGINAL_RPD |
(オプション) Oracle Business IntelligenceがOracle BIサーバーXMLを比較するためのリポジトリ名。Oracle Business Intelligenceは、Oracle BIサーバーのXMLフラグメントを、指定された元のRPDと比較します。競合が検出された場合、Oracle BIサーバーXMLは適用されません。競合が検出されない場合は、Oracle BIサーバーXMLが適用されます。 |
RPD_NAME |
(オプション)このパラメータは現在使用されていません。今後使用するために予約されています。 |
IGNORE_XUDML_ERRORS |
(オプション)致命的でないエラーはすべて無視されます。致命的でないエラーには、たとえば未解決のオブジェクト、重複したオブジェクト、壊れた式などがあります。 このパラメータはtrueに設定します。値の大文字と小文字は区別されません。 |
ERROR_MESSAGES |
問合せの実行の結果返されたすべてのエラーを保持します。 |
メタデータ問合せプロシージャは、リポジトリにメタデータを問い合せるために使用します。出力される結果セットには、一致したオブジェクトの数だけの行が含まれます。完全な形式のOracle BI Server XMLドキュメントを得るには、結果行を連結する必要があります。
このプロシージャの構造は、次のとおりです。
NQSQueryMetadataObjects Input 1. OBJECT_TYPES 2. OBJECT_NAME (optional) 3. OBJECT_PARENT (optional) 4. CHILD_FLAG (optional) 5. QNAME_QUERY_FLAG (optional) 6. RPD_NAME (optional) 7. CHILD_TYPE (optional) Output 1. XUDML_TEXT 2. ERROR_MESSAGES
表4-6は、メタデータ問合せプロシージャの入力および出力パラメータと、それぞれの説明を示します。
表4-6 メタデータ問合せプロシージャのパラメータと説明
パラメータ | 説明 |
---|---|
OBJECT_TYPES |
検索するオブジェクト・タイプのリスト。複数のオブジェクト・タイプを問い合せるには、各オブジェクト・タイプをカンマで区切って追加します。 たとえば、サブジェクト領域オブジェクトとプレゼンテーション・カタログ・オブジェクトを問い合せるには、object_typesの値を「2000,4004」と設定します。この例では、サブジェクト領域オブジェクトのタイプID値は2000であり、プレゼンテーション・カタログ・オブジェクトのタイプID値は4004です。 |
OBJECT_NAME |
(オプション)名前に一致するオブジェクトをフィルタします。この名前は、完全修飾名ではありません。 たとえば、「AtomicStar」という名前のすべてのサブジェクト領域を問い合せるには、OBJECT_TYPESパラメータを「2000」に、OBJECT_NAMEパラメータを「AtomicStar」に設定します。 OBJECT_PARENTを使用している場合は、OBJECT_NAMEを空にすることはできません。 |
OBJECT_PARENT |
(オプション)親オブジェクト名に基づいてオブジェクトをフィルタします。このパラメータは、完全修飾名を指定する場合に使用します。 |
CHILD_FLAG |
(オプション)このパラメータをtrueに設定して問合せを行うと、問い合せたオブジェクトのすべての子オブジェクトが返されます。たとえば、オブジェクト・タイプ・パラメータをビジネス・モデルと設定して、子フラグ・パラメータをtrueに設定すると、ツリー内のビジネス・モデルの下位にあるすべてのオブジェクトが返されます。 |
QNAME_QUERY_FLAG |
(オプション)このパラメータをtrueに設定して問合せを行うと、XUDMLフラグメントではなく修飾名が返されます。このパラメータを設定しないで問合せを行うと、デフォルトでXUDMLフラグメントが返されます。 |
RPD_NAME |
(オプション)このパラメータは現在使用されていません。今後使用するために予約されています。 |
CHILD_TYPE |
(オプション)このパラメータをtrueに設定して問合せを行うと、子のリストがタイプIDのカンマ区切りリストで指定されたタイプでフィルタされ、該当するタイプの子のみが返されます。このパラメータをデフォルトの空のままにすると、すべてのタイプの子オブジェクトが返されます。このパラメータは、CHILD_FLAGパラメータがtrueに設定されている場合にのみ適用できます。 |
XUDML_TEXT |
すべてのメタデータに対して返されたXML表現。XMLデータが大きすぎて1行に収まらない場合は、複数行に分割された結果が返されます。完全な形式のOracle BI Server XMLドキュメントを得るには、結果行を連結する必要があります。 |
ERROR_MESSAGES |
問合せの実行の結果返されたすべてのエラーを保持します。 |
プロジェクト問合せプロシージャは、リポジトリ内のプロジェクトを確認するために使用します。出力される結果セットには、リポジトリ内で定義されたプロジェクトのリストが含まれます。
このプロシージャの構造は、次のとおりです。
NQSQueryMetadataProjects Input 1. RPD_NAME (optional) Output 1. PROJECT_NAME
表4-7は、プロジェクト問合せプロシージャの入力および出力パラメータと、それぞれの説明を示します。