Oracle® Fusion Middleware Oracle Enterprise Repository統合ガイド

11g リリース1 (11.1.1.7)

B72433-01(原本部品番号:E15754-11)

目次

例一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

リリース11.1.1.7用のこのガイドでの新しい情報

第I部 Oracle Enterprise Repositoryコネクタ

1 アーティファクト・ストアの構成

- 1.1 概要

- 1.2 アーティファクト・ストアの作成および構成

- 1.3 新しいアーティファクト・ストアの選択

2 ClearCase統合

- 2.1 ClearCase Webインタフェース

- 2.1.1 概要

- 2.1.2 前提条件

- 2.1.3 リポジトリとアセットの作成および構成

- 2.2 ファイル・ストア

- 2.2.1 概要

- 2.2.2 Oracle Enterprise Repositoryへのファイル・ストア機能の追加

- 2.2.3 ファイル・ストアの作成

- 2.2.4 ファイル・ストアのためのアーティファクト・ストアの構成

- 2.2.5 ファイル・ストアのアーティファクト・ストアによるアセットへのファイルの追加

- 2.2.6 ファイル・ストアの使用

- 2.3 ClearQuest統合

- 2.3.1 ClearQuestの追加

- 2.3.2 ClearQuestアーティファクト・ストアの構成

- 2.3.3 ClearQuestのアーティファクト・ストアによるアセットへのファイルの追加

3 Harvest-HTTP Repository Host Integration

- 3.1 概要

- 3.2 インストール

- 3.3 アーティファクト・ストアの構成

- 3.4 アセットへのHarvestアーティファクト・ストアの追加

4 Serena ChangeMan統合

- 4.1 Serena Changemanプラグインの追加

- 4.2 アーティファクト・ストアの構成

- 4.3 PVCSアーティファクト・ストアの構成

- 4.4 PVCSリポジトリによるアセットへのファイルの追加

- 4.5 セキュリティに関する考慮事項

第II部 Oracle Enterprise Repositoryとランタイム・ツールとの統合

5 コード・コンプライアンス・インスペクタとの統合

- 5.1 概要

- 5.1.1 提供されたカタログについて

- 5.1.2 OERのためのCCIの実行 - 推奨手順

- 5.2 コンプライアンスのチェックおよびOERのレポート・データの同期

- 5.2.1 CCIレポート・ファイルにアクセスするためのアーティファクト・ストアの使用

- 5.2.2 checkComplianceコマンドの実行

- 5.2.3 CCIとOERの同期の実行

- 5.3 レポートの構成

- 5.3.1 レポートのレビューおよびコンプライアンスの問題の修正

- 5.3.2 サーバーへのレポート・ファイルのポスト

6 Enterprise Manager統合ユーティリティ

- 6.1 概要

- 6.1.1 前提条件

- 6.1.2 Enterprise Manager統合ユーティリティの取得

- 6.1.3 高レベルなユースケース

- 6.2 Enterprise Manager統合ユーティリティの使用

- 6.2.1 コマンドラインからの実行

- 6.2.2 Enterprise Managerからのスケジュール

- 6.2.3 メトリックの発行

- 6.2.3.1 Oracle Service Bus

- 6.2.3.2 BPEL PM

- 6.2.3.3 WebLogic Webサービス

- 6.2.3.4 Oracle SOA Suite 11g

- 6.2.3.5 アーティファクトの作成

- 6.2.3.6 エンドポイントの作成

- 6.2.3.7 更新するメトリック

- 6.3 Enterprise Manager統合ユーティリティの構成

- 6.3.1 コマンドライン・ユーティリティのリポジトリおよびEnterprise Manager接続情報の設定

- 6.3.2 拡張構成

- 6.3.2.1 メトリックのマッピング

- 6.3.2.2 ターゲット・ファインダ

- 6.3.2.3 ロギング

- 6.4 構成ファイルのパスワードの暗号化

- 6.5 既知の問題

- 6.5.1 不正な暗号化パスワードの使用

7 Amberpointとの統合

第III部 Oracle Enterprise Repositoryと開発環境との統合

8 開発環境との統合

- 8.1 概要

- 8.2 ベスト・プラクティス

- 8.2.1 アセットの作成プロセス

- 8.2.1.1 ポリシー

- 8.2.1.2 アセットの提案または発行

- 8.2.2 アセットの使用プロセス

- 8.2.2.1 プリスクリプティブな再利用

- 8.2.2.2 開発者主導の検出

- 8.2.2.3 使用状況の自動検出

- 8.3 高レベルなユースケース

- 8.3.1 ファイルの発行

- 8.3.2 ファイルの収集

- 8.3.3 Oracle Enterprise Repositoryの検索

- 8.3.4 アセット詳細の表示

- 8.3.5 アーティファクトのダウンロード

- 8.3.6 プリスクリプティブな再利用

- 8.3.7 使用状況の自動検出

9 IDEとの統合をサポートするためのOracle Enterprise Repositoryの構成

- 9.1 ハーベスタのインストール

- 9.2 Oracle Enterprise RepositoryプロジェクトへのIDEユーザーの割当て

- 9.3 コンプライアンス・テンプレートの設定

- 9.4 使用状況の自動検出の設定

10 Oracle Enterprise Repositoryとの統合をサポートするためのIDEの構成

- 10.1 Oracle JDeveloperの構成

- 10.1.1 Oracle JDeveloper 11g R1パッチセット・リリースとの統合

- 10.1.2 Oracle JDeveloper 11g R1との統合

- 10.1.3 Oracle JDeveloper 10gとの統合

- 10.2 Eclipseの構成

- 10.2.1 ANTによるEclipseでの収集の有効化

- 10.2.1.1 ANTによるハーベスタを使用するEclipse環境の設定

- 10.2.1.2 ANTによるEclipse環境での収集

- 10.2.2 Oracle Enterprise Repositoryプラグインの構成

- 10.2.2.1 リポジトリ・アクセス用のOracle Enterprise Repositoryプラグインの構成

- 10.2.2.2 Eclipse用にOracle Enterprise Repositoryプラグインを使用するための前提条件

- 10.2.3 Oracle Enterprise Repositoryプリファレンスの構成

- 10.2.4 使用状況の自動検出の有効化

- 10.3 VS .NETの構成

- 10.3.1 VS .NETでの収集の有効化

- 10.3.2 Oracle Enterprise Repositoryプラグインの構成

- 10.3.2.1 前提条件

- 10.3.2.2 インストール

- 10.3.3 Oracle Enterprise Repositoryへの接続の構成

- 10.3.4 .NETソリューションへのOracle Enterprise Repositoryプロジェクトの割当て

- 10.3.5 使用状況の自動検出の有効化

- 10.3.5.1 SFIDの概要

- 10.3.5.2 使用状況の自動検出の構成

11 IDEによるOracle Enterprise Repositoryとの相互作用

- 11.1 Oracle JDeveloperの使用

- 11.1.1 アーティファクトの収集

- 11.1.2 Oracle Enterprise Repositoryの検索

- 11.1.3 アセット詳細の表示

- 11.1.4 アーティファクトのダウンロード

- 11.1.4.1 JDeveloperアプリケーションとOracle Enterprise Repositoryとの関連付け

- 11.1.4.2 Oracle Enterprise RepositoryからのWSDLまたはサービスの使用

- 11.1.5 プリスクリプティブな再利用

- 11.2 Eclipseの使用

- 11.2.1 ファイルの発行

- 11.2.2 アーティファクトの収集

- 11.2.3 Oracle Enterprise Repositoryの検索

- 11.2.4 アセット詳細の表示

- 11.2.5 アーティファクトのダウンロード

- 11.2.6 プリスクリプティブな再利用

- 11.2.7 使用状況の自動検出

- 11.3 VS .NETの使用

- 11.3.1 ファイルの発行

- 11.3.2 アーティファクトの収集

- 11.3.3 Oracle Enterprise Repositoryの検索

- 11.3.4 アセット詳細の表示

- 11.3.4.1 リポジトリ・アセット・ペインへのアクセス

- 11.3.4.2 Oracle Enterprise Repositoryログへのアクセス

- 11.3.5 アーティファクトのダウンロード

- 11.3.6 使用状況の自動検出

12 SAPとの統合

- 12.1 概要

- 12.2 前提条件

- 12.3 SAPとの統合の構成

- 12.3.1 SAPアセットとOracle Enterprise Repositoryアセット間の分類の調整

- 12.3.2 SAPエンタープライズ・サービス・レジストリからOERへの選択したSAPサービス・アセットのエクスポート

- 12.3.3 SAPからの新しいサービスの受信

- 12.3.4 SAPからの実行中更新の構成

- 12.3.5 エンドユーザーの使用可能なSAPサービスの可視性

第IV部 カスタム統合の開発

13 リポジトリ拡張性フレームワーク

- 13.1 REXの概要

- 13.2 REXのアーキテクチャ

- 13.2.1 サブシステムの概要

- 13.2.2 CRUD-Qネーミング規則

- 13.2.2.1 メソッド呼出しの原子性

- 13.2.2.2 呼出し間のトランザクションの未サポート

- 13.2.3 基本的なWSDLのデータ型

- 13.2.4 Oracle Enterprise Repository REXのバージョンの考慮事項

- 13.3 基本的な概念

- 13.3.1 Oracle Enterprise RepositoryでのオープンAPIの有効化

- 13.3.2 WSDLの使用

14 アーティファクト・ストアAPI

- 14.1 概要

- 14.2 ユースケース

- 14.2.1 ユースケース: 存在しないアーティファクト・ストアの作成

15 許容値リストAPI

- 15.1 概要

- 15.2 ユースケース

- 15.2.1 ユースケース: 許容値リストの作成および編集

- 15.2.2 ユースケース: 許容値リストの検索およびアセットでの使用

16 アセットAPI

- 16.1 概要

- 16.1.1 定義

- 16.1.2 サンプル・コード

- 16.1.3 関連するサブシステム

- 16.2 ユースケース

- 16.2.1 ユースケース: 新しいアセットの作成

- 16.2.2 ユースケース: XMLからの新しいアセットの作成

- 16.2.3 ユースケース: アセットの変更

- 16.2.4 ユースケース: アセットへのユーザーの割当て

- 16.2.5 ユースケース: アセットの検索の作成

- 16.2.6 ユースケース: アセット・ステータスのアップグレード

- 16.2.7 ユースケース: アセット・ステータスのダウングレード

- 16.2.8 ユースケース: プロジェクトからのコンプライアンス・テンプレートの適用と削除

- 16.2.9 ユースケース: 新しいバージョンのアセットの作成および古いバージョンのリタイア

- 16.2.10 ユースケース: アセットのグループの削除

- 16.2.11 ユースケース: アセットの検索およびカスタム・データのアップグレード

- 16.2.12 ユースケース: アセットのタブの読込み

- 16.2.13 ユースケース: タブ・タイプに基づいたアセットのタブの取得

- 16.2.14 ユースケース: タブの承認および未承認

- 16.2.15 ユースケース: 特定のタブ用のアセットのメタデータの読込み

17 アセット・タイプAPI

- 17.1 概要

- 17.2 ユースケース

- 17.2.1 ユースケース: 新しいタイプの作成および編集

- 17.2.2 ユースケース: コンプライアンス・テンプレート・タイプの作成

- 17.2.3 ユースケース: タイプの検索

- 17.2.4 ユースケース: アセット・タイプのタブの取得

- 17.2.5 ユースケース: すべてのアセット・タイプのタブの取得

18 カテゴリ分けタイプとカテゴリ分けAPI

- 18.1 概要

- 18.2 ユースケース

- 18.2.1 ユースケース: カテゴリ分けタイプの作成

- 18.2.2 ユースケース: カテゴリ分けタイプの操作

- 18.2.3 ユースケース: カテゴリ分けの操作

19 CMFエントリ・タイプAPI

- 19.1 概要

- 19.2 ユースケース

- 19.2.1 ユースケース: CMFエントリ・タイプの操作

20 カスタム・アクセス設定API

- 20.1 概要

- 20.2 ユースケース

- 20.2.1 ユースケース: カスタム・アクセス設定タイプ・リストの取得

- 20.2.2 ユースケース: デフォルトのカスタム・アクセス設定名の取得

21 部門API

- 21.1 概要

- 21.2 ユースケース

- 21.2.1 ユースケース: 部門の操作

22 抽出API

- 22.1 概要

- 22.2 ユースケース

- 22.2.1 ユースケース: アセットの抽出

- 22.2.2 ユースケース: 抽出の読込み

- 22.2.3 ユースケース: 抽出の更新

23 REXクライアントのローカライズ

- 23.1 概要

- 23.2 ユースケース

- 23.2.1 ユースケース: REX例外からのローカライズ済のメッセージの作成

- 23.2.2 REX監査メッセージからのローカライズ済のメッセージの作成

24 通知API

- 24.1 概要

- 24.2 ユースケース

- 24.2.1 ユースケース: 読込み通知置換リストの作成と通知の作成

25 ポリシーAPI

- 25.1 概要

- 25.2 ユースケース

- 25.2.1 ユースケース: ポリシーの作成

- 25.2.2 ユースケース: すべてのポリシーの取得

- 25.2.3 ユースケース: ポリシー・アサーションの取得または設定

- 25.2.4 ユースケース: アセットに適用されたポリシーの取得

- 25.2.5 ユースケース: アセットに適用されたポリシーの設定

- 25.2.6 ユースケース: アセット・コンプライアンスの評価

26 プロジェクトAPI

- 26.1 概要

- 26.2 ユースケース

- 26.2.1 ユースケース: 新しいプロジェクトの作成

- 26.2.2 ユースケース: プロジェクトの読込み

- 26.2.3 ユースケース: プロジェクトの検証

- 26.2.4 ユースケース: プロジェクトの更新

- 26.2.5 ユースケース: プロジェクトの作成済アセットの更新

- 26.2.6 ユースケース: プロジェクトからの作成済アセットの削除

- 26.2.7 ユースケース: プロジェクトのアセット使用状況の更新

- 26.2.8 ユースケース: 非表示のアセットのあるプロジェクトの終了

- 26.2.9 ユースケース: プロジェクトへのユーザーと関連プロジェクトの追加

- 26.2.10 ユースケース: プロジェクトからの関連プロジェクトとユーザーの削除

- 26.2.11 ユースケース: プロジェクトの抽出の更新 - 同じプロジェクトまたは別のプロジェクトにおける別のユーザーへの抽出の再割当て

- 26.2.12 ユースケース: プロジェクトのユーザーの更新 - 別のプロジェクトへのユーザーとその抽出の再割当て

- 26.2.13 ユースケース: プロジェクトのユーザーの更新 - 別のプロジェクトへのユーザーのみ(ユーザーの抽出は除く)の再割当て

- 26.2.14 ユースケース: プロジェクトとアセット用に指定された値の読込み

- 26.2.15 ユースケース: プロジェクトとアセット用に指定された値の更新 - 予測値の使用

- 26.2.16 ユースケース: プロジェクトとアセット用に指定された値の更新 - 使用者の値の使用

- 26.2.17 ユースケース: プロジェクトとアセット用に指定された値の更新 - プロジェクト・リーダーの値の使用

27 リレーションシップ・タイプAPI

- 27.1 概要

- 27.2 ユースケース

- 27.2.1 ユースケース: 新しいリレーションシップ・タイプの作成

- 27.2.2 ユースケース: 関連アセットの変更

- 27.2.3 ユースケース: 関連アセットの問合せ

28 ロールAPI

- 28.1 概要

- 28.2 ユースケース

- 28.2.1 ユースケース: ロールの操作

29 サブスクリプションAPI

- 29.1 概要

- 29.2 ユースケース

- 29.2.1 ユースケース: アセットに対するサブスクリプションの作成

- 29.2.2 ユースケース: アセットに対するサブスクリプションの削除

- 29.2.3 ユースケース: アセットに対するサブスクリプションの読込み

- 29.2.4 ユースケース: アセットに対してサブスクライブされたユーザーの読込み

30 システム設定API

- 30.1 概要

- 30.2 ユースケース

- 30.2.1 ユースケース: システム設定の問合せ

31 ユーザーAPI

- 31.1 概要

- 31.2 ユースケース

- 31.2.1 ユースケース: ユーザーの操作

32 ベンダーAPI

- 32.1 概要

- 32.2 ユースケース

- 32.2.1 ユースケース: ベンダーの操作

索引

例一覧

- 6-1 em-integration-settings.xmlのリポジトリおよびEnterprise Manager接続情報の設定

- 7-1 UDDIMappings.xmlファイルのメトリック部分

- 13-1 AuthTokenを取得してREX呼出しで使用する方法

- 13-2 SOAPフォルト・メッセージとして表されたOpenAPIException

- 13-3 DIME添付ファイルによるデータ送信の例

- 13-4 DIME添付ファイルによるデータ受信の例

- 14-1 ユースケース: 存在しないアーティファクト・ストアの作成

- 15-1 ユースケース: 許容値リストの作成および編集

- 15-2 ユースケース: リストへの許容値の移入

- 16-1 カスタム・データ・メソッドのサンプル・コード

- 16-2 ユースケース: 新しいアセットの作成

- 16-3 ユースケース: XMLからの新しいアセットの作成

- 16-4 ユースケース: アセットの変更

- 16-5 ユースケース: アセットへのユーザーの割当て

- 16-6 ユースケース: アセットの検索の作成

- 16-7 ユースケース: アセット・ステータスのアップグレード

- 16-8 ユースケース: アセット・ステータスのダウングレード

- 16-9 ユースケース: プロジェクトからのコンプライアンス・テンプレートの適用および削除

- 16-10 ユースケース: 新しいバージョンのアセットの作成

- 16-11 ユースケース: リポジトリからの不要なアセットの削除

- 16-12 ユースケース: アセットの検索およびカスタム・データのアップグレード

- 16-13 ユースケース: アセットのタブの読込み

- 16-14 ユースケース: タブ・タイプに基づいたアセットのタブの取得

- 16-15 ユースケース: タブの承認および未承認

- 16-16 ユースケース: 特定のタブ用のアセットのメタデータの読込み

- 17-1 ユースケース: 新しいタイプの作成および編集

- 17-2 ユースケース: コンプライアンス・テンプレート・タイプの作成

- 17-3 ユースケース: タイプの検索

- 17-4 ユースケース: アセット・タイプのタブ・リストの取得

- 17-5 ユースケース: すべてのアセット・タイプのタブの取得

- 18-1 ユースケース: カテゴリ分けタイプの作成

- 18-2 ユースケース: カテゴリ分けタイプの操作

- 18-3 ユースケース: カテゴリ分けの操作

- 19-1 ユースケース: CMFエントリ・タイプの操作

- 20-1 カスタム・アクセス設定のサンプル・コード

- 21-1 ユースケース: 部門の操作

- 22-1 ユースケース: アセットの抽出

- 22-2 ユースケース: 抽出の読込み

- 22-3 ユースケース: 抽出の更新

- 23-1 ユースケース: REX例外からのローカライズ済のメッセージの作成

- 23-2 REX監査メッセージからのローカライズ済のメッセージの作成

- 24-1 ユースケース: 読込み通知置換リストの作成と通知の作成

- 25-1 ユースケース: ポリシーの作成

- 25-2 ユースケース: すべてのポリシーの取得

- 25-3 ユースケース: ポリシー・アサーションの取得または設定

- 25-4 ユースケース: アセットに適用されたポリシーの取得

- 25-5 ユースケース: アセットに適用されたポリシーの更新

- 25-6 ユースケース: アセット・コンプライアンスの評価

- 26-1 ユースケース: 新しいプロジェクトの作成

- 26-2 ユースケース: プロジェクトの読込み

- 26-3 ユースケース: プロジェクトの検証

- 26-4 ユースケース: プロジェクトの更新

- 26-5 ユースケース: プロジェクトの作成済アセットの更新

- 26-6 ユースケース: プロジェクトからの作成済アセットの削除

- 26-7 ユースケース: プロジェクトのアセット使用状況の更新

- 26-8 ユースケース: 非表示のアセットのあるプロジェクトの終了

- 26-9 ユースケース: プロジェクトへのユーザーと関連プロジェクトの追加

- 26-10 ユースケース: プロジェクトに対するユーザーの追加と削除

- 26-11 ユースケース: プロジェクトからの関連プロジェクトとユーザーの削除

- 26-12 ユースケース: プロジェクトに特定のユーザーとプロジェクトを残す

- 26-13 ユースケース: プロジェクトの抽出の更新

- 26-14 ユースケース: 別のプロジェクトへのプロジェクト・ユーザーとユーザーの抽出の再割当て

- 26-15 ユースケース: 別のプロジェクトへのユーザーのみの再割当て

- 26-16 ユースケース: プロジェクトとアセット用に指定された値の読込み

- 26-17 ユースケース: プロジェクトとアセット用に指定された値の更新 - 予測値の使用

- 26-18 ユースケース: プロジェクトとアセット用に指定された値の更新 - 使用者の値の使用

- 26-19 ユースケース: プロジェクトとアセット用に指定された値の更新 - プロジェクト・リーダーの値の使用

- 27-1 ユースケース: 新しいリレーションシップ・タイプの作成

- 27-2 ユースケース: 関連アセットの変更

- 27-3 ユースケース: 関連アセットの問合せ

- 28-1 ユースケース: ロールの操作

- 29-1 ユースケース: アセットに対するサブスクリプションの作成

- 29-2 ユースケース: アセットに対するサブスクリプションの削除

- 29-3 ユースケース: アセットに対するサブスクリプションの読込み

- 29-4 ユースケース: アセットに対してサブスクライブされたユーザーの読込み

- 30-1 ユースケース: システム設定の問合せ

- 31-1 ユースケース: ユーザーの操作

- 32-1 ユースケース: ベンダーの追加または割当て

Oracle® Fusion Middleware

Oracle Enterprise Repository統合ガイド

11g リリース1 (11.1.1.7)

B72433-01(原本部品番号:E15754-11)

2013年2月

Enterprise Manager、Oracle JDeveloper、VS .NETをOracle Enterprise Repositoryとともに構成する方法について説明します。このガイドでは、Oracle Enterprise Repositoryコネクタについても説明します。

Oracle Fusion Middleware Oracle Enterprise Repository統合ガイド, 11g リリース1 (11.1.1.7)

B72433-01

Copyright © 2001, 2013 Oracle and/or its affiliates.All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

はじめに

Oracle Fusion Middleware Oracle Enterprise Repository統合ガイドでは、Enterprise Manager、Oracle JDeveloper、VS .NETをOracle Enterprise Repositoryとともに構成する方法について説明します。このガイドでは、Oracle Enterprise Repositoryコネクタについても説明します。

対象読者

このドキュメントは、開発環境を構成して、Oracle Enterprise Repositoryからファイルを簡単に作成したり、使用したりする必要のある、すべてのOracle Enterprise Repositoryユーザーを対象としています。また、このドキュメントは、REXおよびREX APIを使用する、すべてのOracle Enterprise Repositoryユーザーも対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWeb サイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、Oracle Enterprise Repository 11g リリース1(11.1.1.7)のドキュメント・セットにある次のドキュメントを参照してください。

- OTNのOracle Enterprise Repository: Oracle Technology Network (OTN)のOracle Enterprise RepositoryのホームページのURLは次のとおりです。
http://www.oracle.com/technetwork/middleware/repository/overview/index-100687.html

- SOAブログ: 次のURLにある最新のSOAブログを参照してください。
http://blogs.oracle.com/governance

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

このガイドのリリース11.1.1.7に関する新しい内容

次の表に、追加または更新された内容を示します。

既知の問題のリスト(リリース・ノート)については、http://www.oracle.com/technetwork/middleware/docs/soa-aiafp-knownissuesindex-364630.htmlにある、「Known Issues for for Oracle SOA Products and Oracle AIA Foundation Pack」を参照してください。

内容

変更内容

第5章

コード・コンプライアンス・インスペクタの使用方法を説明する新規の章

16.2.15項

追加されたユースケース: 特定のタブ用のアセットのメタデータの読込み

第I部

Oracle Enterprise Repositoryコネクタ

この部では、Oracle Enterprise Repositoryコネクタを開始する方法について説明します。

この部は、次の章で構成されています。

- 第1章「アーティファクト・ストアの構成」

- 第2章「ClearCase統合」

- 第3章「Harvest-HTTP Repository Host Integration」

- 第4章「Serena ChangeMan統合」

1 アーティファクト・ストアの構成

この章では、Oracle Enterprise Repositoryのアセットに関連するすべてのファイルを格納するために使用するアーティファクト・ストアを作成、構成および選択する方法について説明します。

この章では、次の項目について説明します。

- 1.1項「概要」

- 1.2項「アーティファクト・ストアの作成および構成」

- 1.3項「新しいアーティファクト・ストアの選択」

1.1 概要

アーティファクト・ストアは、Oracle Enterprise Repositoryのアセットに関連するファイルが格納される場所です。Oracle Enterprise Repositoryのホームページからアセット・エディタ・ウィンドウを起動します。

1.2 アーティファクト・ストアの作成および構成

この項では、アーティファクト・ストアを作成して構成する方法について説明します。

1. アセットの編集/管理をクリックします。図1-1に示すように、アセット・エディタが表示されます。

図1-1 アセット・エディタ

「図1-1 アセット・エディタ」の説明

2. 「アクション」メニューで、アーティファクト・ストアの構成を選択します。図1-2に示すように、アーティファクト・ストアの構成ダイアログが表示されます。

図1-2 アーティファクト・ストアの構成ダイアログ

「図1-2 アーティファクト・ストアの構成ダイアログ」の説明

3. 「追加」をクリックします。図1-3に示すように、新規アーティファクト・ストアの作成ダイアログが表示されます。

図1-3 新規アーティファクト・ストアの作成ダイアログ

「図1-3 新規アーティファクト・ストアの作成ダイアログ」の説明

4. 「名前」テキスト・ボックスにアーティファクト・ストアの一意の名前を入力します。

5. 「タイプ」リストでアーティファクト・ストアのタイプを選択します(この例では、UNCを使用しています)。

6. 「ホスト名」ボックスにアプリケーション・サーバーのホスト名を入力します。

7. 「パス」テキスト・ボックスにパスの残りの部分を入力します。
ホスト名とパスが付いたファイル・リンクが「URL」テキスト・ボックスに表示されます。このリンクを切り取って、ファイル・エクスプローラまたはブラウザ・ウィンドウに貼り付け、ファイルを表示します。

8. 必要に応じて、「ユーザー名」ボックスと「パスワード」ボックスに適切な情報を入力します。

9. 「OK」をクリックします。

10. 1.3項「新しいアーティファクト・ストアの選択」で説明されているように、送信アップロード用のアーティファクト・ストアのシステム設定を使用して、アーティファクト・ストアを有効にします。

1.3 新しいアーティファクト・ストアの選択

1.2項「アーティファクト・ストアの作成および構成」で説明されているようにアーティファクト・ストアを構成した後、Oracle Enterprise Repositoryの「管理」ページで送信アップロード用のアーティファクト・ストアのシステム設定を使用して、アーティファクト・ストアを選択します。

1. Oracle Enterprise Repositoryの「管理」ページを開きます。

2. 左側のパネルで、「システム設定」を選択します。

3. 図1-3に示すように、システム設定の「サーバー設定」グループでアップロード領域セクションを見つけます。

4. 送信アップロード用のアーティファクト・ストア・リストを使用して、新しく作成したアーティファクト・ストアを選択します。

5. 「保存」をクリックします。

2 ClearCase統合

この章では、ClearCaseリポジトリの設定、ファイル・ストアの追加、ClearQuestとOracle Enterprise Repositoryの統合を行う方法について説明します。

この章では、次の項目について説明します。

- 2.1項「ClearCase Webインタフェース」

- 2.2項「ファイル・ストア」

- 2.3項「ClearQuest統合」

2.1 ClearCase Webインタフェース

この項では、ClearCaseリポジトリを設定するために実行する手順について説明します。これによって、将来的にClearCaseファイルを使用またはダウンロードするために、アセットにリンクできるようになります。この項の内容は次のとおりです。

- 2.1.1項「概要」

- 2.1.2項「前提条件」

- 2.1.3項「リポジトリとアセットの作成および構成」

2.1.1 概要

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

- WebSphere 5.x Apacheプラグイン

- WebLogic 8.1 Tuxedoプラグイン

WebSphere 5.x Apacheプラグイン

HTTPサーバー(Apache、IIS、IBM HTTPサーバーなど)を使用して、mod_was_ap20_http.soまたはmod_was_ap20_http.dllプラグインを使用するWebsphere 5.xサーバーに接続する場合、このコネクタで使用されるplugin-cfg.xmlのドキュメントに構成の変更を適用する必要があります。

HTTPサーバー用にplugin-cfg.xmlドキュメントを再生成するためにcrtplugininstアプリケーションが実行されるたびに、構成要素には、デフォルトで値AcceptAllContent=falseが含まれます。このパラメータをtrueに変更して、deltaVリクエストをHTTPサーバーと、Oracle Enterprise RepositoryをホストするWebsphereアプリケーション・サーバー間で渡せるようにする必要があります。Websphereプラグインを使用して、この制限をHTTPサーバーのみに適用し、2つのサーバーに接続します。

WebLogic 8.1 Tuxedoプラグイン

Weblogic Tuxedoプラグインを使用する場合、8.1 SP3の要件はアプリケーション・サーバーとApacheサーバー上のTuxedoプラグインの両方に適用されます。

2.1.2 前提条件

ClearCaseを使用する前に、次の前提条件を実行する必要があります。

- アプリケーション・サーバーは、UTF-8キャラクタ・セットをサポートして、ClearCaseとOracle Enterprise Repositoryが正しく連携できるようにする必要があります。

- アプリケーション・サーバーがClearCaseサーバーにアクセスできることを確認します。

- CCWebまたはClearTool(あるいはその両方)をアプリケーション・サーバーのコンピュータにインストールして有効にする必要があります。詳細は、ClearCaseのドキュメントを参照してください。

UTF-8サポートの有効化

使用しているサーバーに基づいて、次のようにTF-8キャラクタ・セットを有効にします。

- Weblogic 7.x/8.x
システム・プロパティのclient.encoding.override、およびキャラクタ・セットの名前と同様のfile.encodingを設定して、Weblogicサーバー・インスタンスにデプロイされたすべてのWeblogic Webアプリケーション用にキャラクタ・セットを指定できます。このシステム・プロパティをJAVA_OPTIONS(たとえば、JAVA_OPTIONS=-Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8など)と呼ばれる環境変数に設定します。

これらの値は、ドメインの起動オプションの一部として指定することもできます。

- Websphere 5.x
サーバーのために汎用JVMの引数を変更して、パラメータ-Dclient.encoding.override=UTF-8を含めます。

- Tomcat 5.0.25
次のように、CATALINA_HOME/confディレクトリにあるserver.xmlファイル内のConnector要素のURIEncoding値を変更します。

<Connector port="8080" URIEncoding="UTF-8" ...

注意:

Oracle Enterprise Repositoryアプリケーション内からClearCaseサーバーを参照してファイルまたはディレクトリ構造を表示する機能は、ファイル・ストア統合で提供されています。

重要な注意事項

1. CCWebでビューを構築します。

2. CCWebで構築したビューに基づいてリンクを作成します。

3. アセット・エディタ内にあるアセットのファイル情報セクション内にリンクを追加します。

4. 「テスト」ボタンをクリックして、リンクが有効であることを確認します。

5. ブラウザのアドレス・ウィンドウにURLを貼り付けて、リンクにアクセスできる必要もあります。アクセスできない場合、リンク自体がエラーになるか、ClearCaseサーバーへのネットワーク接続に問題が発生する可能性があります。

2.1.3 リポジトリとアセットの作成および構成

Oracle Enterprise Repository内にリポジトリとアセットを作成および構成できます。この項の内容は次のとおりです。

- アーティファクト・ストアの構成

- ファイルの抽出元のアーティファクト・ストアの設定

- ClearCaseファイルのアセットの作成

- ClearCaseファイルのアセットへのリンク

- アセットおよびClearCaseファイルの抽出

アーティファクト・ストアの構成

この手順は、Oracle Enterprise Repositoryのアセット・エディタ画面で実行します。

1. 「アクション」メニューを開きます。

2. アーティファクト・ストアの構成をクリックします。

3. 「追加」をクリックします。図2-1に示すように、新規アーティファクト・ストアの作成ダイアログが表示されます。

4. 図2-1に示すように、適切な情報を入力します。

図2-1 新規アーティファクト・ストアの作成ダイアログ

「図2-1 新規アーティファクト・ストアの作成ダイアログ」の説明

5. 「OK」をクリックします。

ファイルの抽出元のアーティファクト・ストアの設定

この手順は、Oracle Enterprise Repositoryの「管理」画面で実行します。

1. 「システム設定」をクリックします。

2. 図2-2で示すように、「検索」ボックスにcmee.server.paths.upload-repositoryと入力します。

図2-2 「検索」ボックス

「図2-2 「検索」ボックス」の説明

図2-3に示すように、「サーバー設定」セクション内にアップロード領域セクションが表示されます。

図2-3 アップロード領域セクション

「図2-3 アップロード領域セクション」の説明

3. 送信アップロード用のアーティファクト・ストア・リストを使用して、ClearCaseリポジトリを選択します。

4. 終了したら、「保存」をクリックします。

ClearCaseファイルのアセットの作成

1. Oracle Enterprise Repositoryの「アセット」画面でアセットの送信をクリックします。
新しいアセットはアセット・エディタの「ファイル」メニューでも作成できます。

2. ドロップダウン・メニューから「アセット・タイプ」を選択します。

3. 「名前」テキスト・ボックスに新しいアセットの名前を入力します。

4. 「説明」フィールドに、簡単な説明を入力します。

注意:

登録プロセスが完了するまでは、アセットの詳細はOracle Enterprise Repositoryの「アセット」画面に表示されません。

ClearCaseファイルのアセットへのリンク

1. アセット・エディタでアセットを開きます。

2. 「ファイル情報」セクションを見つけます(通常は「一般」タブ)。

3. 「追加」をクリックします。

4. 名前または説明(あるいはその両方)を作成します。

5. 「編集」をクリックします。

6. 「リポジトリ・ファイル」オプションを選択します。

図2-4 URLの編集ダイアログ

「図2-4 URLの編集ダイアログ」の説明

7. 「ホスト」リストでClearCaseを選択します。

- パスには、次のように、アーティファクト・ストア・セクションで構成された情報が指定されています。

- http://clearcase.example.com/ccaseweb/bin/ccweb/test.txt?dir=//usr/vobs/geneva&elem=test.txt&cmd=view&user=ccuser&password=<password>

8. ファイル名フィールドにCCWebのビューのパスとファイル名を入力します。

9. 「表示」をクリックして、ファイルをテストします。

アセットおよびClearCaseファイルの抽出

1. Oracle Enterprise Repositoryの「アセット」画面で、「検索」を使用して、新しく作成したアセットを見つけます。

2. アセットをクリックして、アセット詳細の表示を開きます。

3. 使用/ダウンロードをクリックします。図2-5に示すように、「使用-ダウンロード」ページが表示されます。

図2-5 「使用-ダウンロード」ページ

「図2-5 「使用-ダウンロード」ページ」の説明

ClearCaseファイルは、アセットともにダウンロードで使用できる必要があります。

2.2 ファイル・ストア

ファイル・ストアによって、Oracle Enterprise Repositoryは基礎となる専用のリポジトリと統合できます。また、ファイル・ストアによって、Rational ClearCaseとの統合も可能になります。

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

- 2.2.1項「概要」

- 2.2.1項「Oracle Enterprise Repositoryへのファイル・ストア機能の追加」

- 2.2.3項「ファイル・ストアの作成」

- 2.2.4項「ファイル・ストアのためのアーティファクト・ストアの構成」

- 2.2.5項「ファイル・ストアのアーティファクト・ストアによるアセットへのファイルの追加」

- 2.2.6項「ファイル・ストアの使用」

2.2.1 概要

Rational ClearCaseとファイル・ストアを統合すると、アセット・レジストラでClearCaseリポジトリを参照できるようになります。レジストラでは、アセットの抽出時に使用されるファイルの特定のブランチとバージョンを選択できます。さらに、ファイルの構成仕様は、WSADまたはXDEで使用するために使用可能にすることができます。

Rational ClearCaseでファイル・ストアを使用するために、Rational ClearCaseクライアントをアプリケーション・サーバー上にインストールおよび構成する必要があります。ClearCaseに接続すると、常にClearCaseクライアントのClearToolアプリケーションが使用され、共通のClearCaseの認証資格情報セットが共有されます。

2.2.2 Oracle Enterprise Repositoryへのファイル・ストア機能の追加

Oracle Enterprise Repositoryにファイル・ストア機能を追加するには、次の手順を実行します。

1. OracleのダウンロードWebサイトから、Oracle Enterprise Repositoryのインストール・パッケージをダウンロードします。

2. ダウンロードしたファイルを一時ディレクトリに解凍します。

3. 次の場所から一時ディレクトリにSQLスクリプトをダウンロードします。
https://support.oracle.com/oip/faces/secure/km/DownloadAttachment.jspx?attachid=825973.1:SCMIntegration

4. データベースに適切なSQLツールを使用して、一時ディレクトリにあるSQLスクリプトを実行して、Oracle Enterprise Repositoryデータベースにファイル・ストアのアーティファクト・ストアを追加します。

5. Oracle Enterprise Repositoryのメニュー・バーの「管理」リンクをクリックします。

6. 「管理」画面で、「システム設定」をクリックします。

7. プロパティregistry.advanced.filestores.enabledを有効にします。「ファイル・ストア」と呼ばれる新しいセクションが表示されます。アプリケーションで自動的にこのセクションに移動します。

8. 詳細アクセス・ファイル・ストアにtrueを設定します。

9. 「保存」をクリックします。

10. 「管理」画面をリフレッシュして、基本的なアクセス設定の前に、「ファイル・ストア」セクションを左側のリストに表示します。

2.2.3 ファイル・ストアの作成

1. Oracle Enterprise Repositoryをホストするアプリケーション・サーバー上にRational ClearCaseクライアントをインストールします。

2. アプリケーション・サーバーでcleartool.exeファイルを見つけます。cleartool.exeの完全なファイル・パスが必要です。これは、cleartool.pathと呼ばれるファイル・ストア・パラメータで使用します。

3. アプリケーション・サーバー上のClearCaseクライアントで、Oracle Enterprise Repositoryで使用されるビューを作成します。ビューの名前にFlashlineという語を含めることをお薦めします。ビューのアクセス・パスは、view.dirと呼ばれるファイル・ストア・パラメータで使用します。

4. 作成したビューに必要なClearCase VOBをすべてマウントします。VOBごとに、別々のファイル・ストアを作成する必要があります。VOB名は、vob.pathと呼ばれるファイル・ストア・パラメータの最初の部分になります。

5. アプリケーション・サーバーで一時ディレクトリを見つけます。一時ディレクトリの完全パスは、tmp.dirと呼ばれるファイル・ストア・パラメータで使用します。

6. Oracle Enterprise Repositoryのメニュー・バーの「管理」リンクをクリックします。

7. 「管理」画面で、「ファイル・ストア」 セクションを見つけます。

8. 「新規作成」をクリックして、新しいファイル・ストアを作成します。図2-6に示すように、新規ファイル・ストアの作成ダイアログが表示されます。

図2-6 新規Aファイル・ストアの作成ダイアログ

「図2-6 新規ファイル・ストアの作成ダイアログ」の説明

9. 次のパラメータのフィールドに入力します。

- 名前: ファイル・ストアで参照されるClearCase VOBの代表的な名前を指定します。ファイル・ストアのタイプがClearCaseであることを示すには、先頭にCCを付けることをお薦めします。ファイル・ストアの名前に、CC_VOBNAMEをお薦めします。

- ストア・パス: 最初のClearCaseファイル・ストアには、/cc/store01を、2番目のClearCaseファイル・ストアには、/cc/store02を入力し、以降も同様にします。「ストア・パス」フィールドは、Oracle Enterprise Repositoryのシンボリック・パスです。すべてのファイル・ストアでは、共通のURLを使用して、ファイルを抽出します。ストア・パスはURLに表示され、実際のコンテンツに対して統合をホストするファイル・ストアを示します。ストア・パスはすべてのファイル・ストア間で一意である必要があります。/cc/store01という構成をお薦めします。

- ストア・タイプ: リストからClearCaseを選択します。

- cleartool.path: アプリケーション・サーバー上のcleartool.exeファイルの完全ファイル・パスを入力します。

- vob.path: アプリケーション・サーバー上のビューにマウントされるClearCase VOBの名前を入力します。

- view.dir: アプリケーション・サーバー上のClearCaseビューのアクセス・パスを入力します。

- tmp.dir: アプリケーション・サーバー上の一時ディレクトリを入力します。

10. 「接続テスト」ボタンをクリックして、ClearCaseクライアントへの接続をテストします。接続が適切に構成されていると、メッセージ「テストが成功しました」が表示されます。

11. 「保存」ボタンをクリックして、アーティファクト・ストアで使用できるようにファイル・ストアを保存します。

2.2.4 ファイル・ストアのためのアーティファクト・ストアの構成

この手順は、アセット・エディタ画面で実行します。

1. 「アクション」メニューで、アーティファクト・ストアの構成を選択します。アーティファクト・ストアの構成ダイアログが表示されます。

2. 「追加」をクリックします。図2-7に示すように、新規アーティファクト・ストアの作成ダイアログが表示されます。

図2-7 新規アーティファクト・ストアの作成ダイアログ

「図2-7 新規アーティファクト・ストアの作成ダイアログ」の説明

3. アーティファクト・ストアの名前を入力します。CC_VOBNAMEをお薦めします。

4. 「タイプ」リストで、アーティファクト・ストアのタイプとして「FileStore」を選択します。

- 「FileStore」は、Oracle Enterprise Repositoryの「管理」画面で作成されたファイル・ストアのリストにアクセスします。

5. ストア・パスを入力します。「ストア・パス」フィールドの隣にある省略記号ボタンをクリックして、アーティファクト・ストアで使用されるファイル・ストアの名前を選択します。

6. 入力後、「OK」をクリックします。ファイル・ストアごとに個別のアーティファクト・ストアを作成する必要があります。

2.2.5 ファイル・ストアのアーティファクト・ストアによるアセットへのファイルの追加

この手順は、アセット・エディタで実行します。

1. ファイルの追加先のアセットを選択します。

2. 「概要」タブの「ファイル情報」セクションにある「追加」ボタンをクリックします。

3. ダイアログで、名前と、必要に応じて説明を入力します。

4. 「編集」をクリックします。URLの編集ダイアログが表示されます。

5. アーティファクト・ストア・ファイル・オプションをクリックします。

6. 「ストア」リストから、ファイル・ストア(CC_VOBNAME)のリポジトリを選択します。

7. 「ファイル名」ボックスの横で、ClearCaseリポジトリを参照します。

8. 参照すると、VOBの最上位レベルのブランチが表示されます。ブランチを選択します。ブランチ名の形式はブランチ名/バージョンです。バージョンLATESTは、現在チェックインされている情報を表します。一般に、LATESTより前の最も大きい番号が必要なバージョンです。図2-8の/main/server_preed_release/6は、ブランチ/main/server_preed_releaseのバージョン6です。フォルダ領域の名前(store01)は指定したファイル・ストアのストア・パスを表します。

図2-8 「開く」ダイアログ

「図2-8 「開く」ダイアログ」の説明

9. 2番目のレベルは選択したブランチ名とバージョンのペア内のフォルダを示します。

10. 3番目のレベルは選択したフォルダのバージョンを示します。

11. これ以降、選択したすべてのフォルダ名の後には、目的のバージョンが続きます。最後の2つの参照レベルは、次のとおりです。

- 選択したファイル名

- そのファイルのバージョン

12. 「選択」ボタンをクリックすると、URLの編集ウィンドウの「ファイル名」フィールドに値が入力されます。

13. 「表示」をクリックして、URLをテストします。

2.2.6 ファイル・ストアの使用

ファイル・ストアを使用すると、ストアに格納されているすべてのバージョンのすべてのファイルを参照できます。現在、ファイル・ストアはClearCaseでのみ使用できます。

ストア内のファイルを表示するには、アセット・エディタ画面で次の手順を実行します。

1. アセットを選択します。

2. 「概要」タブをクリックします。

図2-9 「概要」タブ

「図2-9 「概要」タブ」の説明

3. 「ファイル情報」セクションで「追加」をクリックします。図2-10に示すように、「編集」ダイアログが表示されます。

図2-10 「編集」ダイアログ

「図2-10 「編集」ダイアログ」の説明

4. 「編集」ボタンをクリックします。図2-11に示すように、URLの編集ダイアログが表示されます。

図2-11 URLの編集ダイアログ

「図2-11 URLの編集ダイアログ」の説明

5. URLの編集ダイアログで、「リポジトリ・ファイル」を選択します。

6. 「ホスト」リストでファイル・ストアを選択します。

7. 「参照」をクリックしてファイルを見つけ、「ファイル名」テキスト・ボックスでファイル名を入力します。

8. 「表示」をクリックして、ファイルを表示します。

9. 終了したら、「OK」をクリックします。

2.3 ClearQuest統合

ClearQuestと統合すると、Oracle Enterprise RepositoryでClearQuestストアを使用できます。通常、ClearQuestのファイルにアクセスするために使用するURLは、次のようになります。

http://server.host.com:port/clearcasePath/fileName?dir=vobStructure&elem=fileName&cmd=view&user=username&password=<password>

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

- 2.3.1項「ClearQuestの追加」

- 2.3.2項「ClearQuestのアーティファクト・ストアの構成」

- 2.3.3項「ClearQuestのアーティファクト・ストアによるアセットへのファイルの追加」

2.3.1 ClearQuestの追加

Oracle Enterprise RepositoryのインスタンスにClearQuestを追加するには、次の手順を実行します。

1. Oracleのダウンロード・サイトから、Oracle Enterprise Repositoryのインストール・パッケージ(clearquest.zip)をダウンロードします。

2. ダウンロードしたファイルを一時ディレクトリに解凍します。

3. データベースに適切なSQLツールを使用して、一時ディレクトリにあるSQLスクリプトを実行して、Oracle Enterprise RepositoryデータベースにClearQuestを追加します。

4. アプリケーション・サーバーを再起動します。

2.3.2 ClearQuestアーティファクト・ストアの構成

Oracle Enterprise RepositoryでClearQuestアーティファクト・ストアを構成するには、次の手順を実行します。

1. Oracle Enterprise Repositoryのメニュー・バーの「アセット」リンクをクリックします。Oracle Enterprise Repositoryの「アセット」ページが表示されます。

2. アセットの編集/管理をクリックして、アセット・エディタを起動します。

3. 「アクション」メニューを開きます。

4. アーティファクト・ストアの構成をクリックします。アーティファクト・ストアの構成ダイアログが表示されます。

5. 「追加」をクリックします。

6. 新規アーティファクト・ストアの作成画面で、アーティファクト・ストア・ファイルの名前を入力します。

- (ClearQuestをお薦めします。)

7. 「タイプ」リストで、ClearQuestを選択します。

- ClearQuestのWebインタフェースにアクセスします。

8. サーバーのホスト名を入力します。

9. パスにlogon/url/default.aspを入力します。

10. (オプション)ユーザー名を入力します。

11. (オプション)パスワードを入力します。

12. 入力後、「OK」をクリックします。

2.3.3 ClearQuestのアーティファクト・ストアによるアセットへのファイルの追加

ClearQuestのアーティファクト・ストアを使用してアセットにファイルを追加するには、次の手順を実行します。

1. アセット・エディタを起動します。

2. 適切なアセットを選択します。

3. アセットの「概要」タブの「ファイル情報」セクションに移動します。

4. 「追加」をクリックします。

5. ダイアログで、必要に応じて名前と説明を入力します。

6. 「編集」をクリックします。URLの編集ダイアログが表示されます。

7. アーティファクト・ストア・ファイル・オプションを選択します。

8. 「ストア」リストで、ClearQuest Repositoryを選択します。

9. (「ファイル名」ボックスの横にある)「参照」ボタンをクリックして、ClearQuestのショートカットを編集します。

10. ボタンをクリックして、ClearQuestのWebインタフェースを起動し、ClearQuestリソースへのショートカットを作成します。

11. ClearQuestのWebインタフェースで、「操作」→「ショートカットの作成」リンクを使用して、ClearQuestでショートカットを作成するウィザードを実行します。

12. 作成されたショートカットの疑問符(?)の後に続くすべての内容をコピーして、ClearQuest Webショートカットの起動画面に貼り付けます。

13. 「OK」をクリックして、「ファイル名」にショートカット部分を入力します。

14. 「表示」をクリックして、URLをテストします。

- これにより、ショートカットの割当先のリソースへのClearQuestインタフェースが開きます。

3 Harvest-HTTP Repository Host Integration

この章では、Harvest-HTTPリポジトリの設定、アーティファクト・ストアの構成、およびアセットへのHarvestアーティファクト・ストアの追加を行う方法について説明します。

この章は次の項で構成されています。

- 3.1項「概要」

- 3.2項「インストール」

- 3.3項「アーティファクト・ストアの構成」

- 3.4項「アセットへのHarvestアーティファクト・ストアの追加」

3.1 概要

Harvest-HTTP Repository Integrationは単一のサーブレットWebアプリケーションです。これを使用すると、Harvest Repository内にあるファイルをOracle Enterprise Repository内のアセットに追加できます。アプリケーションでは、URLに基づいたHarvest Repository内のファイルの物理的な取得を行います。サーブレット名は、retrieveです。

3.2 インストール

1. Harvest-HTTP Repository Host Integrationをアプリケーション・サーバーにデプロイします。

2. <app_server>/harvest_rep/WEB-INF/classes/harvest.propertiesファイルの変更および編集を行います。

- enterprise.repositories.harvest.hco.path

- Harvestのhco.exeファイルのローカル・パス。(たとえば、\C:\\Program Files\\CA\\AllFusion Harvest Change Manager\\hco.exe)

注意:

UnixまたはLinuxのパスはスラッシュ(/)を使用し、Windowsのパスは、バックスラッシュ2つ(\\)を使用します。

- enterprise.repositories.harvest.tmp.path

- ファイルが一時的に格納される場所のローカル・パス。

- enterprise.repositories.harvest.use-single-sign-on=false

残りのプロパティはデフォルトのままにします。

3. 変更内容を保存して閉じます。

4. アプリケーション・サーバーを再起動します。

3.3 アーティファクト・ストアの構成

この手順は、Oracle Enterprise Repositoryのアセット・エディタで実行します。

1. 「アクション」メニューから、アーティファクト・ストアの構成を選択します。

2. 「追加」をクリックして、新規アーティファクト・ストアの作成ダイアログを開きます。

3. 次のパラメータを使用して、新しいhttpリポジトリを作成します。

- ホスト名: <app server name with port> Harvest-HTTPアーティファクト・ストア統合がインストールされる場所。

- パス: harvest_rep/retrieve/<harvest_broker_name>

- ユーザー名とパスワードは空白にします。

4. 「OK」をクリックします。

3.4 アセットへのHarvestアーティファクト・ストアの追加

この手順は、Oracle Enterprise Repositoryのアセット・エディタで実行します。

1. 「検索」またはその他の方法を使用して、ファイルが追加されるアセットを見つけます。

2. アセットを開きます。

3. 次のようにファイルを追加します。

- リポジトリ・ファイルの選択をクリックします。

- Harvestに対応するアーティファクト・ストアを選択します。

- 次の形式で、ファイル名にHarvestのパスを指定します。

- <package_name>/<project_name>/<state_name>/<repository_path>/<filename>

4. 「OK」をクリックします。

4 Serena ChangeMan統合

この章では、Serena PVCS DimensionsをOracle Enterprise Repositoryと統合する方法について説明します。これによって、Oracle Enterprise Repository内でWebDAV対応のPVCSリポジトリを使用できるようになります。

この章は次の項で構成されています。

- 4.1項「Serena Changemanプラグインの追加」

- 4.2項「アーティファクト・ストアの構成」

- 4.3項「PVCSアーティファクト・ストアの構成」

- 4.4項「PVCSリポジトリによるアセットへのファイルの追加」

- 4.5項「セキュリティに関する考慮事項」

4.1 Serena Changemanプラグインの追加

Serena Changemanプラグインを追加するには、次の手順を実行します。

1. コンピュータのOracle_HOME\repositoryXXX\core\tools\solutionsディレクトリに移動します。Oracle Enterprise Repositoryのすべてのソリューション・パックの一覧が表示されます。

2. OER30-RC-Enhanced-SCM-Integrations.zipファイルを一時ディレクトリに解凍します。

3. データベースに適切なSQLツールを使用して、一時ディレクトリにあるSQLスクリプトを実行して、Oracle Enterprise RepositoryデータベースにSerena Changemanを追加します。

4.2 アーティファクト・ストアの構成

この手順は、Oracle Enterprise Repositoryのアセット・エディタで実行します。

1. 「アクション」メニューから、アーティファクト・ストアの構成を選択します。

2. 「追加」をクリックして、新規アーティファクト・ストアの作成ダイアログを開きます。

3. 次のパラメータを使用して、新しいSCMリポジトリを作成します。

- ホスト名: <app server name with port> Harvest-HTTPアーティファクト・ストア統合がインストールされる場所。

- パス: harvest_rep/retrieve/<harvest_broker_name>

- ユーザー名とパスワードは空白にします。

4. 「OK」をクリックします。

4.3 PVCSアーティファクト・ストアの構成

PVCSアーティファクト・ストアを構成するには、次の手順を実行します。

1. Oracle Enterprise Repositoryにユーザーとしてログインします。(アーティファクト・ストアの編集権限を持つロールへの割当てが必要です。)

2. 「アセット」画面のサイドバーで、アセットの編集/管理リンクをクリックします。アセット・エディタが起動します。

3. 「アクション」メニューで、アーティファクト・ストアの構成を選択します。アーティファクト・ストアの構成ダイアログが表示されます。

4. 「追加」ボタンをクリックします。新規アーティファクト・ストアの作成ダイアログが表示されます。

5. わかりやすいリポジトリの名前を入力します。

6. 「タイプ」リストで、このリポジトリ定義にPVCSリポジトリ・タイプを選択します。

7. サーバーのホスト名とパスを入力します。

8. 必要に応じて、ユーザー名とパスワードを入力します。

注意:

- これはオプションです。ユーザー名とパスワードを入力すると、自動ログインが可能になります。データベース・パスワードを追加するには、+文字とデータベース・パスワードを追加します。WebDAVを介してPVCSの特定のファイルにアクセスするために使用するPVCS URLの例は、次のとおりです。http://repositoryName+databaseName:password@host.server.com:port/webdavPath/additionalPathStructure/filename

- ユーザー名またはパスワード(あるいはその両方)をこのリポジトリへのアクセスに使用する場合、プロキシのダウンロード・リクエスト・オプションをチェックします。

9. 終了したら、「保存」をクリックします。

4.4 PVCSリポジトリによるアセットへのファイルの追加

PVCSリポジトリを使用して、ファイルをアセットに追加するには、次の手順を実行します。

1. アセット・エディタを起動します。

2. 適切なアセットを選択します。

3. アセットの「概要」タブの「ファイル情報」セクションに移動します。

4. 「追加」をクリックします。

5. ダイアログで、必要に応じて名前と説明を入力します。

6. 「編集」をクリックします。URLの編集ダイアログが表示されます。

7. 「リポジトリ・ファイル」オプションを選択します。

8. 「ホスト」ドロップダウン・リストから、PVCSリポジトリを選択します。

9. 「ファイル名」ボックスで、ファイル名を入力するか、PVCSリポジトリでファイルを参照して選択します。

10. 「表示」を選択して、URLをテストします。

4.5 セキュリティに関する考慮事項

- 構成によっては、ユーザー名とパスワードがURLに表示されることがあります。ファイル・レベルで個々のユーザーを認証すれば、この問題は解決されますが、Oracle Enterprise Repositoryのアセット・エディタでSerena PVCS Dimensionsブラウザが無効になります。アーティファクト・ストアの定義でプロキシのダウンロード・リクエスト・オプションを使用すると、ユーザーがこれらの詳細情報にアクセスできなくなります。

- プロキシのダウンロード・リクエスト・オプションをアーティファクト・ストアの定義で選択しない場合、特定のSerena PVCS Dimensionsのファイルパスの特性を悪用して、制限付きのファイルに不正にアクセスされる可能性があります。

第II部

Oracle Enterprise Repositoryとランタイム・ツールとの統合

この部では、コード・コンプライアンス・インスペクタ・ツールを使用して、設計とコーディングに関するオープンな標準および推奨ベスト・プラクティスに準拠するコンポジットを開発する方法について説明します。また、この部では、Enterprise Manager統合ユーティリティを使用および構成して、Enterprise ManagerとOracle Enterprise Repositoryを統合する方法、およびAmberpointとの統合についても説明します。

この部は、次の章で構成されています。

- 第5章「コード・コンプライアンス・インスペクタとの統合」

- 第6章「Enterprise Manager統合ユーティリティ」

- 第7章「Amberpointとの統合」

5 コード・コンプライアンス・インスペクタとの統合

この章では、概要について説明し、Oracle Enterprise Repository (OER)用にコード・コンプライアンス・インスペクタ(CCI)を使用する方法について解説します。

この章では、次の項目について説明します。

- 5.1項「概要」

- 5.2項「コンプライアンスのチェックおよびOERのレポート・データの同期」

- 5.3項「レポートの構成」

5.1 概要

オープンな標準を遵守し、正しいコーディングを実行することは、SOAガバナンスの重要な原則です。コード・コンプライアンス・インスペクタは、SOAスイート・プロジェクトとOracle Application Integration Architecture (AIA)統合プロジェクトの両方で正しいコーディングが行われているかどうかをチェックするツールです。

OER用のCCIには、2つのコマンドライン・ユーティリティがあります。1つは、HTMLコンプライアンス・レポート・ファイルを作成し、もう1つは結果をリポジトリに対して同期します。これにより、ユーザーはOERコンソールからレポートにアクセスできるようになります。

コンプライアンス・データをOERに統合すると、コンポジットがリポジトリ・レポートおよび個々のアセット・メタデータに準拠しているかどうかについての情報がユーザーに提供されます。これにより、次のようなことが可能になります。

- コンポジットのプロデューサ、プロバイダ、およびプロジェクト・リーダーが、リリースを進める準備ができたかどうか、準備ができていない場合は修正が必要な事項を判断できます。

- 統合センターが、リポジトリで提供されるサービスの質を確定し、利用を促進できます。

- アセットに準拠性があり、信頼度が高く、利用可能であることを、サービスの利用者が認識できます。

- サービスが正しくコーディングされていることを設計者が認識し、修正する必要のあるサービスを特定する手段が提供されます。

AIAユーザーは、コマンドラインからCCIを起動でき、JDeveloperで使用できます。JDeveloperの拡張機能を使用すると、開発者はリポジトリにチェックインする前に、継続的に作業内容のコンプライアンスを確認できます。

コンポジットを開発し、コンプライアンスを確認するためのJDeveloper拡張機能の使用の詳細は、Oracle Fusion Middlewareインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドfor Oracle Application Integration Architecture Foundation Packのコード・コンプライアンス・インスペクタの使用に関する項を参照してください。

CCIは、Web Services Interoperability Organization Basic Profile (WS-I BP)、および設計の一貫性、正しいコーディングとドキュメントをチェックするためのAIA統合開発者のガイドラインに基づいた事前定義済のアサーションのセットとともに提供されます。CCIでは、コードを、オープンな標準とベスト・プラクティスに対して、準拠性、一貫性、または完全な一貫性があると評価します。

結果はコード・コンプライアンス・レポートに表示されます。これには、コンプライアンスのレベルや合格と不合格の割合が示され、優先度とポリシーで結果をグループ分けするグラフィカルな棒グラフが表示されます。結果には、上位10の違反コンポジットも記載されます。SOAスイート・プロジェクトの全体のコンプライアンス・スコアは、レポートのヘッダー部分に表示されます。

図5-1に、全体のコード・コンプライアンス・レポートの例を示します。このレポートは、OERの「レポート」ページを介してリンクされています。コンポジットをクリックすると、コンポジットの詳細を表示できます。OERの「アセット詳細」ページを使用すると、各コンポジットを個別に表示することもできます。さらに、レポート・ファイルをサーバーにポストし、同僚とコンプライアンスの結果を共有できます。

図5-1 全体のコード・コンプライアンス・レポート

5.1.1 提供されたカタログについて

コード・コンプライアンス・インスペクタはCCIの2つのポリシー・セットを提供します。次のカタログには、WS-I Basic Profileに対するコンプライアンスをチェックするために使用するポリシーとアサーションが含まれています。

- AssertionsCatalog-WS-I-<version>.xml

- Policies-WS-I-<version>.xml

次のカタログには、AIAの設計とコーディングのベスト・プラクティスに対するコンプライアンスをチェックするために使用するポリシーとアサーションが含まれています。

- AssertionsCatalog-AIA-<version>.xml

- Policies-AIA-<version>.xml

WS-Iカタログとポリシーは、すべての種類のSOAコンポジットで汎用的に使用するためのものです。AIAカタログとポリシーは、ライセンスを取得したOracle AIAも所有しているOERユーザー用です。アサーションとポリシーはこれらのXMLファイルに格納されています。

<version>プレースホルダは、アサーションとポリシーが存在するディレクトリを示します。提供されたカタログの名前に10.xまたは11.xが付いており、これが<version>に置き換わります。

表5-1に、提供されているWS-I BPアサーションを示します。これらの事前定義済のアサーションは、ComplianceInspector/configディレクトリに存在する、パッケージ化済アサーション・カタログのXMLファイルに表示できます。

表5-1 WS-I BP標準

アサーション

説明

SchemaImportUsedforXSDOnlyCheck

他の種類のXMLスキーマをインポートするために、WSDLインポート要素を使用しないでください。WSDLインポートはWSDLのみをインポートする必要があります。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

SchemaImportsOnlyInsideSchemaCheck

XMLスキーマのimport文は、types要素のxsd:schema要素内に存在する必要があります。

SchemaNodeOnlyInsideWsdlTypesCheck

XMLスキーマの要素は、types要素のxsd:types要素内に存在する必要があります。

SchemaTargetNamespaceExistCheck

xsd:schema要素が子要素としてxsd:importまたはxsd:annotation(あるいはその両方)を持たない場合、wsdl:types要素に含まれているすべてのxsd:schema要素には、有効でnull以外の値を持つtargetNamespace属性が必要です。

SchemaTargetNamespaceMatchingCheck

WSDLでは、定義内に異なるtargetNamespaceを持つWSDLをインポートできません。このアサーションは、inputDirにAIAMetaDataディレクトリが含まれていることを想定しています。

SchemaXSDFileRootSchemaCheck

XSDファイルは、xsd:importの場所にスキーマをルート・ノードとして持つXSDファイルをインポートする必要があります。このアサーションは、inputDirにAIAMetaDataディレクトリが含まれていることを想定しています。

UTFEncodingUsedinSchemaCheck

スキーマ定義では、UTF-8またはUTF-16エンコーディングを使用する必要があります。UTFエンコーディングはXMLの処理手順で指定できます。アサーションでは、処理手順にUTFが存在するかどうかを検索します。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

UTFEncodingUsedinWSDLCheck

WSDLの記述では、UTF-8またはUTF-16エンコーディングを使用する必要があります。UTFエンコーディングはXMLの処理手順で指定できます。アサーションでは、処理手順にUTFが存在するかどうかを検索します。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

WSDLDocumentationIsFirstChildCheck

wsdl:documentation要素は、wsdl:import、wsdl:part、wsdl:definitions、およびWSDL1.1仕様で参照されている要素の最初の子要素として存在することがあります。

WSDLFileRootDefinitionsCheck

WSDLは、wsdl:importの場所に定義をルート・ノードとして持つWSDLファイルをインポートする必要があります。このアサーションは、inputDirにAIAMetaDataディレクトリが含まれていることを想定しています。

WSDLImportLocationNotEmptyCheck

すべてのwsdl:import要素の場所属性は空にすることはできません。

WSDLImportNoRelativeURIInNSCheck

wsdl:importのネームスペース属性は相対URIにすることはできません。URIは、URI標準のとおり、絶対URIにする必要があります。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

WSDLImportOnlyPrecededByDocCheck

WSDLファイルで、すべてのWSDLインポート要素の前に、WSDLドキュメント要素を置く必要があります。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

WSDLImportUsedforWSDLOnlyCheck

他の種類のXMLスキーマをインポートするために、WSDLインポート要素を使用しないでください。WSDLインポートはWSDLのみをインポートする必要があります。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

WSDLImportsOnlyInsideDefinitionCheck

すべてのWSDLのimport文は、wsdl:definition要素内に存在する必要があります。

WSDLOperationMustHaveInputCheck

送信、レスポンスおよび通知タイプ操作はwsdl:portタイプ定義で使用できません。たとえば、出力メッセージは常に入力メッセージの後にある必要があります。

WSDLOperationNameMustBeUniqueCheck

すべてのwsdl:portType要素には、名前属性(overloading)用に個別の値を持つ操作が含まれている必要があります。

WSDLPartMustNotUseElementAndTypeCheck

wsdl:message要素は、同じwsdl:part要素でtypeおよびelement属性の両方を指定できません。

WSDLTargetNamespaceMatchingCheck

WSDLでは、定義内に異なるtargetNamespaceを持つ他のWSDLをインポートできません。このアサーションは、inputDirにAIAMetaDataディレクトリが含まれていることを想定しています。

WSDLTypesOnlyPrecededByDocAndImportCheck

WSDLファイルで、すべてのWSDLタイプ要素の前に、WSDLドキュメント要素またはWSDLインポート要素を置く必要があります。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

XMLversionUsageInSchemaCheck

XSDファイルはXMLバージョン1.0を使用する必要があります。XMLバージョンはXMLの処理手順で指定できます。アサーションでは、処理手順にバージョンが存在するかどうかを検索します。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

XMLversionUsageInWSDLCheck

WSDLファイルはXMLバージョン1.0を使用する必要があります。XMLバージョンはXMLの処理手順で指定できます。アサーションでは、処理手順にバージョンが存在するかどうかを検索します。このチェックは、WS interoperability basic profile 1.0との互換性を確認するためのものです。

OERおよびAIAの事前定義済のアサーション、ポリシーおよび優先度の詳細は、Oracle Fusion Middlewareインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドfor Oracle Application Integration Architecture Foundation Packの付録B「コード・コンプライアンス・インスペクタ: 新しい用語と使用可能なアサーション・エグゼキュータ」を参照してください。

より安全な方法でカスタム・ポリシーおよびアサーションを作成できます。詳細は、Oracle Fusion Middlewareインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドfor Oracle Application Integration Architecture Foundation Packのコード・コンプライアンス・インスペクタ用のカスタム・アサーションの記述に関する項を参照してください。

5.1.2 OERのためのCCIの実行 - 推奨手順

次の手順を順に実行することをお薦めします。手順1から3はオプションですが、よいコンプライアンス結果を得るためには、リポジトリに取り込む前に実行することをお薦めします。手順5および6は、事前に一度、実行できます。

1. AIAユーザーの場合、JDeveloperでコンポジットを開発します。
詳細は、Oracle Fusion Middlewareインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドfor Oracle Application Integration Architecture Foundation Packのコード・コンプライアンス・インスペクタの使用に関する項を参照してください。

2. JDeveloperのCCI拡張機能を実行してコンプライアンスを確認します。

3. JDeveloper内のコンプライアンスの問題を発見して修正し、CCIを再実行してコンプライアンスを確認します。
コンプライアンスの問題の発見と修正の詳細は、Oracle Fusion Middlewareインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドfor Oracle Application Integration Architecture Foundation PackのJDeveloperのコード・コンプライアンス・インスペクタの実行に関する項を参照してください。

4. コンプライアンス結果に満足したら、コンポジットを収集してOERアセットを作成します。

5. cci-oerSynch.propertiesファイルを構成します。
詳細は、5.2項「コンプライアンスのチェックおよびOERのレポート・データの同期」を参照してください。

6. アーティファクト・ストアを構成します。
詳細は、5.2.1項「CCIレポート・ファイルにアクセスするためのアーティファクト・ストアの使用」を参照してください。

7. コマンドラインからコンプライアンス・チェックを実行して、HTMLレポート・ファイルを作成します。
この時点で、レポートをレビューしたり、他の人がレビューできるようにレポートをポストしたりできます。

8. OERコンプライアンス・メタデータおよびCCIレポート出力でコンプライアンスの問題(問題がある場合)を特定します。

9. 準拠性のないアセットまたはアーティファクトで問題を発見し、修正します。

1. 必要に応じて、JDeveloper拡張機能で修正します。

2. JDeveloperでコンプライアンス・チェックを実行します。

3. レポートの結果に満足した場合、10に進みます。レポートの結果に満足しない場合、9を実行します。

10. CCIとOERの同期を再実行する前に、修正したアセットを再収集します。これを実行しないと、CCIデータが間違ったアセットと照合されることがあります。

11. CCIとOERの同期を実行して、OERアセットをレポート・ファイルにリンクします。CCIレポートを収集およびポストした後に、これを実行する必要があることに注意してください。これを実行しないと、レポート・データはOERアセットと同期できなくなります。
詳細は、5.2.3項「CCIとOERの同期の実行」を参照してください。

12. レポート・サーバーにレポート・ファイルを配置します。CCIとOERの同期コマンドを実行する前に、レポートの場所プロパティ(compliance.report.web.root)がcci-oerSynch.propertiesファイル内で正しく指定されていることを確認します。
詳細は、5.3.2項「サーバーへのレポート・ファイルのポスト」を参照してください。

5.2 コンプライアンスのチェックおよびOERのレポート・データの同期

CCIコマンドライン・ツールは、OERの<OER Oracle Home>/tools/solutions/<version>のComplianceInspector.zip内に配布されています。

設定手順は、次のとおりです。

1. コンプライアンス・インスペクタのzipファイルを一時フォルダにコピーします。

2. コンプライアンス・インスペクタのzipファイルを解凍します。

3. ComplianceInspector/config/cci-oerSynch.propertiesにあるコンプライアンス・インスペクタのcci-oerSynch.propertiesファイルを構成します。
プロパティ・ファイルによって、環境の静的な情報を設定できます。

注意:

このファイルを解凍すると、常に、プロパティ・ファイルはComplianceInspectorディレクトリに対して相対的な位置にあり、configの下に置かれています。このディレクトリの名前を変更できます。この場所をComplianceInspector_Homeと呼びます。

5.2.1 CCIレポート・ファイルにアクセスするためのアーティファクト・ストアの使用

OERでは、アセットに完全修飾されたURLが格納されている場合、サーバーやポート名の変更、またはパスに影響があるその他の変更が行われると、そのリンクやURLに問題が生じることがあります。OERのアーティファクト・ストアを使用して、1回の単純な変更で、アーティファクト・ストアを参照するすべてのURLを簡単に管理および変更します。

cci-oerSynch.propertiesファイルには、CCIレポート・ファイルに対する接頭辞として使用するURIパターンを指定するために使用するプロパティがあります。実際のhost/port/pathパターンではなく、OERのアーティファクト・ストアのURIパターンを使用する場合、OERのJSPページは、自動的にアーティファクト・ストア・パターンを実際のURLパターンに変換します。

アーティファクト・ストアを使用すると、サーバー間でレポートを移動できます。レポートが格納されている場所のパスを変更するためにアセット自体を変更する必要がありません。アーティファクト・ストア情報を更新するだけで、変更処理は完了です。アーティファクト・ストアを1回変更すると、そのストア情報を使用するすべてのアセットが修正されます。

これにより、次のことが可能になります。

1. CCIレポートのアセット内での相対URLの使用

2. アーティファクト・ストアの構成を使用するレポートへのプロキシ・アクセス

3. ソース・コード管理(SCM)システム内で格納されるレポートのサポート

4. SCMメカニズムを介してアクセスされるバージョニング済レポート

CCIとOERの同期時にアーティファクト・ストアを作成する手順:

1. OER内で適切なタイプ(HTTPなど)のアーティファクト・ストアを作成します。

2. アーティファクト・ストアに目的に合った名前を付けます(CCI-Reports-Production)。

3. cci-oerSynch.propertiesファイル内のcompliance.report.web.rootプロパティの一部として、rep://<ARTIFACTSTORE-NAME>を使用します。

1. 例: compliance.report.web.root=rep://CCI-Reports-Production/reports

2. レポートには次のURLパターンが含まれます。
rep://CCI-Reports-Production/reports/cci/AIADemo/reports/composites/AIADemoBatchJMSAdapter.html#hide_link

4. CCIとOERの同期を実行して、コンプライアンス・レポート・リンクを作成または更新します。

アーティファクト・ストアの使用の詳細は、第1章「アーティファクト・ストアの構成」を参照してください。

5.2.2 checkComplianceコマンドの実行

checkComplianceコマンドはcci-oerSynch.propertiesファイルを使用してOERインスタンスのURLを取得し、コンポジットのアセット・タイプIDと接続する際に使用するユーザー名の両方を検索します。

次のスイッチを使用して、LinuxではcheckCompliance.shコマンドで、WindowsではcheckCompliance.batコマンドでCCIを起動します。

- -inputDir {コンポジットが含まれるフォルダの絶対パス}
これは、入力ディレクトリが存在する場所を指定する必須のスイッチです。-inputMetaFileスイッチを指定しない場合、これは必ずしもSOAスイート・プロジェクトを表しません。-inputMetaFileスイッチを指定すると、プロジェクトのルート・ディレクトリ(ComplianceInspector_Homeのプロジェクト・フォルダが含まれるソース・フォルダ)が指定されます。

- -outputDir {コンプライアンス・レポートが生成される出力フォルダ}
これは、出力レポートが格納される場所を指定するための必須のスイッチです。次に例を示します。

コンポジットが/tmp/cci/composites/AIADemoにある場合

出力ディレクトリは、/tmpです。

CCIでは、生成したファイルは/tmp/AIADemoに置かれます。

- -policiesFile {ポリシー・ファイル名}
このオプションのスイッチを使用して、CCIが実行されるポリシー・ファイルを指定します。たとえば、Policies-WS-I_11.x.xmlなどです。ファイルは、ComplianceInspector/libまたはComplianceInspector/config (ツール・クラス・パス)の下にあるか、compliance.policy.engine.jarに組み込まれています。

- -policy {ポリシー名}
これは、実行するポリシーを指定するためのオプションのスイッチです。指定しない場合、Policies.xmlのデフォルト・ポリシーが実行されます。

- -assertion {アサーション名}
このオプションのスイッチを使用して、CCIが実行されるアサーションを指定します。これは、定義済の特定のアサーション用のツールを実行します。たとえば、ABCSTargetNameSpacesCheckなどです。

- -inputMetaFile {SOAスイート・プロジェクトのメタファイルの絶対パス}
特定のSOAスイート・プロジェクトに対してレポートを実行する場合に、このオプションのスイッチを使用します。入力メタファイルには、出力結果がSOAスイート・プロジェクト固有になるように、コード・コンプライアンス・インスペクタがスキャンする必要がある、特定のディレクトリを指すパスが含まれています。このファイルには、指定されたSOAスイート・プロジェクトで使用されるすべてのサービスの名前が含まれています。このオプションを指定すると、入力メタファイルにこのルートに対する相対ディレクトリ・パスが含まれるので、-inputDirスイッチはプロジェクトのルート・ディレクトリを指します。次に、いくつかの例を示します。

-inputMetaFile <ファイルのディレクトリ・パス>/GenerateScriptInput.xml

-inputMetaFile <ファイルのディレクトリ・パス>/MyPIPDP.xml

- -inputMetaFile ALL
すべてのSOAスイート・プロジェクトに対してレポートを実行する場合に、このオプションのスイッチを使用します。このオプションを指定すると、入力メタファイルにこのルートに対する相対ディレクトリ・パスが含まれるので、-inputDirスイッチはプロジェクトのルート・ディレクトリを指します。

- -version
-versionフラグでは、使用しているCCI(CCIビルドの日時)のバージョン。これは、バージョン情報を示すオプションの引数です。

例

次に、コマンドラインからコード・コンプライアンス・インスペクタを起動する例を示します。

- Windows: checkCompliance.bat -inputDir D:\composites\demo -outputDir D:\ComplianceOut

- Linux: checkCompliance.sh -inputDir /composites/demo -outputDir /ComplianceOut

5.2.3 CCIとOERの同期の実行

CCIとOERの同期では、cci-oerSynch.propertiesファイルを使用し、コマンドライン・パラメータを補完して渡されます。これは、cci-oerSynch.propertiesファイルからすべてのプロパティを取得し、これをプロパティ・ファイルで指定されたOERインスタンスと相互に動作する様々な操作で使用します。

コマンドラインでコンプライアンスのチェックを実行すると、HTMLレポートが作成され、他の人がレビューできるようにサーバー上に配置されます。CCIとOERの同期では、これらのHTMLページとOERが統合されるので、OERの「アセット詳細」ページから表示できます。CCIとOERの同期は、次の内容を実行するスクリプトです。

- CCIで生成されたHTMLページを指すURLが含まれる、OERのすべてのコンポジットを更新します。

- OERと同じホストでスクリプトが実行されている場合、コマンドラインの引数-reportLocationで指定されたディレクトリ全体をOERのレポート・フォルダにコピーします。異なるホストで実行されている場合、レポートがある場所のディレクトリをOERのレポート・フォルダにコピーできます。

CCIとOERの同期の実行

1. OERをインストールしたマシンの詳細情報で、ComplianceInspector/configディレクトリに存在するcci-oerSynch.propertiesファイルを更新します。

2. ComplianceInspector/binディレクトリに存在する、cci-oerSynch.batまたはcci-oerSynch.shを実行します。表5-2に、渡すことができるコマンドラインの引数のリストを示します。

表5-2 OER同期のコマンドライン引数

引数

タイプ

説明

-url <OERのWebサービスのURL>

オプション

OERのWebサービスのURL。

次に例を示します。

http://example.com:port/oer/services

-user <OERのユーザー名>

オプション

有効なOERのユーザー・ログイン。このユーザーは、アセットのインスタンスを更新する権限を持っている必要があります。

-pwd <指定したユーザー名のパスワード>

オプション

OERのユーザー・ログインのパスワード。

-reportLocation <CCIで生成された出力ディレクトリのパス>

必須

CCI HTMLコンプライアンス・レポートの場所。OERに統合するコンプライアンス・インスペクタ・ツールによって作成されます。

注意:

コマンドラインのオプションの引数を指定しない場合、値はcci-oerSynch.propertiesファイルから取得されます。コマンドラインの引数は、cci-oerSynch.propertiesファイルで指定したプロパティよりも優先されます。また、コマンドラインの引数でパスワードを指定しない場合、入力するように要求されます。

5.3 レポートの構成

コンプライアンス・レポートの構成後、認証済ユーザーはOERの「レポート」ページのリンクを使用して、これらのレポートを表示できます。さらに、表示アクセス権を持つユーザーは、個々のコンポジットをOERの「アセット詳細」ページで表示できます。

コンプライアンス・レポートを追加および構成する手順

1. アプリケーション・サーバーを停止します。

2. $OER_APP_HOME/oer-app/WEB-INF/config/reports/ComplianceReport.xmlファイルを編集します。
次に、すぐに使用できるComplianceReport.xmlの例を示します。

<?xml version="1.0" ?>
<reports>
<report name="complianceReportDoc">
<displayName>Compliance Report Documentation</displayName>
<description>Documentation for setting up Compliance Reports.
</description>
<externalLink>http://www.example.com/pls/topic/lookup?ctx=as111170&
id=OERIN851</externalLink>
</report>
<report name="complianceReport">
<displayName>Compliance Report</displayName>
<description>This is the index page for all technical compliance
reports.</description>
<!-- update the host and port, according the your http enabled server
where you have hosted the compliance reports. Use the OER download servlet to
map the OER artifact store URL for browser consumption. Example:
<externalLink>http://server.example.com:7101/oer/com.flashline.cmee.
servlet.enterprisetab.Download?path=rep://INSTANCE/reports/cci/FPDemo/
index.html</externalLink> -->
<externalLink>http://host.example.com/CCI/reports/index.html</externalLink>
</report>
</reports>

3. 要約されているSOAスイート・プロジェクトが1つしかない場合、complianceReportという名前の既存のレポートを変更して、手順9に進みます。

- OERアーティファクト・ストアを使用してレポートの場所を参照している場合(これをお薦めします)、次のURLパターンをCustomReport.xmlファイルのexternalLink要素の一部として使用する必要があります。
http://host.example.com:port/oer/com.flashline.cmee.servlet.enterprisetab.Download?path=rep://<ARTIFACTSTORENAME>/relative_path/index.html

アーティファクト・ストアが示す正しいURLをユーザーに提供するために、URLをデコードして再フォーマットするダウンロード・サーブレットが必要です。OERアーティファクト・ストアを使用すると、OER管理者は、複数のアセットの再同期または変更によってこれらの詳細情報を更新しないで、レポート・サーバーのホスト名/ポートおよびパスを変更できます。

4. 2つ以上のSOAスイート・プロジェクトが要約される場合、チェック・コンプライアンス・ツールで報告されるプロジェクト数分、レポート・セクションを複製します。

5. 各レポート要素の名前属性を意味のある名前(一意にする必要があります)に更新します。

6. SOAスイート・プロジェクトの要約ページに適切なdisplayName、説明および外部リンク要素を更新し、編集内容を保存します。

7. $OER_APP_HOME/oer-app/WEB-INF/config/reports/custom.tocファイルを編集します。
例:

<?xml version="1.0" ?>
<reportSections>
<reportSection name="Custom">
<summary></summary>
<description>Custom reports provide you with the flexibility
to customize reports for your organization or build new reports that align
your organizational metrics with your program goals.</description>
</reportSection>
<reportSection name="Compliance Reports">
<summary></summary>
<description>Code Compliance Inspector report for design-time
compliance information</description>
<report name="complianceReportDoc"/>
<report name="complianceReport"/>
</reportSection>
</reportSections>

8. CustomReport.xmlファイルに追加または変更したものと一致するように、レポート名要素を変更します。

9. 図5-2に示すとおり、変更内容が反映されるようにOERアプリケーション・サーバーを再起動します。

図5-2 OERコンプライアンス・レポートのリンク

次に、ComplianceReport.xmlファイルの例を示します。ここでは、OERアーティファクト・ストアを使用して、コンプライアンス・レポートの要約ページに移動します。

<?xml version="1.0" ?>
<reports>
<report name="complianceReport_project1">
<displayName>Compliance Report (Project 1)</displayName>
<description>This is the compliance report summary page for Composite
Project 1.</description>
<!-- update the host and port, according the your http enabled server
where you have hosted the compliance reports -->
<externalLink>http://host.example.com/CCI/reports/project1/index.html
</externalLink>
</report>
<report name="complianceReport_project2">
<displayName>Compliance Report (Project 2)</displayName>
<description>This is the compliance report summary page for Composite
Project 2.</description>
<!-- update the host and port, according the your http enabled server
where you have hosted the compliance reports -->
<externalLink>http://usclqaap04.us.example.com:8080/tr130107/com.flashline.cmee
.servlet.enterprisetab.Download?path=rep://INSTANCE/reports/cci/FPDemo/
index.html</externalLink>
</report>
</reports>

この場所の実際のURLパスは、次のとおりです。

http://usclqaap04.example.com:8080/tr130107/reports/cci/FPDemo/index.html

前述のURLの斜体部分はレポート・ファイルの相対パスです。リポジトリ名の後ろが相対パスです。図5-3を参照してください。

図5-3 アーティファクト・ストアの編集ダイアログ・ボックス

5.3.1 レポートのレビューおよびコンプライアンスの問題の修正

OERでは、図5-4に示すように、コンプライアンス・レポートのリンクをクリックして、図5-5に示す、すべてのコンポジットの全体のレポートを表示します。

図5-4 コンプライアンス・レポートのリンク

図5-5 全体のコード・コンプライアンス・レポート

図5-5に示すように、違反しているコンポジットをクリックして、違反の詳細を表示し、コンプライアンスの問題を修正します。

図5-6に示すように、OERで個々のコンポジットのコンプライアンス情報を表示することもできます。

図5-6 技術的なコンプライアンス・レポートのレビュー

「コンプライアンス・レポート」ボックスの「開く」リンクをクリックして、図5-7に示すような詳細な結果を表示します。

図5-7 コンポジットのコンプライアンス・レポート

コンプライアンスの問題の修正の詳細は、Oracle Fusion Middlewareインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドfor Oracle Application Integration Architecture Foundation Packのコード・コンプライアンス・インスペクタの使用に関する項を参照してください。

5.3.2 サーバーへのレポート・ファイルのポスト

レポート・ファイルをサーバーにポストし、同僚とコンプライアンスの結果を共有できます。レポート・ファイルをHTTPサーバーにコピーし、他の人に場所を通知します。

6 Enterprise Manager統合ユーティリティ

この章では、Enterprise Manager統合ユーティリティを使用および構成して、Oracle Enterprise ManagerとOracle Enterprise Repositoryを統合する方法について説明します。

この章では、次の項目について説明します。

- 6.1項「概要」

- 6.2項「Enterprise Manager統合ユーティリティの使用」

- 6.3項「Enterprise Manager統合ユーティリティの構成」

- 6.4項「構成ファイルのパスワードの暗号化」

- 6.5項「既知の問題」

6.1 概要

Oracle Enterprise Manager(EM)は、包括的な監視ツールです。これは、OracleのSOA製品、J2EEサーバー、データベース、JVMおよびオペレーティング・システムの監視をサポートしています。

EM統合ユーティリティでは、EMからOracle Enterprise Repositoryに実行時のパフォーマンス・メトリックの要約を提供することで、実行時と設計時の間のループを終了させます。EM統合ユーティリティは、EMからメトリックをプルし、Oracle Enterprise Repositoryにプッシュします。EM統合ツールは、現在、EM Grid Control 10g R3(10.2.0.5)およびEM Grid Control 11gをサポートし、これらと連携しています。

EM Grid Control (EMGC)は、EMGC 10gでも、EMGC 11gでも、1つのEMGCインスタンスに複数のバージョンの製品またはターゲットを同時に監視できます。たとえば、Oracle Service Bus 10gおよび11gはEMGCで同時に監視できるため、これらの両方のインスタンスのメトリックを1つのOracle Enterprise Repositoryインスタンスにプルできます。これには、Oracle Service Bus 10gまたは11gから収集したプロジェクトが含まれます。したがって、Oracle Enterprise RepositoryとEMを統合すると、EM GC 10gでも、11gでも、複数の製品バージョンのターゲットのメトリックをOracle Enterprise Repositoryに収集できます。

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

- 6.1.1項「前提条件」

- 6.1.2項「Enterprise Manager統合ユーティリティの取得」

- 6.1.3項「高レベルなユースケース」

6.1.1 前提条件

EM統合ユーティリティを使用する前に、次の前提条件を実行する必要があります。

- EM統合ユーティリティでは、OERハーベスタ・データパックをOracle Enterprise Repositoryにインストールする必要があります。

- EMからメトリックを受け取るアセットが、Oracle Enterprise Repositoryに存在している必要があります。これらは、Oracle Enterprise Repositoryハーベスタを使用して、SOAスイート/BPEL-PM、WebLogicまたはOracle Service BusからOracle Enterprise Repositoryに発行されます。EM統合ユーティリティでは、OERハーベスタ・データパックをOracle Enterprise Repositoryにインストールする必要があります。
インポートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

- EM統合ユーティリティでは、Enterprise Managerの共有データベース・ビューへの読取り権限が必要です。
Enterprise Managerで読取り専用ユーザーを作成するには、次の手順を実行します(SYSMANリポジトリの所有者権限がない場合)。

1. SYSMANまたはスーパー管理者としてEnterprise Manager Cloud Control(EMGC)コンソールにログインします。「Oracle Enterprise Manager Fusion Middleware Control」ページが表示されます。

2. 右上隅で「設定」をクリックしてから、左側のペインで「管理者」を選択し、「作成」をクリックします。

3. ユーザー名とパスワードを入力し、他のフィールドはデフォルトのままにして、「次へ」をクリックします。

4. 右側の表に示されたPUBLICロールを削除します。

5. 「管理者の作成: システム権限」の下で、「任意のターゲットの表示」を選択します。

6. 「管理者の作成: ターゲット」の下で、この新しい管理者が表示できるすべてのターゲットを選択します。

7. 「管理者の作成: ターゲット権限」の下で、「バッチ割当て」を選択してから、「表示」をクリックします。

注意:

ほとんどの場合、「表示」オプションは選択したままになっていて、グレー表示になっています。

8. 「適用」をクリックします。

9. SQLPLUSにSYSMANユーザーでログインし、この新しいユーザーに、oem_viewなどの他の権限を付与します。

Grant SELECT on MGMT$METRIC_DAILY to oem_view;
Grant SELECT on MGMT$METRIC_CURRENT to oem_view;
Grant SELECT on MGMT$TARGET_PROPERTIES to oem_view;
Grant SELECT on MGMT_VERSIONS to oem_view;
Grant SELECT on MGMT_TARGET_PROPERTIES to oem_view;
Grant SELECT on MGMT_TARGET_ASSOCS to oem_view;
Grant SELECT on MGMT_TARGETS to oem_view;
Grant SELECT on MGMT_TARGET_ASSOC_DEFS to oem_view;

- EM統合ユーティリティでは、Java SDKバージョン6以上が必要です。

- 10gまたは11gのEM Grid Controlをインストールして、EM統合ツールでメトリックをOracle Enterprise Repositoryに収集できるようにします。Oracle Enterprise RepositoryとEMの統合ツールは、現在、EM Grid Controlと統合し、10gおよび11gバージョンのSOAと連携します。

- EM 11gと統合する場合、em-integration-settings.xml構成ファイルを使用します。EM 10gと統合する場合は、em-integration-settings-em10.xml構成ファイルを使用する必要があります。構成ファイルは11.1.1.x.0-EM-Integration.zipファイルにあります。

6.1.2 Enterprise Manager統合ユーティリティの取得

Enterprise Manager統合ユーティリティを取得するには、次の手順を実行します。

1. コンピュータのOracle_HOME\repositoryXXX\core\tools\solutionsディレクトリに移動します。Oracle Enterprise Repositoryのすべてのソリューション・パックの一覧が表示されます。

2. 11.1.1.x.x-EM-Integration.zipファイルを一時ディレクトリに解凍します。

3. インポート/エクスポート・ツールを使用して、11.1.1.x.x-OER-Harvester-Solution-Pack.zipファイルをOracle Enterprise Repositoryにインポートします。詳細は、『Oracle Fusion Middleware Oracle Enterprise Repositoryユーザーズ・ガイド』を参照してください。

6.1.3 高レベルなユースケース

EM統合ユーティリティは次の用途に使用できます。

- EMのOracle Service Busサービスから既存のOracle Enterprise Repositoryアセットにメトリックを発行します。

- EMのBPEL-PMプロセスから既存のOracle Enterprise Repositoryアセットにメトリックを発行します。

- EMのWebサービスから既存のOracle Enterprise Repositoryアセットにメトリックを発行します。

- Oracle Enterprise RepositoryのエンドポイントおよびDeployment: BPELアセットをEMのデプロイメント情報から発行します。

- Oracle Enterprise RepositoryのWeb UIからEMの詳細なメトリックへのリンクをサポートします。

- EMの新しいターゲットをOracle Enterprise Repositoryアセットにマップできるように、構成可能性と拡張性をサポートします。

- EM 11gのOracle SOA Suiteコンポジットのターゲットの取得メトリックをサポートします。EM統合を行うと、サービスを起動し、EM 11gで監視される、コンポジットのメトリックを発行できます。ただし、Oracle Service Bus、BPELまたはWebLogicなどのターゲットと異なり、サービス・エンドポイントがOracle Enterprise Repositoryに存在しない場合、これは統合プロセス中に作成されません。アセットが存在する場合、これらはメトリックで更新されます。

6.2 Enterprise Manager統合ユーティリティの使用

この項では、Enterprise Manager統合ユーティリティの使用方法について説明します。

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

- 6.2.1項「コマンドラインからの実行」

- 6.2.2項「Enterprise Managerからのスケジュール」

- 6.2.3項「メトリックの発行」

6.2.1 コマンドラインからの実行

EM統合ユーティリティはコマンドラインで実行できます。Windowsでは、em-integration.batユーティリティを、LinuxとUNIXでは、em-integration.shを使用します。

em-integration.batまたはem-integration.shを実行する前に、表6-1で示された環境変数が設定されていることを確認します。

Windowsでは、コマンド・ウィンドウからset JAVA_HOMEと入力して、変数JAVA_HOMEの値を表示し、set JAVA_HOME=C:\Jdk6\bin\javaと入力してJAVA_HOMEの値にC:\Jdk6\bin\javaを設定します。

Linuxでは、echo $JAVA_HOMEと入力して変数JAVA_HOMEの値を表示し、設定されていない場合、export JAVA_HOME=/usr/bin/javaを使用して、JAVA_HOMEに値/usr/bin/javaを設定します。

表6-1コマンドライン・スクリプト

環境変数

説明

JAVA_HOME

JAVA_HOME環境変数がインストール済のJavaランタイム(JRE)またはSDKを指していることを確認します。Javaバージョン5以上である必要があります。

JAVA_OPTS

次のようにJAVA_OPTSパラメータが設定されていることを確認します。

set JAVA_OPTS=-Dhttp.proxyPort=80 -Dhttp.proxyHost=www-proxy.example.com -Dhttp.nonProxyHosts= "*.example.com¦localhost" ..."

JAVA_OPTSは、Java実行可能ファイルの追加のオプションです。通常、この変数を設定する必要はありません。ただし、コンピュータがファイアウォール内にある場合や、外部サーバーへのアクセスにHTTPプロキシを使用する必要がある場合には、この変数を設定してください。

関連項目: http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html

表6-2に、EM統合コマンドライン・ユーティリティを使用して指定できるオプションを示します。

表6-2 EM統合のコマンドライン・オプション

EM統合オプション

説明

-settings <file>

XMLファイルで指定された構成設定のことです。

-er_url <URL>

Oracle Enterprise RepositoryインスタンスのURLを指定します。

-er_user <User Name>

Oracle Enterprise Repositoryユーザーの名前を指定します。

-er_password <Password>

Oracle Enterprise Repositoryユーザーのパスワードを指定します。

セキュリティを確実にするために、パスワードを暗号化する必要があります。

Oracle Enterprise Repository Webコンソールには、次のようなパスワードを暗号化するツールがあります。http://<host>:<port>/<domain>/diag/encryptstrings.jsp

-em_url <URL>

EMデータベースのJDBC URLを指定します。

-em_user <User Name>

EMデータベースのユーザー名を指定します。

-em_password <Password>

EMデータベースのパスワードを指定します。

セキュリティを確実にするために、パスワードを暗号化する必要があります。

Oracle Enterprise Repository Webコンソールには、次のようなパスワードを暗号化するツールがあります。http://<host>:<port>/<domain>/diag/encryptstrings.jsp

コマンドラインからのパスワードの暗号化の詳細は、6.4項「構成ファイルのパスワードの暗号化」を参照してください。

-help

EM統合ユーティリティのオンライン・ヘルプを表示します。

注意:

前述のオプションは必須ではなく、省略可能です。オプションが省略された場合、ユーティリティはem-integration.batが存在するカレント・ディレクトリのem-integration-settings.xmlファイルにある情報を使用します。コマンドライン・パラメータが指定された場合、em-integration-settings.xmlの情報よりも優先されます。

図6-1に、em-integration.bat -helpコマンドで表示されたコマンドライン・ユーティリティのオプションとオンライン・ヘルプを示します。

図6-1 Enterprise Manager統合のコマンドライン・ユーティリティのオプション

「図6-1 Enterprise Manager統合のコマンドライン・ユーティリティのオプション」の説明

6.2.2 Enterprise Managerからのスケジュール

Enterprise Managerでは、コマンドライン・アプリケーションが定期的に実行されるようにスケジュールできます。EM統合ユーティリティも、このように実行されるようにスケジュールできます。

詳細は、Oracle Enterprise Manager管理者ガイドのジョブ・システムに関する項を参照してください。

EM統合を1日に1回、夜やシステムのアクティビティの少ない時間にスケジュールすることをお薦めします。

6.2.3 メトリックの発行

この項では、様々なメトリック発行オプションについて説明します。

6.2.3.1 Oracle Service Bus

EM統合では、タイプがEndpointであり、Oracle Service Busプロキシ・サービスおよび外部サービス用にEM内のendpointURIメトリックと一致するendpointURI属性を持つ、Oracle Enterprise Repositoryの既存のアセットを更新します。

注意:

外部サービスは、Oracle Service Busビジネス・サービスによって起動されるサービスです。

一致するendpointURIを持つEndpointアセットが見つからない場合、ツールは名前とOracle Service Busのサービス・タイプ(BusinessServiceまたはProxyService)で、一致するサービス・アセットを検索しようとします。見つかった場合、新しいEndpointアセットを作成し、これをサービスに関連付けます。ビジネス・サービスの場合、エンドポイントはビジネス・サービスによって起動された外部サービスに関連付けられます。

メトリックが収集されていない、あるいはOracle Service Busサービスのメトリックを収集する際にEM Grid Controlにエラーが生じるなど、EM内のOracle Service Busターゲットのためのメトリック収集に問題がある場合、『Oracle Enterprise Manager Oracle Fusion Middleware Managementスタート・ガイド』を参照してください。

注意:

Oracle Service Busサービスのメトリックが最初にEMにアップロードされたとき、値は0です。メトリックが収集されない場合、Oracle Service Busコンソールの「グローバル設定」を使用して、監視フラグをOnにします。

また、Oracle Service Busのプロキシ・サービス/ビジネス・サービス用の別の監視フラグ(操作の設定内)がある場合、これらを有効にしてすべてのサービスのためにメトリックを収集します。

6.2.3.2 BPEL PM

EM統合では、タイプがDeployment:BPELであり、EM内のendpointURIメトリックと一致するendpointURI属性を持つEndpointアセットに対してEntryPointリレーションシップを持つ、Oracle Enterprise Repositoryの既存のアセットを更新します。EMでは、エンドポイントのWSDLの場所が格納されます。

一致するendpointURIを持つEndpointアセットが見つからない場合、ツールはWSDLの修飾名で、一致するサービス・アセットを検索しようとします。見つかった場合、新しいEndpointアセットを作成し、これをサービスに関連付けます。

Deployment:BPELアセットが見つからない場合、ツールは一致するBusiness Process: BPELアセットをプロセス名で検索しようとします。見つかった場合、新しいDeployment:BPELアセットを作成し、これをサービスに関連付けます。

6.2.3.3 WebLogic Webサービス

EM統合では、タイプがEndpointであり、EM内のendpointURIメトリックと一致するendpointURI属性を持つ、Oracle Enterprise Repositoryの既存のアセットを更新します。

一致するendpointURIを持つEndpointアセットが見つからない場合、ツールはWSDLの修飾名で、一致するサービス・アセットを検索しようとします。見つかった場合、新しいEndpointアセットを作成し、これをサービスに関連付けます。

6.2.3.4 Oracle SOA Suite 11g

EM統合を行うと、コンポジット・レベルのみでメトリックを発行できます。エンドポイント・アセットがEM 11gで監視されているコンポジット・サービスのためにOERに存在する場合、メトリックはOER内で更新されます。ただし、Oracle Service Bus、BPELまたはWebLogicなどのターゲットと異なり、サービス・エンドポイントがOracle Enterprise Repositoryに存在しない場合、これは統合プロセス中に作成されません。

6.2.3.5 アーティファクトの作成

Oracle Enterprise RepositoryにArtifact:WSDLアセットが存在しない場合、作成されているすべてのEndpointに対して、EM統合ユーティリティでは対応するアセットが作成されます。EM統合ユーティリティでは、任意のインポート済のファイル用にArtifact:WSDLアセットとArtifact:XSDアセットも作成されます。Oracle Enterprise Repository内の既存のアーティファクトを検索するには、Oracle Enterprise Repositoryハーベスタのフィンガープリント・ルールに従います。

6.2.3.6 エンドポイントの作成

本番エンドポイントがOracle Enterprise Repositoryで取得されていない場合でも、通常、これらをEMで監視できます。一致するサービスを見つけることができて、Deployment:BPELアセットを作成した場合や、一致するBusiness Process:BPELを見つけることができた場合、EM統合ユーティリティはエンドポイント・アセットを作成します。

6.2.3.7 更新するメトリック

EM統合では、デフォルトの構成で、Oracle Enterprise Repositoryの次のメトリックを更新しようとします。Oracle Enterprise RepositoryのWebユーザー・インタフェースの「運用」タブでアセットをすべて表示できます。

前述のターゲット・タイプのすべてについて、これらのメトリックのすべてがEMで収集されるわけではないので、一部は除外されることがあります。em-integration-settings.xmlファイルでは、どのターゲットのどのメトリックを収集するかを構成します。

関連項目:

メトリックのマッピング

- 日次平均レスポンス時間

- 週次平均レスポンス時間

- 月次平均レスポンス時間

- 最小レスポンス時間

- 最大レスポンス時間

- 日次リクエスト

- 週次リクエスト

- 月次リクエスト

- 日次障害

- 週次障害

- 月次障害

- 可用性 - 日次%

- 可用性 - 週次%

- 可用性 - 月次%

- 現在の最大リクエスト/秒

- メトリック監視の開始日

- 最終更新日時

- EMの詳細メトリックへのリンク

6.3 Enterprise Manager統合ユーティリティの構成

この項では、Enterprise Manager統合ユーティリティの構成方法について説明します。内容は次のとおりです。

- 6.3.1項「コマンドライン・ユーティリティのリポジトリおよびEnterprise Manager接続情報の設定」

- 6.3.2項「拡張構成」

6.3.1 コマンドライン・ユーティリティのリポジトリおよびEnterprise Manager接続情報の設定

<EM Integration Home>にあるem-integration-settings.xmlファイルを開き、適切な資格証明でOracle Enterprise Repositoryインスタンス、EMデータベースおよびWebコンソールを指す次のXMLチャンクを変更します。

EMデータベースを使用して、Oracle Enterprise Repositoryに送信されるメトリック情報を取得します。EMコンソールのURLは、EMへのリンクのベースURLとして使用されます。これはOracle Enterprise Repository内で作成されます。

ユーティリティが作成する任意のエンドポイント・アセットのプロパティを構成するには、introspectionSettingsセクションを使用します。createMissingEndpoints属性は、EMがエンドポイントまたはDeployment:BPELを監視するが、一致するサービスに対応するアセットがOERに存在しないシナリオで、エンドポイント・アセットとDeployment:BPELアセットを作成するかどうかを示します。それ以外の場合、次のコードの残りのセクションは無視されます。

matchMultipleEndpoints属性は、ユーティリティで、EMのターゲットと一致する複数のエンドポイント・アセットまたはDeployment:BPELアセットがOracle Enterprise Repositoryで見つかった場合、実行する必要のあるアクションを示します。見つかった場合、メトリックですべてのエンドポイントを更新します(および警告をログに記録します)。見つからなかった場合、ターゲットをスキップします(および警告をログに記録します)。

matchMultipleServices属性は、エンドポイントの作成時に、ユーティリティで、EMのターゲットと一致する複数のサービスまたはBusiness Process:BPELアセットがOracle Enterprise Repositoryで見つかった場合、実行する必要のあるアクションを示します。見つかった場合、一致するそれぞれのアセットに新しいエンドポイントまたはDeployment:BPELをアタッチします(および警告をログに記録します)。見つからなかった場合、ターゲットをスキップします(および警告をログに記録します)。

introspectionDescription、introspectionVersionおよびregistrationStatus属性は、作成された任意のアセットに設定されているプロパティを示します。

例6-1 em-integration-settings.xmlのリポジトリおよびEnterprise Manager接続情報の設定

<repository>
<uri>http://localhost:7131/oer30/services/FlashlineRegistry</uri>
<credentials>
<user>admin</user>
<password>*****</password>
<enableTransaction>false</enableTransaction>
<triggerEvent>false</triggerEvent>
</credentials>
<timeout>120000</timeout>
</repository>
<introspectionSettings>
<createMissingEndpoints>true</createMissingEndpoints>
<introspectionDescription>Found in EM </introspectionDescription>
<introspectionVersion>1.0</introspectionVersion>
<namespace>mythings</namespace>
<!-- The Valid Registration states are 1)Unsubmitted 2)Submitted - Pending
Review 3)Submitted - Under Review 4) Registered -->
<registrationStatus>Submitted</registrationStatus>
</introspectionSettings>
<emDatabase>
<driverClass>oracle.jdbc.driver.OracleDriver</driverClass>
<url>jdbc:oracle:thin@remotehost.there.com:1501:mysid</url>
<credentials>
<user>sysman</user>
<password>*****</password>
</credentials>
</emDatabase>

注意:

アセットの表示、編集、承認および登録を行うための基本的なアクセス権が設定されたユーザーとしてEnterprise Manager統合ユーティリティを実行することをお薦めします。

また、次のように接続情報をコマンドライン・ユーティリティにパラメータとして渡すこともできます。

C:\test\em-integration> em-integration - er_url http://localhost:7101/oer/services/FlashlineRegistryTr -er_user admin - er_password <password> - em_url jdbc:oracle:thin:@remotehost.there.com:1501:mysid - em_user sysman - em_password <empassword>

6.3.2 拡張構成

この項では、Enterprise Manager統合ユーティリティの次の拡張構成について説明します。

- メトリックのマッピング

- 6.3.2.2項「ターゲット・ファインダ」

- 6.3.2.3項「ロギング」

6.3.2.1 メトリックのマッピング

図6-2で示すように、EMのメトリックとOracle Enterprise Repositoryのフィールド間のマッピングはem-integration-settings.xmlで構成されます。これらをデフォルト設定から変更するには、このファイルを開いて、次のように変更します。

- <metricMappingGroup>: EMデータベース・ビューで同じメトリック名を持つメトリック・セット用のマッピング。EMでは、関連するメトリック・セットを同じメトリック名でグループ化します。個々のメトリックには異なるメトリック列があります。この要素には次の属性があります。

- metricName: EMデータベース・ビューのEMメトリック名。

- <metricMapping>: 単一のメトリックのマッピング。この要素には次の属性があります。

- metricColumn: EMデータベース・ビューのEMメトリック列。

- rollupPeriod: EMデータベース・ビューの問合せの対象およびデータの集計方法を示します。DAILY、WEEKLY、MONTHLY、CURRENTのいずれかです。

- viewColumn: データをプルする、EMデータベース内の列を示します。VALUE、AVERAGE、SUM、MINIMUM、MAXIMUM、STANDARD_DEVIATION、SAMPLE_COUNT、COLLECTION_TIMESTAMP、ROLLUP_TIMESTAMP、NOW()、DETAILS_URLのいずれかです。

- ロールアップ期間がCURRENTの場合、AVERAGE、SUM、MINIMUM、MAXIMUM、STANDARD_DEVIATION、SAMPLE_COUNTまたはROLLUP_TIMESTAMP列はサポートされていません。

- ロールアップ期間がDAILY、WEEKLYおよびMONTHLYの場合、VALUEまたはCOLLECTION_TIMESTAMP列はサポートされていません。

- NOW()は、EMに対する問合せの時間が含まれる仮想の列です。

- DETAILS_URLは、EM内の詳細情報のURLが含まれる仮想の列です。これは、EM統合コードによって作成されます。EMデータベース・ビューにはありません。

- oerField: カスタム・データが格納される、Oracle Enterprise Repository内のカスタム・データ・フィールドの内部名。

- overwrite: Oracle Enterprise Repository内のカスタム・データ・フィールドがすでに存在する場合に、これを上書きするかどうかを示します。trueまたはfalseを指定します。指定されていない場合、デフォルト値はtrueです。

図6-2 メトリックのマッピング

「図6-2 メトリックのマッピング」の説明

6.3.2.2 ターゲット・ファインダ

Oracle Enterprise Repository内のアセットと関連するEM内のターゲットのロジックは、各ターゲット・タイプで異なっています。EM統合には、Oracle Service Bus、BPEL-PM、WebLogicのためのターゲット・ファインダがあります。

上級ユーザーの場合、専用のターゲット・ファインダ・クラスを作成できます。図6-3で示すように、これらはem-integration-settings.xmlで構成する必要があります。

- <targetFinder>: EM内のターゲット・タイプ用のターゲット・ファインダ・クラスへのマッピング。この要素には次の属性があります。

- targetType: EMデータベース・ビューのEMターゲット・タイプ。

- targetFinderClass: ファインダ・クラスの完全修飾クラス名。これは、em-integration.jar内にあるcom.oracle.oer.integration.em.TargetFinderを実装する必要があります。

図6-3 ターゲット・ファインダ

「図6-3 ターゲット・ファインダ」の説明

6.3.2.3 ロギング

EM統合では、実行される詳細タスクをロギングするためにlog4jを使用します。このログ・ファイルは<EM Integration Home>にあります。ロギング・オプションの変更は、<EM Integration>フォルダにあるlog4fl.propertiesファイルを更新して行うことができます。

6.4 構成ファイルのパスワードの暗号化

セキュリティを確実にするために、Enterprise Manager統合ユーティリティを実行する前に、構成ファイル内のパスワードを暗号化する必要があります。次の方法のいずれかを使用して、EMの構成ファイルのパスワードを暗号化できます。

- コマンド・プロンプトによる方法

- Oracle Enterprise Repository Webコンソールによる方法

コマンド・プロンプトによる方法

1. <em_integration_home>ディレクトリに移動します。

2. 次のように、コマンド・プロンプトからパスワード暗号化ツールを実行します。
> encrypt.bat em-integration-settings.xml em-integration-settings.xml

<Oracle_home>/tools/solutions/11.1.1.x.x-OER-PasswordTools.zipにある、パスワード暗号化ツール(encrypt.batまたはencrypt.sh)を使用すると、構成ファイルem-integration-settings.xmlに格納されていパスワードを暗号化できます。

Oracle Enterprise Repository Webコンソールによる方法

1. 次の場所にあるOracle Enterprise Repository Webコンソールに移動します。
http://<host>:<port>/<domain>/diag/encryptstrings.jsp (使用しているコンピュータの資格証明に合ったホスト、ポートおよびドメインに置き換えます)

2. 「ツール」セクションにスクロールして、パスワードの文字列の暗号化リンクをクリックし、パスワードの暗号化ページを表示します。

3. クリア・テキストのパスワードを暗号化する文字列テキスト・ボックスに入力します。

4. 「問合せの発行」ボタンをクリックします。

5. 暗号化されたパスワード文字列をコピーして、適切なコンテキスト・ファイルまたはプロパティ・ファイルに貼り付けます。

6.5 既知の問題

この項では、次の既知のEnterprise Manager統合ユーティリティの問題について説明します。

6.5.1 不正な暗号化パスワードの使用

不正な暗号化パスワードでem-integration-settings.xmlファイルを構成した場合、非常に長いスタック・トレースが表示されます。非常に長いスタック・トレースは、次のとおりです。

at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement
(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentConten
Dispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at org.apache.axis.encoding.DeserializationContext.parse
(Deserialization
Context.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:424)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnder
tandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2765)
at org.apache.axis.client.Call.invoke(Call.java:2748)
at org.apache.axis.client.Call.invoke(Call.java:2424)
at org.apache.axis.client.Call.invoke(Call.java:2347)
at org.apache.axis.client.Call.invoke(Call.java:1804)
at com.flashline.registry.openapi.service.v300.FlashlineRegistryTrSoap
BindingStub.authTokenCreateWithLicense(FlashlineRegistryTrSoapBindingStub.
java:741)at com.oracle.oer.sync.plugin.writer.oer.ALERConnectionCache.
getAuthToken(ALERConnectionCache.java:128)
at com.oracle.oer.sync.plugin.writer.oer.ALERAssetQueries.getToken
(ALERAssetQueries.java:82)
at com.oracle.oer.sync.plugin.writer.oer.ALERAssetQueries.assetTypeQuery
ByUUID(ALERAssetQueries.java:159)
at com.oracle.oer.sync.framework.MetadataManager.putAssetType
(MetadataManager.java:204)atcom.oracle.oer.sync.framework.impl.
DefaultPluginManager.processIntrospector(DefaultPluginManager.java:104)
... 5 more

7 Amberpointとの統合

この章では、Oracle Enterprise RepositoryとAmberpointの統合を開始する方法について説明します。

注意:

Oracle Enterprise RepositoryとAmberpoint(現在は、Oracle Business Transaction Manager (OBTM)に再ブランド化済)の統合は、OBTM 11より前のバージョンの製品に対してのみ、サポートされています。OBTM 11では、Oracle Enterprise Repositoryとの統合のサポートはサポートされていません。

Oracle Exchangeユーティリティは、Amberpointに保存されているパフォーマンス・メトリックでエンドポイント・アセットを更新します。UDDIMappings.xmlファイルには、パフォーマンス・メトリックのtModelと、これらのメトリックが移入されているOracle Enterprise Repositoryのカスタム・フィールドのキー間のマッピングが含まれています。任意のカスタム・アセット・タイプのタブの任意のフィールドにマップされている任意のタブにメトリックが表示されるように、UDDIマッピング・ファイルをカスタマイズすることもできます。例7-1に、UDDIMappings.xmlファイルのメトリック部分を示します。

例7-1 UDDIMappings.xmlファイルのメトリック部分

<metrics>
<keyedReference metricsName="DailyAvailability"
alerName="availability---year----"
tModelKey="uddi:amberpoint.com:management:metrics:availability" keyName="Last 24
hours - Availability (percentage value)"/>
<keyedReference metricsName="WeeklyAvailability"
alerName="availability---week----"
tModelKey="uddi:amberpoint.com:management:metrics:availability" keyName="Last
week - Availability (percentage value)"/>
<keyedReference metricsName="MonthlyAvailability"
alerName="availability---month----"
tModelKey="uddi:amberpoint.com:management:metrics:availability" keyName="Last
month - Availability (percentage value)"/>
<keyedReference metricsName="DailyAvgResponseTime"
alerName="average-response-time--seconds-"
tModelKey="uddi:amberpoint.com:management:metrics:avgResponseTime" keyName="Last
24 hours - Response Time (average value in milliseconds)"/>
<keyedReference metricsName="WeeklyAvgResponseTime"
alerName="weekly-average-response-time--milliseconds-"
tModelKey="uddi:amberpoint.com:management:metrics:avgResponseTime" keyName="Last
week - Response Time (average value in milliseconds)"/>
<keyedReference metricsName="MonthlyAvgResponseTime"
alerName="monthly-average-response-time--milliseconds-"
tModelKey="uddi:amberpoint.com:management:metrics:avgResponseTime" keyName="Last
month - Response Time (average value in milliseconds)"/>
<keyedReference metricsName="DailyFaults" alerName="daily-faults"
tModelKey="uddi:amberpoint.com:management:metrics:faults" keyName="Last 24 hours
- Faults (number)"/>
<keyedReference metricsName="WeeklyFaults" alerName="weekly-faults"
tModelKey="uddi:amberpoint.com:management:metrics:faults" keyName="Last week -
Faults (number)"/>
<keyedReference metricsName="MonthlyFaults" alerName="monthly-faults"
tModelKey="uddi:amberpoint.com:management:metrics:faults" keyName="Last month -
Faults (number)"/>
<keyedReference metricsName="DailyRequests" alerName="daily-requests"
tModelKey="uddi:amberpoint.com:management:metrics:requests" keyName="Last 24
hours - Requests (number)"/>
<keyedReference metricsName="WeeklyRequests" alerName="weekly-requests"
tModelKey="uddi:amberpoint.com:management:metrics:requests" keyName="Last week -
Requests (number)"/>
<keyedReference metricsName="MonthlyRequests" alerName="monthly-requests"
tModelKey="uddi:amberpoint.com:management:metrics:requests" keyName="Last month -
Requests (number)"/>
<keyedReference metricsName="Timestamp" alerName="last-updated"
tModelKey="uddi:amberpoint.com:management:metrics:timeStamp" keyName=""/>
<keyedReference metricsName="RegisteredDate"
alerName="endpoint-publication-date"
tModelKey="uddi:amberpoint.com:management:registeredDate" keyName=""/>
</metrics>

図7-1に、エンドポイントがExchangeユーティリティで同期された後、Amberpointによって保存されたパフォーマンス・メトリックのOracle Enterprise Repositoryでの表示内容を示しています。

図7-1 Oracle Enterprise Repositoryの操作情報

「図7-1 Oracle Enterprise Repositoryの操作情報」の説明

図7-2に、Amberpointによって保存されたパフォーマンス・メトリックのOracle Service Registryでの表示内容を示しています。

図7-2 Amberpoint WSDLサービスのためのOracle Service Registryのパフォーマンス・メトリック

「図7-2 Amberpoint WSDLサービスのためのOracle Service Registryのパフォーマンス・メトリック」の説明

第III部

Oracle Enterprise Repositoryと開発環境との統合

この部では、Oracle JDeveloperと他のIDEを構成して、Oracle Enterprise Repositoryからファイルを簡単に使用する方法について説明します。

この部は、次の章で構成されています。

- 第8章「開発環境との統合」

- 第9章「IDEとの統合をサポートするためのOracle Enterprise Repositoryの構成」

- 第10章「Oracle Enterprise Repositoryとの統合をサポートするためのIDEの構成」

- 第11章「IDEによるOracle Enterprise Repositoryとの相互作用」

- 第12章「SAPとの統合」

8 開発環境との統合

この章では、アセットの作成プロセスとアセットの使用プロセス、およびOracle Enterprise Repositoryを開発環境と統合する方法について説明します。

この章では、次の項目について説明します。

- 8.1項「概要」

- 8.2項「ベスト・プラクティス」

- 8.3項「高レベルなユースケース」

8.1 概要

Oracle Enterprise Repositoryでは、開発者が開発環境を終了しないでアセットを容易に検索したり、リポジトリからアセットを使用したりすることができるように、開発環境内での統合が提供されています。アセットおよび関連するアーティファクトは、開発者のワークスペースに直接ダウンロードされます。統合を使用すると、簡単に開発環境からOracle Enterprise Repositoryにアセットの発行または収集を行って企業でアセットを使用できます。

開発者のワークスペース内でリポジトリにアクセスすると、Oracle Enterprise Repositoryへのビューも提供されます。これにより、開発者はリポジトリからのアーティファクトとアセットのダウンロード、リポジトリへの問合せおよびリポジトリの内容の表示を行うことができます。

統合の目標は、SOAガバナンスが日々の開発の枠組みの一部になることです。

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

- 8.2項「ベスト・プラクティス」

- 8.3項「高レベルなユースケース」

8.2 ベスト・プラクティス

この項では、次のベスト・プラクティス・プロセスについて説明します。

- 8.2.1項「アセットの作成プロセス」

- 8.2.2項「アセットの使用プロセス」

8.2.1 アセットの作成プロセス

Oracle Enterprise Repositoryを使用し、アセットのリタイアを介してアセットが提供されたときから、新しいアセットとアセットの拡張を追跡します。アセットが開発されたときやアセットが完了したときからも追跡できます。Oracle Enterprise Repositoryで、アセットを使用してプロジェクトの作成や使用、トレース機能の提供、影響分析のサポートおよびアセットのリリース計画に対する変更についてのプロジェクト・レベルの影響の指摘を行います。

最初に、ビジネス・アナリストが、作成する必要のある機能について説明します。提案された機能がないと判断した場合、設計者が機能の設計や機能以外の要件を提供します。開発チームは、機能についての要件と機能以外の要件を満たすアセットの作成、収集または拡張を行います。

図8-1に、アセットの作成プロセスの例を示します。

図8-1 アセットの作成プロセス

「図8-1 アセットの作成プロセス」の説明

これは、開発チームが、要件やユースケースなど、作成するアセットに対して可視性を必要としているということを示します。Oracle Enterprise Repositoryでは、開発者が開発環境から直接アセットの詳細を表示できるようにすることで、可視性を提供しています。開発チームが特定のアセットを構築し、次に、アセットをOracle Enterprise Repositoryに収集します。その後、レビューや承認プロセスに移行します。

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

- 8.2.1.1項「ポリシー」

- 8.2.1.2項「アセットの提案または発行」

8.2.1.1 ポリシー

アセットの作成および拡張は設計時のポリシーで管理できます。ポリシーは、設計および開発の段階で考慮する必要があるアセットの要件を示し、管理者にガバナンス、アーキテクチャや他の組織の標準にアセットが準拠し、これを監視する手段を提供するために、アセットに適用されます。たとえば、ポリシーは企業の品質基準を明確にし、アセットが実行されるプラットフォームを示し、許容可能な問題発生率を特定します。

- ポリシーは複数のアセットに適用できます。

- 複数のポリシーを任意のアセットに適用できます。

- 各ポリシーは、少なくとも1つのアサーション文から構成されます。各アサーションには名前と説明があり、技術的な定義が含まれています。技術的な定義には、サードパーティのテスト・ツールや検証ツールを使用して、アサーションを自動的に検証する必要がある、追加のメタデータが含まれています。このメタデータは、Webサービス固有のポリシー情報、XML、または外部システムで読取り可能な他の形式である場合があります。たとえば、問題発生率に対するアサーション文は、問題発生率が1%未満でなければならないことを示す場合があります。

Oracle Enterprise Repositoryのポリシー情報には、開発環境からアクセスできます。開発チームがアセットをOracle Enterprise Repositoryに収集した後、ポリシーをツールで自動的に検証するか、専門家による検証を行うことができます。

8.2.1.2 アセットの提案または発行

アセットは、ロールおよび状況によって、様々な方法でOracle Enterprise Repositoryに提示または発行できます。その方法の一部を次に示します。

- 一般的なOracle Enterprise Repositoryのユーザー・コミュニティは、コンソールからアセット・リクエストまたは完了したアセットを発行できます。

- ビジネス・アナリストおよび設計者は、アセット・エディタを使用して、構築するアセットを作成できます。

- 開発チームは、開発環境からアセットを発行および収集できます。

- ファイルまたはディレクトリに格納された既存のアセットは、コンピテンシー・センターまたはポートフォリオ・マネージャが収集できます。

- QAまたはIT業務担当者は、ビルド環境またはランタイム環境からアセットを収集できます。

8.2.2 アセットの使用プロセス

標準のソフトウェア開発ライフサイクル(SDLC)プロセスには、次の2つの主要な設計時使用モデルがあります。

モデル1: 早期にライフサイクル内で特定されるアセット(プリスクリプティブな再利用とも呼ぶ)

- ビジネス・アナリストまたはプロジェクト設計者(あるいはその両方)がプロジェクトの機能に関する要件および機能以外の要件を満たすアセットを特定します。

- 開発チームが関連するアセットのキットを受け取ります。

モデル2: 開発主導の検出

- 開発者がプロジェクトの機能に関する要件および機能以外の要件を満たすアセットを特定します。

モデル1は頻繁に再利用されるので、最も推奨される設計時使用モデルです。ただし、組織がSDLCプロセスに精通していて、ロールを十分に定義している必要があります。

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

- 8.2.2.1項「プリスクリプティブな再利用」

- 8.2.2.2項「開発者主導の検出」

- 8.2.2.3項「使用状況の自動検出」

8.2.2.1 プリスクリプティブな再利用

Oracle Enterprise RepositoryのWebコンソールで、ビジネス・アナリストまたはプロジェクト設計者(あるいはその両方)がプロジェクトの機能に関する要件および機能以外の要件を満たすアセットを特定します。これらのアセットはコンプライアンス・テンプレートと呼ばれるキットにパッケージ化されます。コンプライアンス・テンプレートは、アセット要件セットまたはアセット・ソリューション・セットを内部またはアウトソーシングされたプロジェクト・チームに示します。Oracle Enterprise Repositoryには、次の2つのタイプのコンプライアンス・テンプレートが含まれています。

- プロジェクト・プロファイル

- アーキテクチャ・ブループリント

プロジェクト・プロファイルは、通常、個々のプロジェクトに対して作成されますが、アーキテクチャ・ブループリントは複数のプロジェクトで使用できる再利用可能なソリューション・セットです。一般的なユースケースには次のものがあります。

- プロジェクトの計画担当者がポートフォリオの各プロジェクトのプロジェクト・プロファイルを作成し、プロジェクト計画に組み込まれた再利用可能なアセットを特定し、計画内容を評価します。

- ビジネス・アナリストがプロジェクトのプロファイルを作成し、プロジェクトのビジネス要件を満たすアセットを特定します。

- プロジェクト設計者がプロジェクトプロファイルを作成し、プロジェクトの技術要件を満たすアセットを特定します。

- 企業の設計者がアーキテクチャ・ブループリントを作成し、これに標準のフレームワーク、およびプロジェクト・レベルのセキュリティ要件を満たすために使用するアセットを指定します。

- サービス指向アーキテクチャ(SOA)の担当者がアーキテクチャ・ブループリントを作成し、特定のビジネス機能を編成するサービスを判定します。

- 製品ラインの設計者がアーキテクチャ・ブループリントを作成し、これに特定の製品ライン(Bills of Material(部品表)と同様なもの)を構築するために使用するアセットを指定します。

図8-2に、プリスクリプティブな再利用プロセスの例を示します。

図8-2 プリスクリプティブな再利用

「図8-2 プリスクリプティブな再利用」の説明

コンプライアンス・テンプレートは、Oracle Enterprise RepositoryのWebコンソールを介してプロジェクトに適用されます。コンプライアンス・テンプレートに特定されたアセットは自動的にプロジェクトの開発環境に表示されます。このように、開発チームは開発作業を迅速に開始します。

コンプライアンス・テンプレートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

8.2.2.2 開発者主導の検出

開発者がOracle Enterprise Repositoryからアセットを取得するには、次の2つの方法があります。

- Oracle Enterprise Repository Webコンソールによる方法

- IDEによる方法(この機能は、現在、EclipseおよびVS .NETで使用可能です。開発者は、今後のリリースでJDeveloperからアセットをダウンロードできるようになります。)

開発者は、Oracle Enterprise Repositoryで、プロジェクトで使用するアセットを取得できます。Oracle Enterprise Repositoryの「使用-ダウンロード」機能を使用すると、アセット・アーティファクトにアクセスできます。さらに、開発者は、プライマリ・アセットに関連するすべてのアセットを選択してダウンロードし、アセットに必要な依存性がすべて含まれていることを確認できます。リポジトリでは、使用状況を追跡し、使用状況に基づいたレポートが生成されます。

開発者は開発環境からOracle Enterprise Repositoryにアクセスすることもできます。つまり、必要なアセットにアクセスするために開発者はIDEを終了する必要はありません。

8.2.2.3 使用状況の自動検出

Oracle Enterprise Repositoryでは、設計時のアセットの使用を追跡し、これについて報告します。使用状況の自動検出は、次の2つの方法で追跡されます。

- 手動のアセット(Oracle Enterprise Repository内の「使用-ダウンロード」プロセス)による方法または開発環境による方法

- Software File Identification (SFID)を利用する使用状況の自動検出

Software File Identification (SFID)は、手動のアセット(「使用-ダウンロード」プロセス)とは別のアセットの使用状況を判断する機能を提供します。SFIDプロセスは、選択したファイルおよびアセット・アーティファクトを一意のSFIDフィンガープリントとタグ付けします。アセットが「使用-ダウンロード」プロセス以外の方法で取得された場合でも、このタグは、アセットが使用された時間と場所を検出するために使用されます。アセット内でタグ付けされたファイルを開発者のIDEで開いたときに、使用状況のインスタンスがOracle Enterprise Repositoryによって記録されます。SFIDの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

8.3 高レベルなユースケース

8.2項「ベスト・プラクティス」では、作成および使用プロセスの概要について説明し、開発環境のユースケースを示しました。個々のケースについては、次の項で説明します。各開発環境には、これらのユースケースのサブセットが含まれています。

- 8.3.1項「ファイルの発行」

- 8.3.2項「ファイルの収集」

- 8.3.3項「Oracle Enterprise Repositoryの検索」

- 8.3.4項「アセット詳細の表示」

- 8.3.5項「アーティファクトのダウンロード」

- 8.3.6項「プリスクリプティブな再利用」

- 8.3.7項「使用状況の自動検出」

8.3.1 ファイルの発行

開発環境を使用すると、開発者はEnterprise Repositoryに発行するファイルを選択できます。ファイルは、発行するために.zip形式にバンドルされます。開発者は、単一のアセットまたは複合ペイロード・アセット(あるいはその両方)をOracle Enterprise Repositoryに発行できます。

8.3.2 ファイルの収集

Oracle Enterprise Repositoryでは、Oracle製品および標準ベースのファイルからファイルを収集できます。これには、Oracle SOA Suite、Oracle Service Bus、および標準BPEL、WSDL、XSDおよびXSLTファイルとファイル・ディレクトリが含まれています。収集すると、Oracle Enterprise Repositoryによって、アセットの作成、アセット・メタデータの移入、およびアーティファクト・ファイルの情報に基づいた関連リンクの生成が自動的に実行されます。収集機能はコマンドラインから使用可能で、IDEまたはビルド・プロセスに統合できます。

詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

8.3.3 Oracle Enterprise Repositoryの検索

開発環境から、Enterprise Repository内のアセットとアーティファクトにアクセスできます。IDEを介して、開発者は様々な基準に一致するアセットの検索、または開発プロジェクトに関係するアセットの表示を行うことができます。

8.3.4 アセット詳細の表示

選択したアセットに対して、開発者はアセット詳細(説明、使用履歴、削減予測、リレーションシップなど)を表示できます。アセット・メタデータ内で、ドキュメント、ユーザー・ガイド、テスト・ケースなどのサポートへのリンクが提供されていて、これを使用すると、開発者は既存の機能を再利用できます。

8.3.5 アーティファクトのダウンロード

開発者はプロジェクトにアセットのアーティファクト(ペイロード)をダウンロードできます。通常、アセット・ペイロードは、開発者がサービス(WSDLファイルなど)を使用する際や、サービスをコード・ベース(バイナリやBPELファイルなど)に組み込む際に必要な機能です。

8.3.6 プリスクリプティブな再利用

Oracle Enterprise Repositoryを介して、アナリスト、設計者、技術責任者、およびプロジェクトの設計段階で作業するその他の担当者は、プロジェクトの要件を満たすアセットの一覧を作成できます。アセットの一覧はリポジトリのコンプライアンス・テンプレートで取得され、コンプライアンス・テンプレートはOracle Enterprise Repositoryプロジェクトに関連付けられています。

IDE内から、プロジェクトに割り当てられたすべてのコンプライアンス・テンプレートに表示されるアセットの一覧を表示できます。どのアセットが他のプロジェクト・メンバーで使用されているかが示されます。コンプライアンス・テンプレートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

8.3.7 使用状況の自動検出

Oracle Enterprise Repositoryでは、開発環境内でアセットの再利用を自動的に検出できます。これにより、アセットがOracle Enterprise Repositoryでダウンロードされたか、開発者のデスクトップなど、他のソースから取得したかどうかにかかわらず、開発チームはアセットの再利用クレジットを取得できます。

様々なIDEの各ユースケースの詳細は、第11章「IDEによるOracle Enterprise Repositoryとの相互作用」を参照してください。

表8-1に、各開発環境でサポートされている具体的なユースケースを示します。

表8-1 ユースケースおよびサポートされている開発環境

ユースケース

JDeveloper

Eclipse

VS .NET

ファイルの発行

はい

収集(BPEL、WSDL、XSD、XSLT)

はい

はい

はい

収集(SCA)

11g

Oracle Enterprise Repositoryの検索

11g

はい

はい

アセット詳細の表示

11g

はい

はい

アーティファクトのダウンロード

11g

はい

はい

プリスクリプティブな再利用

はい

はい

使用状況の自動検出

はい

はい

表8-2に、サポートされているバージョンおよび各IDEの対象者を示します。

表8-2 IDEにサポートされるバージョン

IDE

対象者

サポートされるバージョン

JDeveloper

Oracleカスタマ

10gR3、11gR1

Eclipse

Java開発者

3.4

3.3とSun JDK 5.0

2.0.3とSun JDK 5.0

VS .NET

.Net開発者

2008

2005

9 IDEとの統合をサポートするためのOracle Enterprise Repositoryの構成

この章では、IDEとの統合をサポートするためにOracle Enterprise Repositoryを構成する方法について説明します。

IDEを構成する前に、Oracle Enterprise Repositoryで次の手順を実行します。

- 9.1項「ハーベスタのインストール」

- 9.2項「Oracle Enterprise RepositoryプロジェクトへのIDEユーザーの割当て」

- 9.3項「コンプライアンス・テンプレートの設定」

- 9.4項「使用状況の自動検出の設定」

9.1 ハーベスタのインストール

ハーベスタは、Oracle JDeveloper、EclipseおよびVS .NETなどのIDEから生成された標準ベースのアーティファクトを収集できます。ハーベスタをこれらのIDEのいずれかと統合し、各IDEクライアントで実行できます。

ハーベスタの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

9.2 Oracle Enterprise RepositoryプロジェクトへのIDEユーザーの割当て

Oracle Enterprise Repositoryでは、Oracle JDeveloper、EclipseおよびVS .NETなどのIDEのプロジェクトで作成されたアセット、およびこれらのIDEで作成されたプロジェクトで使用されたアセットを追跡できます。

新しいプロジェクトの追加およびプロジェクトへのユーザーの割当ての詳細は、『Oracle Fusion Middleware Oracle Enterprise Repositoryユーザーズ・ガイド』を参照してください。

9.3 コンプライアンス・テンプレートの設定

コンプライアンス・テンプレートは、特定のファミリのOracle Enterprise Repositoryアーティファクトを記述し、EclipseおよびVS .NETなどの一部の製品構成でのみ使用可能です。コンプライアンス・テンプレートは、プリスクリプティブな再利用のユースケースをサポートするために必要です。

コンプライアンス・テンプレートの設定方法の詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

9.4 使用状況の自動検出の設定

Software File Identification(SFID)は、Oracle Enterprise Repositoryでアセットの使用状況を判定するプロセスです。EclipseおよびVS .NETなどの開発環境で機能するSFIDを使用できます。IDEによっては、SFIDでは、Workspace Studio用のOracle Enterprise Repositoryプラグイン(EclipseベースのIDE)またはVisual Studio .NET用Oracle Enterprise Repositoryプラグインのインストールが必要になります。

SFIDによる使用状況の自動検出の設定の詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

10 Oracle Enterprise Repositoryとの統合をサポートするためのIDEの構成

この章では、Oracle Enterprise Repositoryと統合するためにOracle JDeveloper、EclipseおよびVisual Studio .NET(VS .NET)を構成する方法について説明します。

この章では、次の項目について説明します。

- 10.1項「Oracle JDeveloperの構成」

- 10.2項「Eclipseの構成」

- 10.3項「VS .NETの構成」

10.1 Oracle JDeveloperの構成

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

- 10.1.1項「Oracle JDeveloper 11g R1パッチセット・リリースとの統合」

- 10.1.2項「Oracle JDeveloper 11g R1との統合」

- 10.1.3項「Oracle JDeveloper 10gとの統合」

10.1.1 Oracle JDeveloper 11g R1パッチセット・リリースとの統合

Oracle Enterprise RepositoryとOracle JDeveloper 11gリリース1のパッチセット間の接続を作成するには、次の手順を実行します。

1. ローカル・コンピュータにOracle JDeveloperをインストールします。

2. Oracle JDeveloperを開き、「ヘルプ」、「更新の確認」をクリックします。「更新の確認」ダイアログが表示されます。

3. 「次へ」をクリックします。図10-1に示すように、「ソース」ページが表示されます。

図10-1 「更新の確認」 - 「ソース」ページ

「図10-1 「更新の確認」 - 「ソース」ページ」の説明

4. 「次へ」をクリックします。「更新」ページが表示されます。

5. 「可能な更新」ボックスにsoaと入力し、Oracle SOA Composite Editor 11.1.1.x.xを検索します。

6. SOA JDeveloper拡張の更新を選択して、「次へ」をクリックします。「ダウンロード」ページが表示されます。

注意:

使用しているJDeveloperのバージョンに基づいて、コンポジット・エディタのバージョンが変更されることがあります。

7. 「次へ」をクリックします。「サマリー」ページが表示されます。

8. 「終了」をクリックします。

9. Oracle JDeveloperを再起動します。Oracle JDeveloperウィンドウが表示されます。

10. 手順2から4を繰り返します。「更新」ページが表示されます。

11. 「可能な更新」ボックスにrepositoryと入力し、使用可能な更新を検索します。

12. Oracle Enterprise Repository Adapter 111.1.1.x.xとOracle Enterprise Repository Harvester 111.1.1.x.xの両方の拡張を選択し、「次へ」をクリックします。「ダウンロード」ページが表示されます。

注意:

Oracle Enterprise Repository AdapterとOracle Enterprise Repository Harvesterの拡張のバージョンは、使用しているJDevelopeのバージョンに基づいて、変わることがあります。

13. 「次へ」をクリックします。「サマリー」ページが表示されます。Oracle Enterprise RepositoryとOracle Enterprise Repository Harvesterの両方の拡張を選択したことを確認します。

14. 「終了」をクリックします。

15. Oracle JDeveloperを再起動します。Oracle JDeveloperウィンドウが表示されます。

16. 「ファイル」、「新規」をクリックします。「新規ギャラリ」ダイアログが表示されます。

17. 「一般」、「接続」を選択してから、図10-2に示すように、「Oracle Enterprise Repository接続」を選択します。

図10-2 「新規ギャラリ」ダイアログ

「図10-2 「新規ギャラリ」ダイアログ」の説明

18. 「OK」をクリックします。図10-3に示すように、「Oracle Enterprise Repository接続」ダイアログが表示されます。

図10-3 「Oracle Enterprise Repository接続」ダイアログ

「図10-3 「Oracle Enterprise Repository接続」ダイアログ」の説明

19. 次の情報を入力します。

- リポジトリURL: Oracle Enterprise Repositoryの実行中インスタンスにアクセスできるURL

- ユーザー名: Oracle Enterprise Repositoryのユーザー名

- パスワード: Oracle Enterprise Repositoryのパスワード

20. 「接続のテスト」をクリックします。「ステータス」ペインに成功メッセージが表示されます。

21. 「OK」をクリックします。

22. 図10-4に示すように、「リソース・パレット」にある「IDE接続」で、Oracle Enterprise Repositoryを展開し、作成したアプリケーション・サーバーの接続を表示します。

図10-4 リソース・パレット

「図10-4 リソース・パレット」の説明

23. 「検索」ボックスでアセットを検索するための検索基準を入力します。図10-5に示すように、すべてのアセットの一覧が表示されます。

図10-5 検索結果

「図10-5 検索結果」の説明

注意:

- SOAハーベスタ・ソリューション・パックをOracle Enterprise Repositoryにインストールして、JDeveloperから収集を有効にします。これは、Developer 10gと11gの両方に適用できます。

- Oracle Enterprise Repository接続を作成してテストする手順を説明している手順16から23は、すべてのパッチセット・リリース(11.1.1.x.x)で同じです。

10.1.2 Oracle JDeveloper 11g R1との統合

JDeveloper 11gまたはSOA Suite 11gにハーベスタのANTタスクをインストールするには、次の手順を実行します。

1. jdevインストール・ディレクトリでjdeveloper.exeをダブルクリックして、Oracle JDeveloperを開きます。

注意:

この手順の間に少なくとも1回はJDeveloperアプリケーションを起動して終了します。

2. ハーベスタのzipファイルをJDeveloperインストールに解凍します。zipファイルの内容が<jdeveloper_home>/harvesterディレクトリに抽出されます。

3. JDeveloperインストールに合うようにtools11g.xmlファイルを編集します。

4. <jdeveloper_home>\system11.1.1.x.xx.xx.xx\o.jdeveloper\product-preferences.xmlディレクトリにある、JDeveloperの製品プリファレンスのXMLファイルにtools11g.xmlの内容をマージします。
既存のエントリ<hash n = "oracle.ideimpl.externaltools.ExternalToolList">がある場合、tools11g.xmlファイルの内容で置き換えます。ない場合は、最初の<ide:preferences>要素のすぐ後ろにこれを追加します。

10.1.3 Oracle JDeveloper 10gとの統合

Oracle Enterprise Repositoryとの統合をサポートするようにOracle JDeveloperを構成するには、次の手順を実行します。

1. Oracle_HOME\repositoryXXX\core\tools\solutionsディレクトリに移動して、11.1.1.x.x-OER-Harvester.zipファイルをOracle JDeveloperディレクトリに解凍します。たとえば、jdeveloper.exeファイルがC:\oracle\soaにある場合、イントロスペクタ・ディレクトリがそのディレクトリに解凍されていることを確認します。

2. <jdeveloper_home>\harvesterディレクトリに移動して、tools.xmlファイルを右クリックして、テキスト・エディタで開きます。

3. <tools>要素と</tools>要素の間にあるすべての要素をコピーして、<jdeveloper_home>\jdev\system\oracle.jdeveloper.10.1.xxxxxディレクトリにあるtools.xmlファイルにコピーした要素を貼り付けます。

4. tools.xmlファイルを<jdeveloper_home>\jdev\system\oracle.jdeveloper.10.1.xxxxxディレクトリに保存します。

5. Oracle JDeveloperを起動します。「JDeveloper」ウィンドウで、「ツール」、「外部ツール」を選択します。次の2つのオプションが表示されます。

- このファイルをOERに発行する

- このプロジェクトをOERに発行する

6. 「このファイルをOERに発行する」を選択して、「編集」をクリックします。「外部ツールの編集」ダイアログが表示されます。

7. 「プロパティ」タブをクリックして、Oracle Enterprise Repositoryサーバーを指すように、欠落しているプロパティを構成します。

8. 外部のHarvesterSettings.xmlファイルを指すには、設定ファイルと呼ばれるプロパティを追加し、設定ファイル(たとえば、c:\temp\MyHarvesterSettings.xmlなど)のURLに値を設定します。

9. 「このプロジェクトをOERに発行する」オプションを選択する場合も、手順6から8を繰り返します。

10. アプリケーション・ナビゲータで、ファイルを選択して右クリックし、「このファイルをOERに発行する」または「このプロジェクトをOERに発行する」を選択します。

注意:

Oracle JDeveloper 10gでは、外部ツールのための複数選択はサポートされていません。複数選択しても、1つのファイルしか収集されません。

11. 「外部ツールの編集」ダイアログで、「プロセス」タブをクリックします。

12. 「変更」をクリックしてJDKバージョンを1.6に変更してから、「OK」をクリックします。

注意:

Oracle Enterprise Repositoryの参照は、Oracle JDeveloper 10g以降、サポートされていません。10gのアセットを使用できるようにするには、次の手順を実行します。

- JDeveloper 10gからアセットを収集する。

- WSDL用のSOAランタイムから再収集する。

また、JDeveloper 10gまたは11gから収集したアセットは使用できません。

10.2 Eclipseの構成

ハーベスタは、Oracle SOAスイート・アーティファクトをOracle Enterprise Repositoryに統合して、可視性、影響分析および再利用性のユースケースをサポートします。この項では、Eclipseを構成してOracle Enterprise Repositoryとの統合をサポートする際に含まれる様々な手順について説明します。

- 10.2.1項「ANTによるEclipseでの収集の有効化」

- 10.2.2項「Oracle Enterprise Repositoryプラグインの構成」

- 10.2.3項「Oracle Enterprise Repositoryプリファレンスの構成」

- 10.2.4項「使用状況の自動検出の有効化」

10.2.1 ANTによるEclipseでの収集の有効化

この項では、Eclipseを使用して、サンプル・アーティファクトをOracle Enterprise Repositoryに収集する方法について説明します。

10.2.1.1 ANTによるハーベスタを使用するEclipse環境の設定

1. Eclipseワークスペースで、「Run」、「External Tools」、「External Tools Configurations」を選択します。

2. 新しいANTビルドを作成します。

3. 「Main」タブで、次を入力します。

- Buildfile: <Harvester_Home>\harvester-ant.xml

- Base Directory: <Harvester_Home>

4. 「Targets」タブで、introspect-projectオプションを確認します。

5. 「Classpath」タブで、次の外部jarを入力します。

- <Harvester_Home>\lib\mail-1.4.jar

- <Harvester_Home>\lib\activation-1.0.2.jar

6. 「Properties」タブで、次のプロパティまたは値を追加します。

- project.dir/${project_loc}

- registration.status/<"Unsubmitted", "Submitted - Pending Review", "Submitted - Under Review", or "Registered">

- repository.url/http://localhost:7101/oer/

- repository.username/admin

- repository.password/<encrypted password>

7. 「Common」タブで、External Toolsオプションを有効にします。

8. 「Apply」をクリックし、「Close」をクリックします。

「Properties」タブの構成後、図10-6に示すように、「External Tools」ダイアログが表示されます。

図10-6 「External Tools」ダイアログ - 「Properties」タブ

「図10-6 「External Tools」ダイアログ - 「Properties」タブ」の説明

10.2.1.2 ANTによるEclipse環境での収集

1. Eclipseで、「New」、「Project」、「General」、「Project」をクリックして、新しいeclipseプロジェクトを作成します。

2. ファイル・システムでWSDLファイルを参照し、作成したプロジェクトにこれをコピーして貼り付けます。

3. プロジェクトを選択して、「Submit this file to Oracle Enterprise Repository using ANT」をクリックします。これにより、図10-7に示すように、ハーベスタが起動され、プロジェクトのすべてのアーティファクトが送信されます。

図10-7 「Console」ウィンドウ

「図10-7 「Console」ウィンドウ」の説明

10.2.2 Oracle Enterprise Repositoryプラグインの構成

この項では、リポジトリ・アクセス用にOracle Enterprise Repositoryプラグインを構成する手順およびこの構成を有効にする前提条件について説明します。この項の内容は次のとおりです。

- 10.2.2.1項「リポジトリ・アクセス用のOracle Enterprise Repositoryプラグインの構成」

- 10.2.2.2項「Eclipse用にOracle Enterprise Repositoryプラグインを使用するための前提条件」

10.2.2.1 リポジトリ・アクセス用のOracle Enterprise Repositoryプラグインの構成

EclipseベースのEclipse用Enterprise Repositoryプラグインにリポジトリ・アクセスのためのOracle Enterprise Repositoryプラグインをインストールする手順の詳細は、『Oracle Fusion Middleware Oracle Enterprise Repositoryインストレーション・ガイド』を参照してください。

Eclipse用にOracle Enterprise Repositoryプラグインを使用するための前提条件

次の手順を実行して、リポジトリ・アクセス用のOracle Enterprise Repositoryプラグインをインストールします。

1. Eclipseを開きます。Eclipseウィンドウが表示されます。

2. 「Help」、「Install New Software」をクリックします。「Install」ダイアログが表示されます。

3. 「Work With」フィールドの下部にある「Add」ボタンをクリックします。「Add Site」ダイアログが表示されます。

4. 「Name」フィールドに「Oracle Enterprise Repository」を、「Location」フィールドにhttp(s)://<hostname>:<port>/<context>-web/eclipseを入力します。

5. 「OK」をクリックします。

6. 「Oracle Enterprise Repository」を選択して、「Next」をクリックします。

7. インストールする必要のある項目を確認します。

8. 「Next」をクリックして、契約に同意します。

9. 「終了」をクリックします。

10. 「Confirmation」ダイアログで、「Yes」をクリックしてEclipseを再起動します。
「Windows」、「Preferences」の順にクリックして、Oracle Enterprise Repositoryプラグインがインストールされたかどうかを確認します。

Oracle Enterprise Repositoryプラグインのアンインストール

Eclipseソフトウェアの更新メニューで、他のEclipseプラグインと同様に、Eclipse用Oracle Enterprise Repositoryプラグインをアンインストールできます。

Oracle Enterprise Repositoryのインストール後の製品のインストール

Oracle Enterprise Repositoryプラグインのインストール後にOracle Service Busアプリケーションがインストールされている場合、-cleanフラグを使用してEclipseを起動する必要があります。

10.2.2.2 Eclipse用にOracle Enterprise Repositoryプラグインを使用するための前提条件

Eclipse用のOracle Enterprise Repositoryプラグインを使用する前に、この項で説明されている前提条件を完了する必要があります。

- 10.2.2.2.1項「Oracle Enterprise Repositoryプロジェクトへのユーザーの割当て」

- 10.2.2.2.2,項「Assets-in-Progressプロパティの有効化」

- 10.2.2.2.3項「SiteMinder」

- 10.2.2.2.4項「Java JDK」

- 10.2.2.2.5項「XML解析」

10.2.2.2.1 Oracle Enterprise Repositoryプロジェクトへのユーザーの割当て

リポジトリからアセットをダウンロードするために、少なくとも1つのOracle Enterprise Repositoryプロジェクトにユーザーを割り当てる必要があります。Oracle Enterprise Repositoryプロジェクトの管理者は、Oracle Enterprise Repositoryの「プロジェクト」ページを使用して、ユーザーをプロジェクトに割り当てることができます。

Oracle Enterprise Repository管理者からEclipse統合パスを取得します。(たとえば、http://appserver.example.com/oer-web/eclipseなど)。

10.2.2.2.2 Assets-in-Progressプロパティの有効化

Eclipse用にOracle Enterprise Repositoryプラグインの使用時に、Assets-in-Progressをアクティブ化するために、2つのシステム設定を有効にする必要があります。

この手順は、Oracle Enterprise Repositoryの「管理」画面で実行します。

1. 「システム設定」をクリックします。

2. 「システム設定」セクションで「一般設定」をクリックします。

3. cmee.asset.in-progressプロパティを新規システム設定の有効化ボックスに入力し、「有効化」をクリックして、非表示のプロパティを表示します。

4. Asset-in-ProgressプロパティがTrueに設定されていることを確認します。

5. 「保存」をクリックします。

6. cmee.asset.in-progress.visibleプロパティを新規システム設定の有効化ボックスに入力し、「有効化」をクリックして、非表示のプロパティを表示します。

7. Asset-in-ProgressプロパティがTrueに設定されていることを確認します。

8. 「保存」をクリックします。

「登録状態」リストがOracle Enterprise Repositoryの「アセット」画面の「検索」セクションに表示されます。Assets-in-Progressの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

10.2.2.2.3 SiteMinder

Oracle Enterprise RepositoryがSiteminderで保護されるように構成されているか、今後構成される場合、ポリシー・サーバーでは次のURLを無視するか、保護しないように構成する必要があります。

http://appserver.example.com:8080/oer-web/eclipse/

10.2.2.2.4 Java JDK

Java Cryptography Extension(JCE)が必要です。これはJDK v1.4で提供されていて、JDK 1.2.xから1.5.x.でオプションのパッケージとして使用可能です。Eclipse 3.xで使用するためのOracle Enterprise RepositoryプラグインではJDK v 1.5.x以上が必要であることに注意してください。

10.2.2.2.5 XML解析

エディタおよびビューアのメタデータがCDATAをエスケープしたXMLとして表現されている場合、Oracle Enterprise Repositoryと通信する際に、一部のXMLパーサーがエンティティ拡張の制限を超えることがあります。たとえば、多数のアセット・タイプをOracle Enterprise Repositoryに定義した場合、XMLパーサーのエンティティ拡張の制限を増加する必要がある場合があります。

一般的なパーサーでは、デフォルトのエンティティ拡張の制限が64,000に設定されているものがあります。コマンドライン・パラメータ(entityExpansionLimit)を渡して、これをJAXP準拠のプロセッサ上で増加できます。entityExpansionLimitは、EclipseのコマンドラインでVM引数を渡して、増加できます(Eclipseデスクトップ・ショートカットを変更します)。たとえば、ショートカットのターゲットに次の内容を設定します。

c:\eclipse\eclipse.exe -debug -consolelog -vmargs -DentityExpansionLimit=1048576

10.2.3 Oracle Enterprise Repositoryプリファレンスの構成

この項では、Oracle Enterprise Repository接続を構成する手順について説明します。

リポジトリ接続が確立される前に、アセットの問合せまたは発行など、リポジトリ上でアクションを起動した場合、Enterprise Repositoryへの接続ウィザードが自動的に表示されるか(リポジトリの問合せの場合)、Explicitユーザーによって起動されます。

注意:

資格証明が前のセッションで指定された場合、ウィザードでは、起動時にこの情報が表示されます。

1. 図10-8で示すように、「資格証明」領域に、次のようにサーバーの場所とログイン資格証明を入力します。

- リポジトリURL: リポジトリ・サーバーのURL。URLには、http://localhost:7001/oerなどのように、ホスト、ポート、およびOracle Enterprise Repositoryサーバー名を含める必要があります。

- ユーザー名: リポジトリにアクセスできるユーザー名。

- パスワード: リポジトリにアクセスできるパスワード。

図10-8 Enterprise Repository接続の確立

「図10-8 Enterprise Repository接続の確立」の説明

2. 接続の確立ボタンをクリックして、Eterprise Repository接続を確認します。
接続が確立されない場合、該当するエラー・メッセージが表示されます。

3. 接続が確立された後、図10-9で次のいずれかを実行します。

- 「終了」をクリックして、終了します。

- 「次へ」をクリックして、ワークスペース・プリファレンスを選択します(手順4にスキップします)。

図10-9 ワークスペース・プリファレンスの指定

「図10-9 ワークスペース・プリファレンスの指定」の説明

4. 接続が確立された後、次のようにワークスペース・プリファレンスを指定できます。

- 送信されたモデルが関連付けられている、Oracle Enterprise Repositoryのリポジトリを選択します。アセットの使用状況はリポジトリで追跡され、通常は、ソフトウェア開発プログラム、ビジネス構想などを表す、リポジトリ・プロジェクトによって異なります。

- 使用状況の検出を有効にします。Oracle Enterprise Repositoryプロジェクトをワークスペースのデフォルトとして選択した場合、使用状況の検出はデフォルトのOracle Enterprise Repositoryプロジェクト用に有効になっています。ワークスペース・プリファレンスの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

5. 「終了」をクリックして、終了します。

10.2.4 使用状況の自動検出の有効化

Oracle Enterprise Repositoryでは、開発環境内でアセットの再利用を自動的に検出できます。これにより、アセットがOracle Enterprise Repositoryでダウンロードされたか、開発者のデスクトップなど、他のソースから取得したかどうかにかかわらず、開発チームはアセットの再利用クレジットを取得できます。使用状況の自動検出は、Software File Identification(SFID)と呼ばれるフィンガープリント・プロセスに依存しています。これは、アセット内で選択したファイルに一意のIDを使用してタグ付けされています。アセットがOracle Enterprise Repositoryの「使用-ダウンロード」プロセス以外の方法で取得された場合でも、このSFIDは、アセットが使用された時間と場所を検出するために使用されます。アセット内でタグ付けされたファイルが開発者のIDEに配置され、新しいビルドまたはビルド・クリーンが発生したときに、使用状況のインスタンスがOracle Enterprise Repositoryによって記録されます。

詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

注意:

使用状況の自動検出では、Eclipse用のOracle Enterprise Repositoryプラグインのインストールが必要です。現在は、EclipseおよびEclipseベースのIDEとのみ互換性があります。

1. ウィンドウ・メニューで「プリファレンス」をクリックします。

2. 「Oracle Enterprise Repository」を選択します。

3. ワークスペースの使用状況の自動検出を選択します。図10-10に示すように、ワークスペースの使用状況の自動検出画面が表示されます。

図10-10 プリファレンス-ワークスペースの使用状況の自動検出

「図10-10 プリファレンス-ワークスペースの使用状況の自動検出」の説明

4. 「ワークスペース・プロジェクトで使用状況を検出する」オプションをクリックしてから、必要に応じて目的の使用検出機能をアクティブ化します。

- デフォルトで新しいワークスペース・プロジェクトの使用状況検出を有効にする: 新しいプロジェクトを監視します。

- クラスパスのファイルの使用状況を検出する: クラスパスのファイルを監視します。

- JavaランタイムJARの使用状況を検出する: JavaランタイムJARを監視します。

- 計算済SFIDをキャッシュする(推奨): 計算済SFIDをキャッシュします(パフォーマンスが向上します)。

- パターンと一致するファイルの使用状況を検出する: 指定したパターンと一致するファイルを監視します。

5. ファイル・パターンのテキスト・ボックスで適切な情報を入力します。

- ファイル・パターンを含める: 指定したファイル・パターンを含めます。

- ファイル・パターンを除外する: 指定したファイル・パターンを除外します。

6. 個々のチェック・ボックスを使用するか、「すべて選択」ボタンまたは「すべて選択解除」ボタンを使用して、使用状況の自動検出のターゲットとなるプロジェクト・ディレクトリを指定します。

7. 終了したら、「OK」をクリックします。

10.3 VS .NETの構成

Oracle Enterprise RepositoryとVisual Studio .NETを統合すると、ユーザーはVS .NET IDE環境を終了しないで、アセットを容易に検索したり、リポジトリからアセットを使用したりすることができます。アセットおよび関連するアーティファクトは、VS .NETソリューションに直接ダウンロードされます。VS .NETソリューション内でリポジトリにアクセスすると、Oracle Enterprise Repositoryへのビューも提供されます。これにより、リポジトリからのアーティファクトとアセットのダウンロード、リポジトリへの問合せおよびリポジトリの内容の表示を行うことができます。

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

- 10.3.1項「VS .NETでの収集の有効化」

- 10.3.2項「Oracle Enterprise Repositoryプラグインの構成」

- 10.3.3項「Oracle Enterprise Repositoryへの接続の構成」

- 10.3.4項「.NETソリューションへのOracle Enterprise Repositoryプロジェクトの割当て」

- 10.3.5項「使用状況の自動検出の有効化」

10.3.1 VS .NETでの収集の有効化

1. Microsoft Visual Studioで、「Tools」、「External Tools」をクリックします。「External Tools」ダイアログが表示されます。

2. 「追加」をクリックします。エントリが「Menu Contents」ペインに追加されます。

3. 図10-11に示すように、「External Tools」ダイアログに次の詳細情報を入力します。

- 「Title」フィールドに、OER - Harvestと入力します。

- 「Command」フィールドで、フィールドの終端にある参照ボタンをクリックして、ハーベスタ・ディレクトリにあるharvest.batファイルを選択します。

- 「Arguments」フィールドで、-dirパラメータを入力します。フィールドの終端にある右矢印をクリックして、メニューから「ItemPath」を選択します。

- 「Initial Directory」フィールドで、ハーベスタ・ディレクトリの場所を入力します。

- 「Use Output Window」オプションを選択します。このオプションを使用すると、進行状況を監視できます。

図10-11 「External Tools」ダイアログ

「図10-11 「External Tools」ダイアログ」の説明

4. 「OK」をクリックします。

5. Microsoft Visual StudioのWSDLファイルを選択し、「Tools」、「OER - Harvest」をクリックします。イントロスペクションが完了したことを示すシャットダウンおよびクリーンアップ・メッセージとともに、「Output」ウィンドウが表示されます。

6. ユーザー名とパスワードの資格証明を使用して、Oracle Enterprise Repositoryのホームページを開きます。

7. 「アセット」ペインの「検索文字列の入力」フィールドで、検索条件としてWSDLの名前を入力してから、「検索」をクリックします。検索結果が右側のペインに表示されます。

8. 検索結果セクションでサービスを選択すると、サービスの詳細が下部ペインに表示されます。

9. 「ナビゲータ」ボタンをクリックして、リレーションシップを表示します。

10. Oracle Enterprise Repositoryのメイン・ページで、「管理」、「システム設定」の順にクリックします。「システム設定」ページが表示されます。

11. 「検索」フィールドでShowと入力して、Show System-Supplied RelationshipsオプションにTrueを設定します。

12. ページの一番下にある「保存」をクリックします。

13. Oracle Enterprise Repositoryのメイン・ページで、「アセット」をクリックして、手順7と同様の検索手順を繰り返し実行します。前回インポートされなかった自動のリレーションシップがインポートされます。

10.3.2 Oracle Enterprise Repositoryプラグインの構成

Oracle Enterprise Repositoryでは、開発環境内でアセットの再利用を自動的に検出できます。これにより、アセットがOracle Enterprise Repositoryでダウンロードされたかどうかにかかわらず、開発チームはアセットの再利用クレジットを取得できます。詳細は、10.3.5項「使用状況の自動検出の有効化」を参照してください。

10.3.2.1 前提条件

Oracle Enterprise Repositoryプラグインを構成するには、次の前提条件が必要です。

- Microsoft Visual Studio 2008。

- Microsoft Visual J# 2005ランタイム。(J#がコンピュータにインストールされていない場合、インストーラに、Microsoftから適切なバージョンをダウンロードするように要求されます。)

- VS .NETを常に表示ソリューション・オプションを選択する必要があります(「ツール」→「オプション」→プロジェクトとソリューション→「一般」)。

- 少なくとも1つのOracle Enterprise Repositoryプロジェクトにユーザーを割り当てる必要があります。プロジェクトの管理者は、Oracle Enterprise Repositoryの「プロジェクト」ページを使用して、ユーザーをプロジェクトに割り当てることができます。

- Oracle Enterprise RepositoryがSiteminderで保護されるように構成されているか、今後構成される場合、次のURLを無視するか、または保護しないようにポリシー・サーバーを構成して、OpenAPI統合が正しく機能できるようにする必要があります。

- http://appserver.example.com:8080/OER/services/

10.3.2.2 インストール

VS .NETをインストールするには、次の手順を実行します。

1. 次のURLで、Oracle Enterprise RepositoryインスタンスからVS .NETプラグインのZipファイルをダウンロードします。
http://appserver.example.com/oer-web/integration/dotnet/OER103-VisualStudioAddin.zip

2. OER103-VisualStudioAddin.zipファイルを解凍します。

3. setup.exeプログラムを見つけ、実行します。

4. 図10-12に示すように、指示に従ってインストール・パラメータを選択します。

図10-12 Visual Studio用のOracle Enterprise Repositoryアダプタのアドイン

「図10-12 Visual Studio用のOracle Enterprise Repositoryアダプタのアドイン」の説明

5. 「終了」をクリックして、インストールを終了します。

6. 10.3.3項「Oracle Enterprise Repositoryへの接続の構成」の手順に従って、VS.NETからOracle Enterprise Repositoryインスタンスへの接続を構成し、確立します。

10.3.3 Oracle Enterprise Repositoryへの接続の構成

次の手順に従って、VS.NETからOracle Enterprise Repositoryインスタンスへの接続を構成し、確立します。

1. Visual Studio .NETを起動します。

2. 「Tools」メニューを開き、「Options」をクリックします。

3. 図10-13に示すように、オプションの一覧で、「OER Add-in for Visual Studio .NET」オプションをクリックして、必要なログイン情報を指定します。

図10-13 「Options」ダイアログ

「図10-13 「Options」ダイアログ」の説明

- OER URL: Oracle Enterprise RepositoryインスタンスのURL。たとえば、http://appserver.example.com/OERなど。

- 注意:
URLの一部として、デフォルトのホームページで使用されるindex.jspを含めないでください。

- User Name: 接続で使用するユーザー名。

- User Password: 接続で使用するパスワード。パスワードは大文字と小文字が区別されます。

- Establish Connection: クリックして有効な接続を確認します。

- Automatically register downloaded Asset files: 選択した場合、ダウンロードしたアセット・ファイルがWindowsの適切なレジストリに登録されます。アセットのダウンロードによっては、オーバーライドされることがあります。

4. 「Establish Connection」ボタンをクリックして、指定したOracle Enterprise Repositoryインスタンスに接続します。

5. オプションで、「Advanced」ボタンをクリックして、次の追加のOracle Enterprise Repositoryオプションを有効にします。

- VS .NETソリューション・プロジェクトの使用状況の検出

- 参照されたDLL、WSDLの使用状況の自動検出およびSFIDのローカル・キャッシュ(SFIDがインストールで有効になっている場合)

- 含めたり除外したりするファイル名のパターン

6. 終了したら、「OK」をクリックします。

10.3.4 .NETソリューションへのOracle Enterprise Repositoryプロジェクトの割当て

ダウンロードしたアセットの使用状況を追跡するには、Oracle Enterprise Repositoryプロジェクトを.NETソリューションに割り当てる必要があります。

注意:

この機能を使用する前に、プロジェクト管理者が少なくとも1つのOracle Enterprise Repositoryプロジェクトにユーザーを割り当てる必要があります。

1. .NETソリューション・エクスプローラを開きます。

2. ファイル・ツリーでソリューションを右クリックして、コンテキスト・メニューから「Oracle Enterprise Repository Add-in for Visual Studio .NET」オプションを選択します。

3. 図10-14に示すように、サブメニューから「Assign OER Project」をクリックします。

図10-14 ソリューション・エクスプローラ・ウィンドウ

「図10-14 ソリューション・エクスプローラ・ウィンドウ」の説明

4. 図10-15に示すように、プロジェクト選択ウィンドウで、Oracle Enterprise Repositoryプロジェクトの選択リストを使用して、割り当てられているOracle Enterprise Repositoryプロジェクトを表示します。

図10-15 Oracle Enterprise Repositoryのプロジェクト選択ダイアログ

「図10-15 Oracle Enterprise Repositoryのプロジェクト選択ダイアログ」の説明

注意:

リストが空の場合、ユーザーがプロジェクトに割り当てられていません。手順を取り消す必要があります。

5. リストからOracle Enterprise Repositoryプロジェクトを選択します。

6. 「終了」をクリックして、変更内容を保存します。

10.3.5 使用状況の自動検出の有効化

次の手順を実行して、DLL、WSDLの使用状況の自動検出の有効化、SFIDのローカル・キャッシングおよびファイル・パターンの検出などの拡張構成オプションを有効にします。

10.3.5.1 SFIDの概要

SFIDをインストール時に有効にした場合、Oracle Enterprise Repositoryでは、開発環境内でアセットの再利用を自動的に検出できます。これにより、アセットがOracle Enterprise Repositoryでダウンロードされたかどうかにかかわらず、開発チームはアセットの再利用クレジットを取得できます。使用状況の自動検出は、Software File Identification(SFID)と呼ばれるフィンガープリント・プロセスに依存しています。これは、アセット内で選択したファイルに一意のIDを使用してタグ付けされています。アセットがOracle Enterprise Repositoryの「使用-ダウンロード」プロセス以外の方法で取得された場合でも、このSFIDは、アセットが使用された時間と場所を検出するために使用されます。アセット内でタグ付けされたファイルが開発者のIDEに配置され、新しいビルドまたはビルド・クリーンが発生したときに、使用状況のインスタンスがOracle Enterprise Repositoryによって記録されます。

10.3.5.2 使用状況の自動検出の構成

1. Visual Studio .NETを起動します。

2. 「Tools」メニューを開き、「Options」をクリックします。

3. オプションのリストで、「Oracle Enterprise Repository Add-in for Visual Studio .NET」をクリックしてログイン・ウィンドウを再度開きます。

4. 「Advanced Options」ボタンをクリックして、「Advanced Setting」ウィンドウを開きます。図10-16に示すように、「Detect Usage」タブを使用して、VS .NETソリューション・プロジェクトの使用状況の検出を有効にします。

図10-16 「Advanced Setting」ダイアログ - 「Detect Usage」タブ

「図10-16 「Advanced Setting」ダイアログ - 「Detect Usage」タブ」の説明

5. 図10-17に示すように、「Automated Usage Detection」タブをクリックして、参照されたDLLとWSDLの使用状況の自動検出およびSFIDのローカル・キャッシングを有効にします。

図10-17 「Advanced Setting」ダイアログ - 「Automated Usage Detection」タブ

「図10-17 「Advanced Setting」ダイアログ - 「Automated Usage Detection」タブ」の説明

6. 図10-18に示すように、「File Pattern Detection」タブをクリックして、含めるファイル名パターンと除外するファイル名パターンを指定します。

図10-18 「Advanced Setting」ダイアログ - 「File Pattern Detection」タブ

「図10-18 「Advanced Setting」ダイアログ - 「File Pattern Detection」タブ」の説明

7. 「Done」をクリックして設定を保存します。

11 IDEによるOracle Enterprise Repositoryとの相互作用

この章では、作成と使用プロセス、開発環境のユースケースおよびOracle Enterprise RepositoryとOracle JDeveloper、EclipseおよびVisual Studio (VS .NET)との相互作用について説明します。

この章では、次の項目について説明します。

- 11.1項「Oracle JDeveloperの使用」

- 11.2項「Eclipseの使用」

- 11.3項「VS .NETの使用」

11.1 Oracle JDeveloperの使用

Oracle Enterprise Repositoryによって、SOAエコシステム内のすべての資産とその依存性を分類するための柔軟性のあるメタモデルが提供されます。主に、サービスおよびコンポジット・アプリケーション開発用の単一の真のソースとしてライフサイクルの計画、設計および構築フェーズで使用されます。

Oracle SOA Suiteは、コンポジット・アプリケーションを設計、デプロイおよび管理するためのサービス・インフラストラクチャ・コンポーネントのセットです。Oracle SOA Suiteにより、サービスの作成と管理を行って、複合アプリケーションとビジネス・プロセスに編成できます。コンポジットにより、複数のテクノロジ・コンポーネントを1つのSOAコンポジット・アプリケーションに容易にアセンブルできます。Oracle SOA Suiteは異種ITインフラストラクチャに組み込まれ、企業によるSOAの段階的な採用を可能にします。

次のバージョンのOracle Enterprise RepositoryとともにOracle SOA Suiteを使用できます。

- Oracle Enterprise Repository 10.3 (Oracle WebLogic Server 10.3とともに使用)

- Oracle Enterprise Repository 11g

この項には、次の項目が含まれます。

- 11.1項「アーティファクトの収集」

- 11.1.2項「Oracle Enterprise Repositoryの検索」

- 11.1.3項「アセット詳細の表示」

- 11.1.4項「アーティファクトのダウンロード」

- 11.1.5項「プリスクリプティブな再利用」

11.1.1 アーティファクトの収集

Oracle Enterprise Repositoryでは、BPEL、WSDL、XSDおよびXSLTファイルとファイル・ディレクトリを収集できます。アーティファクトを収集すると、Oracle Enterprise Repositoryによって、アセットの作成、アセット・メタデータの移入、およびアーティファクト・ファイルの情報に基づいたリレーション・リンクの生成が自動的に実行されます。収集機能はコマンドラインから使用可能で、Oracle JDeveloperまたはビルド・プロセスに統合できます。

注意:

ハーベスタはOracle製品に制限されていません。任意のツールで生成された、標準ベースのアーティファクトを収集するために使用します。

コマンドラインまたはOracle JDeveloperから、あるいはANTタスクを使用して、Oracle SOA SuiteプロジェクトをOracle Enterprise Repositoryに発行または収集できます。ハーベスタは、BPEL、WSDL、XSDおよびXSLTファイルとファイル・ディレクトリなどのOracle SOA Suiteアーティファクトを収集し、自動的にアセットの作成、アセット・メタデータの移入、およびアーティファクト・ファイルの情報に基づいたリレーション・リンクの生成を実行します。

Oracle JDeveloper 11g R1からSOAプロジェクトを発行するには、次の手順を実行します。

1. Oracle JDeveloperで、SOAプロジェクトを右クリックし、SOAコンポジット・プロジェクトの収集を選択します。SOAプロジェクトの収集ダイアログが表示されます。

2. 「OK」をクリックします。これにより、ANTスクリプトが実行され、SOAコンポジットがOracle Enterprise Repositoryに収集されます。

JDeveloper 11g R2バージョンからのアーティファクトの収集の詳細は、10.1.1項「Oracle JDeveloper 11g R1パッチセット・リリースとの統合」を参照してください。

JDeveloper 10gバージョンからのアーティファクトの収集の詳細は、10.1.3項「Oracle JDeveloper 10gとの統合」を参照してください。

11.1.2 Oracle Enterprise Repositoryの検索

Oracle JDeveloperを使用すると、Oracle Enterprise Repositoryで使用可能なアセットおよびアーティファクトにアクセスできます。Oracle JDeveloperを介して、様々な基準に一致するアセットの検索、または開発プロジェクトに関係するアセットの表示を行うことができます。

Oracle Enterprise Repositoryでアセットを検索するには、次の手順を実行します。

1. Oracle JDeveloperで、「リソース・パレット」をクリックします。「リソース・パレット」タブがIDE接続とともに表示されます。

2. 「検索」テキスト・フィールドで、詳細を表示するアセットの名前などの検索条件を入力して、「検索の開始」をクリックします。「検索結果」ペインがアセットともに表示されます。

11.1.3 アセット詳細の表示

選択したアセットに対して、アセット詳細(説明、使用履歴、削減予測、リレーションシップなど)を表示できます。アセット・メタデータ内で、ドキュメント、ユーザー・ガイド、テスト・ケースのサポートへのリンクが提供されていて、これを使用すると既存の機能を再利用できます。

11.1.4 アーティファクトのダウンロード

プロジェクトにアセットのアーティファクト(ペイロード)をダウンロードできます。通常、アセット・ペイロードは、サービス(WSDLファイルなど)を使用する際や、サービスをコード・ベース(バイナリやBPELファイルなど)に組み込む際に必要な機能です。

Oracle Enterprise Repositoryのサービス、スキーマ、XSLTおよびイベントを使用できます。アセットの使用状況を追跡するには、まず、JDeveloperアプリケーションをOracle Enterprise Repositoryプロジェクトに関連付ける必要があります。この項の内容は次のとおりです。

- 11.1.4.1項「JDeveloperアプリケーションとOracle Enterprise Repositoryとの関連付け」

- 11.1.4.2項「Oracle Enterprise RepositoryからのWSDLまたはサービスの使用」

11.1.4.1 JDeveloperアプリケーションとOracle Enterprise Repositoryとの関連付け

JDeveloperアプリケーションをOracle Enterprise Repositoryプロジェクトと関連付けるには、次の手順を実行します。

1. Oracle JDeveloperで、「アプリケーション」→「アプリケーションのプロパティ」をクリックします。「アプリケーションのプロパティ」ダイアログが表示されます。

2. 「リポジトリ」を選択します。「リポジトリ」ページが表示されます。

注意:

JDeveloper 11g内でOracle Enterprise Repositoryからアセットを使用するには、アプリケーション・レベルのプロパティを構成し、リポジトリを追加する必要があります。

3. 図11-1に示すように、次のオプションを選択します。

- リポジトリ接続: 使用状況の追跡に使用するOracle Enterprise Repository接続を選択します。

- リポジトリ・プロジェクト: 使用状況の追跡に使用するOracle Enterprise Repositoryプロジェクトを選択します。

図11-1 アプリケーション・プロパティ - 「リポジトリ」ページ

「図11-1 アプリケーション・プロパティ - 「リポジトリ」ページ」の説明

4. 「OK」をクリックします。

選択した接続からアセットを使用できます。使用状況は、選択したOracle Enterprise Repositoryプロジェクトに追加されます。

11.1.4.2 Oracle Enterprise RepositoryからのWSDLまたはサービスの使用

Oracle Enterprise RepositoryからWSDLファイルまたはサービスを使用するには、次の手順を実行します。

1. Oracle JDeveloperで、composite.xmlファイルをダブルクリックします。「composite.xml」ページが表示されます。

2. 「コンポーネント・パレット」から、Webサービス・コンポーネントを「外部参照」スイムレーンにドラッグ・アンド・ドロップします。「Webサービスの作成」ダイアログが表示されます。

3. 「WSDL URL」フィールドの下部にある既存のWSDLの検索アイコンをクリックします。「SOAリソース・ブラウザ」ダイアログが表示されます。

4. 図11-2に示すように、リストから「リソース・パレット」を選択してから、「IDE接続」、「Oracle Enterprise Repository」、<接続名>、「アセット・タイプ」、「サービス」を選択します。

図11-2 「SOAリソース・ブラウザ」ダイアログ

「図11-2 「SOAリソース・ブラウザ」ダイアログ」の説明

5. 起動または使用するサービスを選択します。
サービスに関連付けられているWSDLまたはUDDIキーが1つしかない場合、同じWSDLまたはUDDIキーを使用して参照を作成します。図11-3に示すように、関連付けられているWSDLまたはUDDIキー(あるいはその両方)が2つ以上ある場合、「WSDLの選択」ダイアログが表示されます。

図11-3 「WSDLの選択」ダイアログ

「図11-3 「WSDLの選択」ダイアログ」の説明

使用するURLまたはUDDIキーを選択する必要があります。JDeveloperでUDDIキーを解決するには、参照を作成する前にUDDI接続を作成する必要があります。これを行わないと、UDDIキーを選択できません。

11.1.5 プリスクリプティブな再利用

Oracle Enterprise Repositoryを介して、アナリスト、設計者、技術責任者、およびプロジェクトの設計段階で作業するその他の担当者は、プロジェクトの要件を満たすアセットの一覧を作成できます。アセットの一覧はリポジトリのコンプライアンス・テンプレートで取得され、コンプライアンス・テンプレートはOracle Enterprise Repositoryプロジェクトに関連付けられています。

Oracle JDeveloper内から、プロジェクトに割り当てられたすべてのコンプライアンス・テンプレートに表示されるアセットの一覧を表示できます。どのアセットが他のプロジェクト・メンバーで使用されているかが示されます。コンプライアンス・テンプレートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

11.2 Eclipseの使用

Eclipse用のOracle Enterprise Repositoryプラグインの開発環境のユースケースは、次のとおりです。

- 11.2.1項「ファイルの発行」

- 11.2.2項「アーティファクトの収集」

- 11.2.3項「Oracle Enterprise Repositoryの検索」

- 11.2.4項「アセット詳細の表示」

- 11.2.5項「アーティファクトのダウンロード」

- 11.2.6項「プリスクリプティブな再利用」

- 11.2.7項「使用状況の自動検出」

11.2.1 ファイルの発行

Eclipse用のOracle Enterprise Repositoryプラグインを使用すると、Oracle Enterprise Repositoryに発行するファイルを選択できます。これは、アーカイブの発行用にファイルをzip形式にパッケージ化します。アーカイブ発行ウィザードを使用すると、アーカイブZIPファイルを使用して、単一のアセットまたは複合ペイロード・アセット(あるいはその両方)をOracle Enterprise Repositoryに発行できます。

アーカイブZIPファイルを介してアセットをOracle Enterprise Repositoryに発行するには、次の手順を実行します。

1. Eclipseプロジェクトを右クリックして、ショートカット・メニューからOracle Enterprise Repositoryへの発行を選択します。

2. 「アーカイブ名」フィールドで、既存のプロジェクト・アーカイブ・フィールドへのパスを入力するか、または省略記号ボタンを使用してアーカイブを参照します。新しいアーカイブ・ファイルを作成することもできます。既存のファイルを選択した場合、完全修飾パスが「アーカイブ名」テキスト・フィールドに表示されます。有効なプロジェクト・アーカイブには、.zipファイル拡張子が付いている必要があります。

3. 既存のアーカイブを選択した場合、「OK」をクリックして、選択したプロジェクト・アーカイブに上書きしても問題がないことを確認します。

4. 作成されるプロジェクト・フォルダ構造を使用して、Oracle Enterprise Repositoryに発行するプロジェクトから少なくとも1つのファイルを選択します。

5. 必要に応じて、「タイプの選択」ボタンをクリックし、アーカイブに含める特定のファイル・タイプを選択できるダイアログを開きます。

6. アーカイブに含めるファイルを選択した後、「次へ」をクリックします。プロジェクトから選択したすべてのアーティファクトがアーカイブ・ファイルにZIPされます。

7. アーカイブとその内容を指定した後で、バージョン番号、発行するアセットのタイプ、説明および関連するコメントなどのアセット発行データを入力します。

8. 「終了」をクリックします。

9. 確認ウィンドウで「OK」をクリックして、発行プロセスを完了します。

注意:

ファイル発行機能ではなく、Oracle Enterprise Repositoryハーベスタを使用してプロジェクトまたはファイルを発行し、Oracle Enterprise Repositoryモデルに応じて作成されたアセットを作成することをお薦めします。

11.2.2 アーティファクトの収集

Oracle Enterprise Repositoryでは、BPEL、WSDL、XSDおよびXSLTファイルとファイル・ディレクトリを収集できます。アーティファクトを収集すると、Oracle Enterprise Repositoryによって、アセットの作成、アセット・メタデータの移入、およびアーティファクト・ファイルの情報に基づいたリレーション・リンクの生成が自動的に実行されます。収集機能はコマンドラインから使用可能で、Eclipseまたはビルド・プロセスに統合できます。

プロジェクトを発行または収集するには、次の手順を実行します。

1. Eclipseでプロジェクトを右クリックして、「Submit this project to Oracle Enterprise Repository」を選択します。「Submit this Project to Oracle Enterprise Repository」ダイアログが表示されます。

2. 「OK」をクリックします。これにより、スクリプトが実行され、プロジェクトがOracle Enterprise Repositoryに収集されます。

11.2.3 Oracle Enterprise Repositoryの検索

Eclipse用Oracle Enterprise Repositoryプラグインを使用すると、Oracle Enterprise Repositoryで使用可能なアセットおよびアーティファクトにアクセスできます。Eclipseを介して、様々な基準に一致するアセットの検索、または開発プロジェクトに関係するアセットの表示を行うことができます。

アセット詳細を検索するには、次の手順を実行します。

1. Eclipseで、「Window」、「Show View」をクリックします。

2. 「Other」を選択します。

3. 「Enterprise Repository Access」オプションを選択します。「Enterprise Repository Access」ビューが「Search」および「Project Team Assets」ペインが含まれるタブ付きペインとして表示されます。
「Search」タブを使用すると、アセットの問合せを行うことができ、指定した条件に基づいた結果が表示されます。「Search」タブには上部にツールバーが表示されます。これには、アクティブなビューが「Query」ペインか、または「Results」ペインであるかが示されます。2つの表示を切り替えることができます。アクティブになっているペインに応じて、「Query」リンクまたは「Results」リンクのいずれかをクリックします。

11.2.4 アセット詳細の表示

選択したアセットに対して、アセット詳細(説明、使用履歴、削減予測、リレーションシップなど)を表示できます。アセット・メタデータ内で、ドキュメント、ユーザー・ガイド、テスト・ケースのサポートへのリンクが提供されていて、これを使用すると既存の機能を再利用できます。

アセット詳細を表示するには、次の手順を実行します。

1. Eclipseで、「Window」、「Show View」をクリックします。

2. 「Other」を選択します。

3. 「Enterprise Repository Access」オプションを選択します。「Enterprise Repository Access」ビューが「Search」および「Project Team Assets」ペインが含まれるタブ付きペインとして表示されます。
「Search」タブを使用すると、アセットの問合せを行うことができ、指定した条件に基づいた結果が表示されます。「Search」タブには上部にツールバーが表示されます。これには、アクティブなビューが「Query」ペインか、または「Results」ペインであるかが示されます。2つの表示を切り替えることができます。アクティブになっているペインに応じて、「Query」リンクまたは「Results」リンクのいずれかをクリックします。

4. 検索結果を右クリックして、「Show in Asset Details」ビューを選択します。図11-4に示すように、選択したアセットの「Asset Details」ビューが表示されます。

図11-4 「Asset Details」ダイアログ

「図11-4 「Asset Details」ダイアログ」の説明

5. 検索結果のアセットを選択して、「Display the asset properties and relationship views」ボタンをクリックしてアセットのリレーションシップを表示します。図11-5および図11-6にそれぞれ示すように、「Properties」タブが表示され、アセットのプロパティが示されます。「Enterprise Repository Asset Relations」タブが表示され、選択したアセットのリレーションシップとリレーションシップ・ロールが示されます。

図11-5 「プロパティ」タブ

「図11-5 「プロパティ」タブ」の説明

図11-6 「Enterprise Repository Access Relations」タブ

「図11-6 「Enterprise Repository Access Relations」タブ」の説明

11.2.5 アーティファクトのダウンロード

プロジェクトにアセットのアーティファクト(ペイロード)をダウンロードできます。通常、アセット・ペイロードは、サービス(WSDLファイルなど)を使用する際や、サービスをコード・ベース(通常はバイナリ)に組み込む際に必要な機能です。アーティファクトをダウンロードするには、次の手順を実行します。

1. 11.2.3項「Oracle Enterprise Repositoryの検索」で説明されているように、必要なアセットのリポジトリの問合せを行います。

2. 「Results」ペインで適切なアセットを右クリックし、使用可能なアーティファクトがあれば、ショートカット・メニューから「Download Artifacts」を選択して、「Download Artifacts」ウィンドウを開きます。

3. 「Download Location」セクションで、次を実行します。

- 「Download Folder」フィールドを使用して、Eclipseプロジェクトに移動し、ダウンロード先のフォルダを選択します。

- 「Overwrite Existing Files」オプションを選択して、選択したプロジェクト・フォルダにある既存のバージョンのアーティファクトに上書きします。

4. 「Repository Governance」セクションで、次を実行します。

- 「Repository Project」リストから、有効なプロジェクトを選択します。

- 「Subscribe to Associated Assets」オプションを選択して、関連付けられているファイルを持つ、選択済のすべてのアセット、関連付けられたアーティファクト・アセットおよび依存性情報にサブスクライブします。

5. ダウンロードするアーティファクトのリストの選択内容を確認して、「OK」をクリックします。指定した場所に、選択したアセットに関連付けられたアーティファクトがダウンロードされます。

6. ステータス確認ウィンドウで、「OK」をクリックします。

7. 選択したダウンロード先フォルダを開いて、選択したアーティファクト・ファイルが存在していることを確認します。

11.2.6 プリスクリプティブな再利用

Oracle Enterprise Repositoryを介して、アナリスト、設計者、技術責任者、およびプロジェクトの設計段階で作業するその他の担当者は、プロジェクトの要件を満たすアセットの一覧を作成できます。アセットの一覧はリポジトリのコンプライアンス・テンプレートで取得され、コンプライアンス・テンプレートはOracle Enterprise Repositoryプロジェクトに関連付けられています。

Eclipse用Oracle Enterprise Repositoryプラグイン内から、プロジェクトに割り当てられたすべてのコンプライアンス・テンプレートに表示されるアセットの一覧を表示できます。どのアセットが他のプロジェクト・メンバーで使用されているかが示されます。コンプライアンス・テンプレートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

アセットのプリスクリプティブな再利用には、次の手順を実行します。

1. Eclipseで、「Window」、「Show View」をクリックします。

2. 「Other」を選択します。

3. 「Enterprise Repository Access」オプションを選択します。「Enterprise Repository Access」ビューが「Search」および「Project Team Assets」ペインが含まれるタブ付きペインとして表示されます。
「Project Team Assets」タブを使用すると、指定したOracle Enterprise Repositoryプロジェクトに関連付けられているすべてのアセットを表示できます。

4. 「Repository Project」メニューを使用して、現在のリポジトリ接続に関連付けられたすべてのEnterprise Repositoryプロジェクト・セットからプロジェクトを選択します。リスト内の項目には、関連付けられたプロジェクトが存在するリポジトリ名の接頭辞が付いています。

5. 「Query」ボタンをクリックして、指定したリポジトリ・プロジェクトに関連付けられたすべてのアセットに対してEnterprise Repositoryの問合せを行います。
リポジトリの接続が確立されると、指定したプロジェクトに関連付けられたアセットが「Project Team Assets」表に移入されます。表の各列はアセットとリポジトリ内のプロジェクトとの関係を示します。列ヘッダーを使用して各列をソートすることもできます。

6. 必要に応じて、「Refresh」ボタンをクリックして、この問合せの結果を表に再度移入します。

11.2.7 使用状況の自動検出

Oracle Enterprise Repositoryでは、開発環境内でアセットの再利用を自動的に検出できます。これにより、アセットがOracle Enterprise Repositoryでダウンロードされたか、開発者のデスクトップなど、他のソースから取得したかどうかにかかわらず、開発チームはアセットの再利用クレジットを取得できます。使用状況の自動検出は、Software File Identification(SFID)と呼ばれるフィンガープリント・プロセスに依存しています。これは、アセット内で選択したファイルに一意のIDを使用してタグ付けされています。アセットがOracle Enterprise Repositoryの「使用-ダウンロード」プロセス以外の方法で取得された場合でも、このSFIDは、アセットが使用された時間と場所を検出するために使用されます。アセット内でタグ付けされたファイルがEclipse用Oracle Enterprise Repositoryプラグインに配置され、新しいビルドまたはビルド・クリーンが発生したときに、使用状況のインスタンスがOracle Enterprise Repositoryによって記録されます。詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

使用状況の自動検出を構成するには、次の手順を実行します。

1. Eclipseで、「Window」メニューから「Preferences」をクリックします。「Preferences」ダイアログが表示されます。

2. 「Oracle Enterprise Repository」、「Workspace Automatic Usage Detection」の順に選択します。「Workspace Automatic Usage Detection」ページが表示されます。

3. 「Detect Usage in Workspace Projects」オプションをクリックしてから、必要に応じて目的の使用状況検出機能をアクティブ化します。

- Enable usage detection in new workspace projects by default: 新しいプロジェクトを監視します。

- Detect usage of files on classpath: クラスパスのファイルを監視します。

- Detect usage of Java Run-time JARs: JavaランタイムJARを監視します。

- Cache calculated SFIDs(推奨): 計算済SFIDをキャッシュします(パフォーマンスが向上します)。

- Detect usage of files matching pattern: 指定したパターンと一致するファイルを監視します。

4. ファイル・パターンのテキスト・ボックスで適切な情報を入力します。

- Include File Pattern: 指定したファイル・パターンを含めます。

- Exclude File Pattern: 指定したファイル・パターンを除外します。

5. 個々のチェック・ボックスを使用するか、「Select All」ボタンまたは「Unselect All」ボタンを使用して、使用状況の自動検出のターゲットとなるプロジェクト・ディレクトリを指定します。

6. 終了したら、「OK」をクリックします。

11.3 VS .NETの使用

VS .NET用のOracle Enterprise Repositoryプラグインの開発環境のユースケースは、次のとおりです。

- 11.3.1項「ファイルの発行」

- 11.3.2項「アーティファクトの収集」

- 11.3.3項「Oracle Enterprise Repositoryの検索」

- 11.3.4項「アセット詳細の表示」

- 11.3.5項「アーティファクトのダウンロード」

- 11.3.6項「使用状況の自動検出」

11.3.1 ファイルの発行

VS .NET用のOracle Enterprise Repositoryプラグインを使用すると、Oracle Enterprise Repositoryに発行するファイルを選択できます。これは、アーカイブの発行用にファイルをzip形式にパッケージ化します。アーカイブ発行ウィザードを使用すると、アーカイブZIPファイルを使用して、単一のアセットまたは複合ペイロード・アセット(あるいはその両方)をOracle Enterprise Repositoryに発行できます。

注意:

ファイル発行機能ではなく、Oracle Enterprise Repositoryハーベスタを使用してプロジェクトまたはファイルを発行し、Oracle Enterprise Repositoryモデルに応じて作成されたアセットを作成することをお薦めします。

11.3.2 アーティファクトの収集

Oracle Enterprise Repositoryでは、BPEL、WSDL、XSDおよびXSLTファイルとファイル・ディレクトリを収集できます。アーティファクトを収集すると、Oracle Enterprise Repositoryによって、アセットの作成、アセット・メタデータの移入、およびアーティファクト・ファイルの情報に基づいたリレーション・リンクの生成が自動的に実行されます。収集機能はコマンドラインから使用可能で、VS .NETまたはビルド・プロセスに統合できます。

プロジェクトを発行または収集するには、次の手順を実行します。

1. VS .NETでプロジェクトを右クリックして、「Submit this project to Oracle Enterprise Repository」を選択します。「Submit this Project to Oracle Enterprise Repository」ダイアログが表示されます。

2. 「OK」をクリックします。これにより、スクリプトが実行され、プロジェクトがOracle Enterprise Repositoryに収集されます。

11.3.3 Oracle Enterprise Repositoryの検索

VS .NET用Oracle Enterprise Repositoryプラグインを使用すると、Oracle Enterprise Repositoryで使用可能なアセットおよびアーティファクトにアクセスできます。VS .NETを介して、様々な基準に一致するアセットの検索、または開発プロジェクトに関係するアセットの表示を行うことができます。

VS .NETで単純なキーワード検索を実行して、Oracle Enterprise Repositoryでアセットを見つけ、アセットのメタデータを表示します。

1. 「View」メニューを開きます。

2. 「Oracle Enterprise Repository Add-in for Visual Studio .NET」オプションをクリックして、サブメニューから「View Asset Search Window」を選択します。図11-7に示すように、Oracle Enterprise Repositoryのアセット検索ウィンドウが表示されます。

図11-7 「OER Asset Search」ダイアログ

「図11-7 「OER Asset Search」ダイアログ」の説明

3. 「Keyword」テキスト・ボックスでキーワードまたはフレーズを入力します。

4. 「Type」および「Function」リストを使用して、検索を絞り込みます。

5. 「Search」ボタンをクリックします。図11-8に示すように、検索条件に一致するすべてのアセットの一覧がOracle Enterprise Repositoryの検索結果ウィンドウに表示されます。

図11-8 「OER Search Results」ウィンドウ

「図11-8 「OER Search Results」ウィンドウ」の説明

6. 一覧表示されたアセットの「Display Details」アイコンをクリックするか、矢印をダブルクリックして、アセットの詳細を表示します。

7. 一覧表示されたアセットの「Download」アイコンをクリックして、アセットをダウンロードします。

11.3.4 アセット詳細の表示

選択したアセットに対して、アセット詳細(説明、使用履歴、削減予測、リレーションシップなど)を表示できます。アセット・メタデータ内で、ドキュメント、ユーザー・ガイド、テスト・ケースのサポートへのリンクが提供されていて、これを使用すると既存の機能を再利用できます。

アセット詳細ビューを使用すると、組込みのWebベースのブラウザで一覧表示されたアセットの詳細情報が表示されます。これは、Enterprise Repositoryアプリケーションを呼び出して、選択したアセットに関連付けられた詳細を表示します。

1. アセットの検索に関する項で説明したように、キーワード検索を実行して、Oracle Enterprise Repositoryでアセットを見つけます。

2. 「Oracle Enterprise Repository Search Results」ウィンドウで、「Display Details」アイコンをクリックします。Oracle Enterprise Repositoryでは、図11-9に示すように、選択したアセットについての情報が表示されます。

図11-9 Oracle Enterprise Repositoryの「概要」タブ

「図11-9 Oracle Enterprise Repositoryの「概要」タブ」の説明

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

- 11.3.4.1項「リポジトリ・アセット・ペインへのアクセス」

- 11.3.4.2項「Oracle Enterprise Repositoryログへのアクセス」

11.3.4.1 リポジトリ・アセット・ペインへのアクセス

リポジトリ・アセット・ビューには、プロジェクトに規定されたアセットの一覧、およびプロジェクトですでに使用されているアセットが表示されます。この項の内容は次のとおりです。

- 11.3.4.1.1項「Oracle Enterprise Repositoryプロジェクトの概要」

- 11.3.4.1.2項「リポジトリ・アセット・ビューへのアクセス」

11.3.4.1.1 Oracle Enterprise Repositoryプロジェクトの概要

Enterprise Repositoryを介して、アナリスト、設計者、技術責任者、およびプロジェクトの設計段階で作業するその他の担当者は、プロジェクトの要件を満たすアセットの一覧を作成できます。アセットの一覧はリポジトリのコンプライアンス・テンプレートで取得され、コンプライアンス・テンプレートはOracle Enterprise Repositoryプロジェクトに関連付けられています。コンプライアンス・テンプレートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

リポジトリ・アセット・ビューから、プロジェクトに割り当てられたすべてのコンプライアンス・テンプレートに表示されるアセットの一覧を表示できます。ビューアでは、どのアセットがプロジェクト・メンバーで使用されているかが示されます。すでにプロジェクトで使用されているその他のアセットも示されます。

11.3.4.1.2 リポジトリ・アセット・ビューへのアクセス

1. 「View」メニューを開きます。

2. 「Oracle Enterprise Repository Add-in for Visual Studio .NET」オプションをクリックして、サブメニューから「Oracle Enterprise Repository Assets」を選択します。図11-10に示すように、リポジトリ・アセット・ウィンドウが表示されます。

図11-10 「Oracle Enterprise Repository Assets」ウィンドウ

「図11-10 「Oracle Enterprise Repository Assets」ウィンドウ」の説明

3. 一覧表示されたアセットの「Display Details」アイコンをクリックするか、矢印をダブルクリックして、アセットの詳細を表示します。

4. 一覧表示されたアセットの「Download」アイコンをクリックして、アセットをダウンロードします。

11.3.4.2 Oracle Enterprise Repositoryログへのアクセス

Oracle Enterprise Repositoryログにアクセスするには、次の手順を実行します。

1. 「View」メニューを開きます。

2. 「Oracle Enterprise Repository Add-in for Visual Studio .NET」オプションをクリックして、サブメニューから「Oracle Enterprise Repository Log」を選択します。Oracle Enterprise Repositoryのログ・ウィンドウが表示されます。

3. 「Clear」をクリックして、ログ・エントリを削除します。

11.3.5 アーティファクトのダウンロード

プロジェクトにアセットのアーティファクト(ペイロード)をダウンロードできます。通常、アセット・ペイロードは、サービス(WSDLファイルなど)を使用する際や、サービスをコード・ベース(通常はバイナリ)に組み込む際に必要な機能です。アセット・メタデータ内で、ドキュメント、ユーザー・ガイド、テスト・ケースなどのサポートへのリンクが提供されていて、これを使用すると、開発者は既存の機能を再利用できます。

1. アセットの検索に関する項で説明したように、キーワード検索を実行して、Oracle Enterprise Repositoryでアセットを見つけます。

2. 図11-11に示すように、「Oracle Enterprise Repository Search Results」ウィンドウで、「Download」アイコンをクリックします。

図11-11 「OER Search Results」ウィンドウ - 「Download」のクリック

「図11-11 「OER Search Results」ウィンドウ - 「Download」のクリック」の説明

3. 図11-12に示すように、アセット・ファイルのダウンロード先のVSプロジェクトを選択してから、「Next」をクリックします。

図11-12 「Download Oracle Enterprise Repository Asset」

「図11-12 「Download Oracle Enterprise Repository Asset」」の説明

4. 図11-13に示すように、ダウンロードするアセット・ファイルを選択してから、「Finish」をクリックします。

図11-13 アセット・ファイルの選択

「図11-13 アセット・ファイルの選択」の説明

5. 必要に応じて、ソリューション・エクスプローラを起動します。図11-14に示すように、「Oracle Enterprise Repository References」とラベルの付いた新しいフォルダがプロジェクトのファイル・ツリーに表示されます。このフォルダには、ダウンロードしたアセットの名前の付いたサブフォルダが含まれています(図11-14のxmd5(1.0)など。)このフォルダには、アセットのアーティファクトが含まれています。

図11-14 ソリューション・エクスプローラ・ウィンドウ

「図11-14 ソリューション・エクスプローラ・ウィンドウ」の説明

11.3.6 使用状況の自動検出

Oracle Enterprise Repositoryでは、開発環境内でアセットの再利用を自動的に検出できます。これにより、アセットがOracle Enterprise Repositoryでダウンロードされたか、開発者のデスクトップなど、他のソースから取得したかどうかにかかわらず、開発チームはアセットの再利用クレジットを取得できます。使用状況の自動検出は、Software File Identification(SFID)と呼ばれるフィンガープリント・プロセスに依存しています。これは、アセット内で選択したファイルに一意のIDを使用してタグ付けされています。アセットがOracle Enterprise Repositoryの「使用-ダウンロード」プロセス以外の方法で取得された場合でも、このSFIDは、アセットが使用された時間と場所を検出するために使用されます。アセット内でタグ付けされたファイルがVS .NET用Oracle Enterprise Repositoryプラグインに配置され、新しいビルドまたはビルド・クリーンが発生したときに、使用状況のインスタンスがOracle Enterprise Repositoryによって記録されます。詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

自動的に使用状況を検出するには、.NETプロジェクトを監視する必要があります。

1. .NETソリューション・エクスプローラを開きます。

2. ファイル・ツリーでソリューションを右クリックして、コンテキスト・メニューから「Oracle Enterprise Repository Add-in for Visual Studio .NET」オプションを選択します。

3. サブメニューから「Projects Monitored」をクリックします。「Monitored Projects」ウィンドウが表示されます。

4. 図11-15に示すように、使用状況の自動検出で監視する.NETプロジェクトを選択します。

図11-15 「MonitoredProjects」ダイアログ

「図11-15 「MonitoredProjects」ダイアログ」の説明

5. 終了したら、「OK」をクリックします。

12 SAPとの統合

この章では、SOAガバナンスの観点から、SAPとOracle Enterprise Repositoryを統合することによって、SAPアプリケーションおよびプラットフォームから使用できるサービスの可視性を向上させる方法について説明します。

この章では、次の項目について説明します。

- 12.1項「概要」

- 12.2項「前提条件」

- 12.3項「SAPとの統合の構成」

12.1 概要

SOAガバナンスの主な目標は、異なる開発プラットフォームに組み込まれた、複数のパッケージ化されたカスタム・アプリケーションにある異なるサービス間の可視性と制御を提供することです。SAPでは、SAPのパッケージ・アプリケーションとNetWeaverミドルウェア・プラットフォームの両方を提供しています。主な目標は、SAPアプリケーションおよびプラットフォームから使用できるサービスの可視性を提供することです。これらのサービスは、新しいコンポジット・アプリケーションの開発の一部として使用または再利用されます。また、Oracle Service Busによって使用され、SAPビジネス・サービス用のプロキシ・サービスを生成します。

SAPエンタープライズ・サービス・レジストリがSAP UDDIクライアントにサービスをデプロイし、そこから、 Oracle Enterprise RepositoryのExchange Utilityがサービス・アセットに接続および受信します。図12-1に、SAPエンタープライズ・レジストリとOracle Enterprise Repositoryの統合を示します。

図12-1 SAPとOERの統合

「図12-1 SAPとOERの統合」の説明

新しいサービスがSAPで発行されるたびに、Oracle Enterprise Repositoryで作成された、対応するサービス・アセットと同期できます。SAPで実行中のサービス更新とOracle Enterprise Repositoryの対応するアセットを同期することもできます。Exchange Utilityを手動で実行すると、このような同期を行うことができます。その後、Oracle Enterprise Repositoryの他のアセットと同様に、SAPアセットを使用できるようになります。

12.2 前提条件

SAPをOracle Enterprise Repositoryで構成する前に、次の前提条件が満たされていることを確認します。

- SAPリポジトリとSAP UDDIレジストリが構成されている必要があります。

- SAP環境が構成されている必要があります。

12.3 SAPとの統合の構成

この項では、SAPアプリケーションとNetWeaverプラットフォームからOracle Enterprise Repositoryの可視性をサービスに提供するための詳細なユースケースについて説明します。これにより、サービスをIDE、JDeveloper、EclipseおよびVS .Netを介して使用できるようになります。

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

- 12.3.1項「SAPアセットとOracle Enterprise Repositoryアセット間の分類の調整」

- 12.3.2項「SAPエンタープライズ・サービス・レジストリからOERへの選択したSAPサービス・アセットのエクスポート」

- 12.3.3項「SAPからの新しいサービスの受信」

- 12.3.4項「SAPからの実行中更新の構成」

- 12.3.5項「エンドユーザーの使用可能なSAPサービスの可視性」

12.3.1 SAPアセットとOracle Enterprise Repositoryアセット間の分類の調整

SAPアセットとOracle Enterprise Repositoryアセット間の分類を調整するには、次の手順を実行します。

1. XUフォルダからUDDIMappings.xmlファイルを開きます。SAPレジストリに従って、Oracle Enterprise RepositoryのXUマッピング・ファイルを構成する必要があります。

2. ファイルの下部までスクロールして、<tmodels>セクションを見つけ、次のようにtmodelkey属性値を変更します。

<tmodels>
<keyedReference tModelKey="uddi:bea.com:aleruuid" keyName="bea-com:aler:uuid" />
<keyedReference tModelKey="uddi:example.com:internalname" keyName="oracle-com:oer:internalname" />
<keyedReference tModelKey="uddi:example.com:version" keyName="oracle-com:oer:version" />
</tmodels>

3. UDDIMappings.xmlファイルを保存して閉じます。

12.3.2 SAPエンタープライズ・サービス・レジストリからOERへの選択したSAPサービス・アセットのエクスポート

SAPエンタープライズ・サービス・レジストリからOracle Enterprise Repositoryに選択したSAPサービス・アセットをエクスポートするには、次の手順を実行します。

1. SAPのサービスでOracle Enterprise Repositoryのブートストラップを実行します。これにより、SAPサービスがOracle Enterprise Repositoryに初期ロードされます。

1. Oracle Enterprise RepositoryとSAP UDDIの接続設定のためにorrxu.xmlを構成します。

2. XUの受信問合せ<registryQuery>を次のように構成します。

<services>
<service name="%"/>
</services>

これにより、SAP UDDIからOracle Enterprise Repositoryに、使用可能なすべての有効なサービスが初期ロードされます。Oracle Enterprise Repositoryにサービス・アセットとその関連アーティファクト・アセットが作成されます。

注意:

現在、コマンド・プロンプトからのみ、Exchange Utilityを実行してこれを行うことができます。

12.3.3 SAPからの新しいサービスの受信

新しいサービスがSAP UDDIにデプロイされるたびに、Exchange Utilityツールを実行すると、Oracle Enterprise Repositoryでこれを受信できます。サービスの初期ロードがOracle Enterprise Repositoryに作成された後、定期的に、または新しいサービスがSAP UDDIに発行されるたびに、Exchange Utilityを実行できます。

SAPで作成されたサービス名がわかる場合、受信問合せ<registryQuery>を構成してサービスを受信するサービス名を指定できます。また、問合せをservice name=”%”として実行して新しいサービス・アセットをOracle Enterprise Repositoryで作成し、Oracle Enterprise Repositoryにある既存のサービスをSAPと再同期することもできます。

12.3.4 SAPからの実行中更新の構成

サービスがSAP UDDIで変更されるたびに、Oracle Enterprise Repositoryで作成された、対応するサービス・アセットと更新を同期する必要があります。コマンドラインからExchange Utilityを実行して、これを行うことができます。

<registryQuery>のワイルドカード文字問合せをservice name=”%”として使用し、Oracle Enterprise Repositoryの既存のサービスとSAPを再同期して、Oracle Enterprise Repositoryに新しいサービス・アセットを作成することによって、Exchange Utilityを定期的に実行できます。

注意:

現在、コマンド・プロンプトからのみ、Exchange Utilityを実行してこれを行うことができます。

12.3.5 エンドユーザーの使用可能なSAPサービスの可視性

SAPサービスがOracle Enterprise Repositoryに存在すると、IDEからSAPサービスを検索および使用でき、Oracle Enterprise Repositoryの他のアセットと同様に、Oracle Enterprise Repository WebコンソールからSAPアセットを使用できます。

図12-2に、SAPアセットがOracle Enterprise Repositoryに表示された場合のSAPアセットのイメージを示します。

図12-2 SAP Oracle Enterprise RepositoryにあるSAPアセット

「図12-2 SAP Oracle Enterprise RepositoryにあるSAPアセット」の説明

IDEからのサービスの検索および使用の詳細は、11.1項「Oracle JDeveloperの使用」を参照してください。

第IV部

カスタム統合の開発

この部では、拡張性フレームワーク(REX)を開始して、REXが提供する様々なAPIを使用する方法を説明します。

この部は、次の章で構成されています。

- 第13章「リポジトリ拡張性フレームワーク」

- 第14章「アーティファクト・ストアAPI」

- 第15章「許容値リストAPI」

- 第16章「アセットAPI」

- 第17章「アセット・タイプAPI」

- 第18章「カテゴリ分けタイプとカテゴリ分けAPI」

- 第19章「CMFエントリ・タイプAPI」

- 第20章「カスタム・アクセス設定API」

- 第21章「部門API」

- 第22章「抽出API」

- 第23章「REXクライアントのローカライズ」

- 第24章「通知API」

- 第25章「ポリシーAPI」

- 第26章「プロジェクトAPI」

- 第27章「リレーションシップ・タイプAPI」

- 第28章「ロールAPI」

- 第29章「サブスクリプションAPI」

- 第30章「システム設定API」

- 第31章「ユーザーAPI」

- 第32章「ベンダーAPI」

13 リポジトリ拡張性フレームワーク

この章では、リポジトリ拡張性フレームワーク(REX)アーキテクチャについて説明し、OpenAPIを有効にしてWSDLを使用する方法について解説します。

この章では、次の項目について説明します。

- 13.1項「REXの概要」

- 13.2項「REXのアーキテクチャ」

- 13.3項「基本的な概念」

13.1 REXの概要

REXは、プログラムでOracle Enterprise Repositoryに統合するWebサービスAPIです。これは、業界で認められた標準に基づいており、相互運用性とプラットフォームの独立性に重点を置いて設計されています。REXでは、Web Services Description Language (WSDL v1.1)で記述された、リモート・プロシージャ・コール(RPC)Webサービスを使用します。これにより、クライアントで、任意のプラットフォームやWebサービスをサポートする任意の実装言語を使用して、Oracle Enterprise Repositoryと相互に動作できます。たとえば、Oracle Enterprise RepositoryはJ2EEアプリケーションですが、REXを使用して.NETクライアントとプログラムで相互に動作できます。

注意:

flashlineおよびregistryというインスタンスが、特にJavaパッケージ構造およびREXクラス名としてこのドキュメントで使用されています。

Oracle Enterprise RepositoryがSiteminderで保護されるように構成されているか、今後構成される場合、次のURLを無視するか、または保護しないようにポリシー・サーバーを構成して、OpenAPI統合が正しく機能できるようにする必要があります。

http://appserver.example.com/oer/services/

注意:

このドキュメントで使用している例は説明用であり、Oracle Enterprise Repository WSDLのバージョン間のパッケージ構造の違いのためにコンパイルされません。使用しているバージョンのOracle Enterprise Repositoryに合うように、パッケージ構造を変更する必要があります。

REXの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository拡張性フレームワーク(REX)のREX Javadocを参照してください。

13.2 REXのアーキテクチャ

図13-1に、REXのアーキテクチャを示します。

図13-1 REXのアーキテクチャ

「図13-1 REXのアーキテクチャ」の説明

Oracle Enterprise RepositoryおよびREXの高度なアーキテクチャは、次の高度な目標を考慮して設計されています。

- 柔軟性
SOAP、WSDLおよびHTTPなどの業界で認められた標準に準拠しているクライアント・プラットフォームは、REXインタフェースを介してOracle Enterprise Repositoryと相互に動作できます。一般的なクライアント・プラットフォームとAPIが適切に連携することが検証されています。

- 拡張性
新機能がOracle Enterprise Repositoryに追加された際に、その機能にアクセスするためのサブシステムの追加プロセスが、Oracle Enterprise Repositoryの階層化アーキテクチャにより単純化されます。詳細は、13.2.4項「Oracle Enterprise Repository REXのバージョンの考慮事項」を参照してください。

- 簡潔性
エンドユーザーは、REXで使用可能な拡張機能を簡単に利用できます。

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

- 13.2.1項「サブシステムの概要」

- 13.2.2項「CRUD-Qネーミング規則」

- 13.2.3項「基本的なWSDLのデータ型」

- 13.2.4項「Oracle Enterprise Repository REXのバージョンの考慮事項」

13.2.1 サブシステムの概要

Oracle Enterprise RepositoryのREXを使用すると、様々なサブシステムにアクセスできます。これらのサブシステムは、システムの機能を論理的なカテゴリ(動作するエンティティのタイプとほぼ同様)に大まかにグループ化しています。このドキュメントの大部分は、これらのサブシステムに基づいた項で構成されています。

REXメソッドは、様々なサブシステムに基づいたスキームを使用して、名前が付けられています。このプロセスで使用されるアルゴリズムの詳細は、13.2.2項「CRUD-Qネーミング規則」を参照してください。REXで定義されているサブシステムは、次のとおりです。

- 許容値

- アセット

- アセット・タイプ

- 認証トークン

- カテゴリ分け

- カテゴリ分けタイプ

- 部門

- 抽出

- インポート/エクスポート

- プロジェクト

- リレーションシップ

- ロール

- ユーザー

- ベンダー

13.2.2 CRUD-Qネーミング規則

オープンAPIメソッドのネーミングで使用されているスキームは、CRUD-Qニーモニックに基づいています。CRUD-Qは、次の5つの操作を表しています。

- C: 作成(Create)

- R: 読取り(Read)

- U: 更新(Update)

- D: 削除(Delete)

- Q: 問合せ(Query)

各メソッドは、次の例のように、そのメソッドが属するサブシステムの名前で始まり、次にそのサブシステム内で実行される操作の説明が続きます。

<サブシステム><操作>

たとえば、アセット・サブシステムで作成の操作を実行するメソッド名は、次のようになります。

assetCreate(...)

このネーミング規則を使用すると、次のような名前も考えられます。

assetRead(...)
assetUpdate(...)
assetDelete(...)
assetQuery(...)

サブシステムにはCRUD-Qセット以外の操作が含まれていることがあります。また、CRUD-Qの操作をすべて含んでいるわけではありません。たとえば、ユーザーを削除できないので、userDeleteメソッドはありませんが、userDeactivateメソッドはあります。表13-1に、サブシステムがCRUD-Q操作以外に含めることのできる操作の詳細なリストを示します。

表13-1 サブシステムとCRUD-Q規則の関係

作成

読取り

更新

削除

問合せ

その他の機能

許容値リスト

はい

はい

はい

はい

はい

許可、アクティブ化、割当て、非アクティブ化、登録、リタイア、発行、未許可、割当て解除、登録解除、未発行、カスタム・アクセス設定の変更

アセット

はい

はい

はい

はい

はい

アセット・タイプ

はい

はい

はい

はい

はい

カテゴリ分けタイプ

はい

はい

はい

はい

はい

部門

はい

はい

はい

いいえ

はい

抽出

はい

はい

はい

いいえ

はい

プロジェクト

はい

はい

はい

はい

はい

閉じる、開く、再割当て、抽出、ユーザーの削除

リレーションシップ

はい

はい

はい

いいえ

はい

ロール

はい

はい

はい

はい

はい

ユーザー

はい

はい

はい

いいえ

はい

アクティブ化、非アクティブ化、ロックアウト、未承認

ベンダー

はい

はい

はい

はい

はい

連絡先

はい

はい

はい

はい

はい

13.2.2.1 メソッド呼出しの原子性

特に断りがなければ、REXの呼出しはすべて原子的です。すなわち、すべての呼出しは、完全に成功するか、完全に失敗するかのいずれかです。

たとえば、あるバージョンのcategorizationUpdateメソッドは、引数としてカテゴリ分けの更新の配列を取ります。この場合、カテゴリ分けの更新が1回失敗すると、カテゴリ分けの更新はすべて失敗します。

13.2.2.2 呼出し間のトランザクションの未サポート

現在、REXでは、呼出し間のトランザクションをサポートしていません。たとえば、エラーの場合、一連のREXの呼出しに関連付けれられた操作にロールバックできません。

13.2.3 基本的なWSDLのデータ型

REXでは、次の基本的なWSDLデータ型およびWSDLで定義された複合の型が使用されています。

これらの型の配列が返されます。

- xsd:int

- xsd:long

- xsd:string

- xsd:boolean

- xsd:dateTime

次のURLのIDEまたはWebサービス・ツールキットを指して、REX WSDLを使用することにより、APIスタブを動的に生成できます。

http://appserver/oer/services/FlashlineRegistry?WSDL

たとえば、Oracle Enterprise Repository REX WSDLのJavaスタブは、次のAXIS WSDL2javaユーティリティを使用して作成できます。

java -cp .;axis.jar; xerces.jar; commons-discovery.jar; commons-logging.jar; jaxen-full.jar; jaxrpc.jar; saaj.jar;wsdl4j.jar; xalan.jar org.apache.axis.wsdl.WSDL2Java

http://appserver/oer/services/?FlashlineRegistry?WSDL

この変換プロセスの完了に必要なJARファイルは、次のとおりです。

- axis.jar

- xerces.jar

- commons-discovery.jar

- commons-logging.jar

- jaxen-full.jar

- jaxrpc.jar

- saaj.jar

- wsdl4j.jar

- xalan.jar

注意:

URL内のappserverは、Oracle Enterprise Repositoryがインストールされているサーバーの名前で置き換えてください。

13.2.4 Oracle Enterprise Repository REXのバージョンの考慮事項

当然のことながら、Oracle Enterprise Repository REXはOracle Enterprise Repositoryと同様に発展します。ただし、このプロセスの結果として、REXの新旧バージョン間で非互換が起こることがあります。すべてのバージョン間の互換性の実現を目標としていますが、下位互換性が実現されるかどうかは予測できない場合もあります。したがって、制限が避けられない可能性があります。将来的には、Oracle Enterprise RepositoryリリースREXには、次の下位互換性拡張が含まれます。

- Oracle Enterprise Repository Weサービスへの新しいメソッドの追加

- WSDLでの新しい複合型の定義

これらの下位互換性への変更に関して、新機能を利用する必要がある場合にかぎり、クライアント・プロキシの再生成が必要になります。

非互換の変更を回避できない場合にかぎり、サービスのネームスペースが変更されます。このような変更の例には、既存の複合型の変更や、サービスのメソッドの署名における変更があります。この場合、最低限のコード変更があるので、クライアント・プロキシの再生成が必要です。以前のバージョンのREXから生成されたクライアント・プロキシでは、新しいサービスに接続できません。

複合型のネームスペースは変更されません。

13.3 基本的な概念

この項では、オープンAPIの有効化およびWSDLの使用の開始方法などのREXの基本的な概念について説明します。この項の内容は次のとおりです。

- 13.3.1項「Oracle Enterprise RepositoryでのオープンAPIの有効化」

- 13.3.2項「WSDLの使用」

13.3.1 Oracle Enterprise RepositoryでのオープンAPIの有効化

この手順は、Oracle Enterprise Repositoryの「管理」画面で実行します。

1. 「システム設定」をクリックします。

2. 新しいシステム設定の有効化テキスト・ボックスにプロパティcmee.extframework.enabledを入力します。

3. 「有効化」をクリックします。オープンAPIセクションが表示されます。

4. cmee.extframework.enabledプロパティにTrueが設定されていることを確認します。

5. 「保存」をクリックします。これで、REXがOracle Enterprise Repositoryインスタンス内で有効になっています。

13.3.2 WSDLの使用

REXを使用するための最初の手順は、Oracle Enterprise Repositoryサーバーとの通信に必要なクライアント側スタブの生成です。これは、通常、特定のWebサービス・ツールキットで提供されている自動ツールを使用して実行されます。この項では、様々な統合開発環境およびツールキットを使用して、クライアント・スタブを生成する方法について説明します。

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

- Visual Studio .NET

- Eclipse - Lombozプラグイン

- 認証と認可

- 例外処理

- JavaとAXIS

- .NET

- 検証

- REXにおける問合せの考慮事項

- バイナリ・データの送信(添付ファイル)

- .NETとMicrosoft Web Services Enhancement(WSE)キットでのDIME添付ファイルの使用

- 添付ファイルとJava AXISクライアントでのSOAPの使用

Visual Studio .NET

1. ソリューション・エクスプローラで「Web References」ノードを右クリックし、図13-2に示すように、「Add Web Reference」を選択します。「Add Web Reference」ダイアログが表示されます。

図13-2 ソリューション・エクスプローラ・ウィンドウ

「図13-2 ソリューション・エクスプローラ・ウィンドウ」の説明

2. 図13-3に示すように、Web参照名を指定します。

図13-3 「Add Web Reference」ダイアログ

「図13-3 「Add Web Reference」ダイアログ」の説明

適切なURLを指定してアプリケーション・サーバー(実行中の場合)から、あるいは、Eclipseプロジェクトのローカルの静的ファイルから、Oracle Enterprise Repository WSDLファイルを直接ロードできます。URLを使用する場合、このファイルは次の場所にあります(yourserverとappnameを適切な値に置き換えてください)。

http://yourserver:port/appname/services/FlashlineRegistry?wsdl

3. サービスのエンドポイントに接続します。Web参照を作成後、クライアント・サービス・プロキシのインスタンスを設定して、これを使用します。
flashline.FlashlineRegistryService registry = new flashline.FlashlineRegistryService();

4. (Web参照の設定に使用したWSDLファイルに含まれている)サービスのデフォルトURLがWebサービスの実際のアドレスではない場合、エンドポイント・アドレスを次のように変更できます。
registry.Url = "http://appserver/oer/services/FlashlineRegistry";

これで、アプリケーションがREXを介してOracle Enterprise Repositoryと相互に動作できるようになりました。

Eclipse - Lombozプラグイン

LombozプラグインはEclipseと連携しますが、WebサービスをサポートするEclipseプラグインが動作する必要があります。ほとんどのツールまたはプラグインは、通常、次の項目について要求されます。

- WSDLファイルの場所

- 生成したコードが使用できるプロジェクトのソース・ディレクトリ

- コンパイルするWSDLファイルのバージョン

適切なURLを指定してアプリケーション・サーバー(実行中の場合)から、あるいは、Eclipseプロジェクトのローカルの静的ファイルから、Oracle Enterprise Repository WSDLファイルを直接ロードできます。WSDL URLは、次の場所にあります(www.example.comとappnameを適切な値に置き換えてください)。

http://www.example.com/appname/services/FlashlineRegistry?wsdl

生成したクライアント・プロキシ・クラスのターゲットとして、プロジェクトのビルド・パスのソース・ディレクトリを選択します。

Oracle Enterprise Repository WSDLは、WSDL標準のバージョン1.1に準拠しています。

認証と認可

REXを使用するための最初の手順は、サーバーでの認証です。authTokenCreateメソッドを使用して認証が実行されます。このメソッドは、Oracle Enterprise Repositoryでの認証で使用する際に、ユーザーIDとパスワードを引数として取ります。IDとパスワードの認証が成功すると、認証トークンが返されます。このトークンは、後続のすべてのREXの呼出しで使用する必要があります。

有効なAuthTokenがすべてのREXメソッドに含まれていない場合、OpenAPIExceptionがスローされます。これは、authTokenCreateおよびauthTokenDelete以外のすべてのメソッドに適用されます。

次の例は、AuthTokenを取得してこれを後続のREX呼出しで使用する方法を示しています。

例13-1 AuthTokenを取得してREX呼出しで使用する方法

package com.example.flashlineclient;
//The imports below are assumed for any of the included examples
import javax.xml.rpc.ServiceException;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Asset;
public class FlexTest {
public FlexTest () {
}
public static void main(String[] pArgs)throws OpenAPIException, RemoteException, ServiceException {
try {
FlashlineRegistry lRegistry = null;
AuthToken lAuthToken = null;
URL lURL = null;
lURL = new URL("http://www.example.com/appname/services/FlashlineRegistry");
//"www.example.com" should be your server address
//"appname" is the application name of the location that the Registry is running
on
//These two things must be changed to the proper values in every example
lRegistry = new FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
lAuthToken = lRegistry.authTokenCreate("username", "password");
System.out.println(lAuthToken.getToken());
//displaying the authtoken as a string to the screen
Asset lAsset = lRegistry.assetRead(lAuthToken, 559);
//reading asset number 559
System.out.println(lAsset.getName());
//displaying the name of asset 559 to the screen
} catch(OpenAPIException lEx) {
System.out.println("ServerCode = "+ lEx.getServerErrorCode());
System.out.println("Message = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
System.out.println("execution completed");
System.exit(0);
}
}

認可

REXでは、Oracle Enterprise Repositoryアプリケーションと同じ認可ルールが実行されます。認可に使用するユーザーIDとパスワードでは、REXでユーザーに使用できる権限が判定されます。たとえば、プロジェクトに割り当てられた編集権限を持たない認証済のユーザーがprojectCreate REXメソッドを使用してプロジェクトを作成しようとした場合、OpenAPIExceptionがスローされます。

例外処理

オープンAPIはSOAPフォルトでサーバー・エラーをクライアントに通知します。SOAPフォルトが処理される方法は、使用している言語とSOAPツールキットによって異なります。

この項では、一般的なプラットフォームとツールキットの組合せを使用して、クライアント・コード内でオープンAPIが生成した例外を検出して処理する方法を示します。

JavaとAXIS

オープンAPIがスローした例外は、SOAPフォルトとして転送されてから、AXISクライアント・ツールキットでJava例外としてデシリアライズされます。つまり、AXISは、SOAPフォルトを対応するクライアント側OpenAPIExceptionクラスにマップしようとします。サーバー側エラーは、com.flashline.registry.openapi.OpenAPIExceptionインスタンスとしてクライアントに示されます。したがって、クライアント・コードは、前述のコードから、次に示したコードで例外を取得できます。

try {
lAsset = lRegistry.assetCreate(..);
} catch(OpenAPIException lEx) {
System.out.println("ServerCode = "+ lEx.getServerErrorCode());
System.out.println("Message = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}

.NET

.NETで使用済のWebサービスを使用することは、若干複雑です。すべてのサービス例外は、タイプSystem.Web.Services.Protocols.SoapExceptionの例外としてクライアント側で取得されます。このため、オープンAPIでスローされたOpenAPIExceptionで使用可能な拡張情報の取得は若干注意が必要です。.NET SoapExceptionプロパティは、SOAPフォルト・メッセージを示します。ただし、OpenAPIExceptionで提供された追加フィールド(標準SOAPフォルトに明示的にマップされているもの以外)は、.NET SoapExceptionのXML詳細プロパティを手動で解析して取得する必要があります。たとえば、次のようなコードは、サーバー側のエラー・コードとOpenAPIExceptionで返されたスタック・トレースを表示するために使用できます。

try
{
registry.testException();
}
catch(SoapException exc)
{
XmlNode lNode = null;
lNode = exc.Detail.SelectSingleNode("*/serverErrorCode");
if(lNode != null)
Console.Out.WriteLine("Error Code: "+lNode.InnerText);
lNode = exc.Detail.SelectSingleNode("*/serverStackTrace");
if(lNode != null)
Console.Out.WriteLine("Server Stack Trace: \n"+lNode.InnerText);
}

返されたSOAPフォルトがserverErrorCodeという名前の2つ以上のXML要素を含まないようにするために、*/serverErrorCodeよりも明示的なXPath式を使用することをお薦めします。

次のSOAPレスポンスは、SOAPフォルト・メッセージとして表されたOpenAPIExceptionを示します。

例13-2 SOAPフォルト・メッセージとして表されたOpenAPIException

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>Error [100], Severity [SEVERE]:An unkown server-side error occured.
Please record stack trace (if available) and contact technical
support.</faultstring>
<detail>
<com.flashline.cmee.openapi.OpenAPIException xsi:type="ns1:OpenAPIException"
xmlns:ns1="http://base.openapi.registry.flashline.com">
<message xsi:type="xsd:string">Error [100],
Severity [SEVERE]:An unkown server-side error occured.
Please record stack trace (if available) and contact technical support.</message>
<serverErrorCode xsi:type="xsd:int">100</serverErrorCode>
<serverStackTrace xsi:type="xsd:string">java.lang.NullPointerException&#xd;
at java.util.HashMap.&lt;init&gt;(HashMap.java:214)&#xd;
...
at java.lang.Thread.run(Thread.java:534)&#xd;
</serverStackTrace>
<severity xsi:type="xsd:string">SEVERE</severity>
</com.flashline.cmee.openapi.OpenAPIException>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>

検証

エンティティをOracle Enterprise Repositoryに保存しようとする際に、入力内容の検証が試行されます。欠落しているデータや無効なデータがあると、サーバーは、フィールドのリストとそれぞれのエラーが含まれるOpenAPIExceptionをスローします。

詳細は、「例外処理」を参照してください。

REXにおける問合せの考慮事項

基準オブジェクトは、現在、用語とグループ化のさらに柔軟性の高い表現に移行しています。このオブジェクトが発生すると、これらの変更は、基準オブジェクトを使用して問合せを実行する場合に、特定のAPI機能を使用できるかどうかに影響します。サブシステムでは、対応する基準オブジェクトのみ直接評価されます。このドキュメントで説明しないかぎり、基礎となるSearchTermGroupの拡張機能は使用されません。

バイナリ・データの送信(添付ファイル)

様々なREXメソッドでは、クライアントとサーバー間で大量のバイナリ・データの送受信を必要とする場合があります。たとえば、インポート/エクスポート・サブシステムでは、インポート元からペイロードを送信するメソッドやエクスポート済アセットを表すペイロードを受信するメソッドが提供されています。

通常、バイナリ・データは、WebサービスのRPC起動によって、Dynamic Internet Message Exchange(DIME)、SOAP with Attachments (SwA)またはBase-64エンコーディングを介して、転送されます。それぞれに長所と短所がありますが、3つすべてを直接サポートしているクライアントは少数です。

Oracle Enterprise RepositoryのオープンAPIは、バイナリ・データの転送に3つのメカニズムすべてをサポートしています。詳細は、次の項を参照してください。バイナリ・データの転送に提供されているメソッドには3つのバージョンがあり、それぞれが異なる転送メカニズムをサポートしています。たとえば、エクスポート結果を取得するには、ユーザーは次のメソッドのいずれかを選択できます。

- importGetResultsB64
base-64エンコーディング形式でエクスポート結果を取得します。これは、あまり一般的ではありませんが、クライアントがbase-64データをエンコードまたはデコードできる場合は、どのプラットフォームでも使用できます。

- importGetResultsDIME
DIMEプロトコルを使用して、エクスポート結果を添付ファイルとして取得します。これは、ほとんどの.NETクライアントに優先される選択肢です。

- importGetResultsSwA
SOAP with Attachments (SwA)プロトコルを使用して、エクスポート結果を添付ファイルとして取得します(MIMEベース)。

.NETとMicrosoft Web Services Enhancement(WSE)キットでのDIME添付ファイルの使用

Microsoftでは、標準の.Net Webサービス・ツールキットの拡張を提供しています。Microsoft Web Services Enhancement(WSE)キットでは、Dynamic Internet Messaging Exchange(DIME)プロトコルを使用して、Webサービスを介した添付ファイルの送受信などの拡張機能を提供しています。

次のコード・スニペットは、DIME添付ファイルによるデータ送信の例を示しています。

例13-3 DIME添付ファイルによるデータ送信の例

// relax the requirement for the server to understand ALL headers. This MUST be
// done, or the call with the attachment fails. After the call, if you wish,
// you can set this back to "true"
registry.RequestSoapContext.Path.EncodedMustUnderstand= "false";
// clear the attachments queue
registry.RequestSoapContext.Attachments.Clear();
registry.RequestSoapContext.Attachments.Add(
new Microsoft.Web.Services.Dime.DimeAttachment("0", "application/zip",
Microsoft.Web.Services.Dime.TypeFormatEnum.MediaType, "c:\\tmp\\import.zip"));
// start an import running on the server
registry.importExecute(lAuthToken, "flashline", null, "FEA Flashpack Import",
null);
// do some polling (calls to importStatus) to monitor the import progress,
// if you wish

次のコード・スニペットは、DIME添付ファイルによるデータ受信の例を示しています。

例13-4 DIME添付ファイルによるデータ受信の例

// relax the requirement for the server to understand ALL headers. This MUST be
// done, or the call with the attachment fails. After the call, if you wish,
// you can set this back to "true"
registry.RequestSoapContext.Path.EncodedMustUnderstand= "false";
// clear the attachments queue
registry.RequestSoapContext.Attachments.Clear();
// start an export
flashline.ImpExpJob lJob =
registry.exportExecute(lAuthToken, "flashline", null, "Complete Export",
"flashline",
"<entitytypes>
<entitytype type=\"acceptableValueList\">
<entities>
<entity id=\"100\"/>
</entities>
</entitytype>
</entitytypes>");
// do some polling (calls to exportStatus) to watch the progress of the
// export, if you wish...
// this call blocks until either the method returns (or an exception is
thrown),
// or the call times out.
registry.exportGetResultsDIME(lAuthToken, lJob);
// check to see if the call resulted in attachments being returned...
if(registry.ResponseSoapContext.Attachments.Count > 0)
{
Stream lStream = registry.ResponseSoapContext.Attachments[0].Stream;
// write the data out somewhere...
}

添付ファイルとJava AXISクライアントでのSOAPの使用

Axisクライアントでは、SOAP添付ファイルをJavaで処理する機能が提供されています。詳細は、http://www-106.ibm.com/developerworks/webservices/library/ws-soapatt/を参照してください。

次のコード・スニペットは、データ受信の例を示しています。

byte[] lResults = null;
ImpExpJob lExportJob =
mFlashlineRegistrySrc.exportExecute(mAuthTokenSrc,"flashline",null,
"Export Assets","default", createAssetQuery().toString());
lExportJob =
mFlashlineRegistrySrc.exportStatus(mAuthTokenSrc, lExportJob);
lResults =
mFlashlineRegistrySrc.exportGetResultsB64(mAuthTokenSrc, lExportJob);
// write the results out to disk in a temp file
File lFile = null;
String lTempDirectory =
System.getProperty("java.io.tmpdir");
lFile = new File(lTempDirectory + File.separator + "impexp.zip");
FileOutputStream lOS = new FileOutputStream(lFile);
BufferedOutputStream lBOS = new BufferedOutputStream(lOS);
lBOS.write(lResults);
lBOS.flush();
lBOS.close();
lOS.close();

次のコード・スニペットは、DIME添付ファイルによるデータ送信の例を示しています。

// open file and attach as data source
InputStream lIS = new FileInputStream(lFile);
((Stub)mFlashlineRegistryDest)._setProperty
(Call.ATTACHMENT_ENCAPSULATION_FORMAT, Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
ByteArrayDataSource lDataSource = new ByteArrayDataSource(lIS,
"application/x-zip-compressed");
DataHandler lDH = new DataHandler(lDataSource);
// add the attachment
((Stub)mFlashlineRegistryDest).addAttachment(lDH);
ImpExpJob lJob =
mFlashlineRegistryDest.importExecute(mAuthTokenDest, "flashline", null, "Import
Assets Test", null);

14 アーティファクト・ストアAPI

この章では、アーティファクト・ストアAPIのユースケースについて説明します。このユースケースで、欠落しているアーティファクト・ストアをOracle Enterprise Repositoryに作成する方法について解説します。

この章では、次の項目について説明します。

- 14.1項「概要」

- 14.2項「ユースケース」

14.1 概要

アーティファクト・ストア・サブシステムは、Oracle Enterprise Repositoryのアーティファクト・ストアに問い合せたり、これを作成したりする場合に使用する、Webサービス・ベースのメカニズムを提供します。

14.2 ユースケース

この項では、アーティファクト・ストアAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 14.2.1項「ユースケース: 存在しないアーティファクト・ストアの作成」

14.2.1 ユースケース: 欠落しているアーティファクト・ストアの作成

説明

このユースケースでは、欠落しているアーティファクト・ストアの作成方法について説明します。

サンプル・コード

例14-1 ユースケース: 欠落しているアーティファクト・ストアの作成

package com.flashline.sample.artifactstoreapi;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.ArtifactStoreBean;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.ArtifactStoreCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ArtifactStores {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1], pArgs[2]);
// -----------------------------------------
// query for an artifact store
ArtifactStoreCriteria lArtifactStoreCriteria = null;
ArtifactStoreBean[] lArtifactStoreBeans = null;
ArtifactStoreBean lArtifactStoreBean = null;
lArtifactStoreCriteria = new ArtifactStoreCriteria();
lArtifactStoreCriteria.setHostCriteria("existing-artifact-store.com");
lArtifactStoreCriteria.setBasepathCriteria("/");
lArtifactStoreBeans = repository.artifactStoreQuery(authToken,
lArtifactStoreCriteria, false);
// create a missing artifact store if missing and based on the criteria
lArtifactStoreCriteria = new ArtifactStoreCriteria();
lArtifactStoreCriteria.setHostCriteria("missing-artifact-store.com");
lArtifactStoreCriteria.setBasepathCriteria("/");
// a new artifact store is created
lArtifactStoreBeans = repository.artifactStoreQuery(authToken,
lArtifactStoreCriteria, true);
lArtifactStoreBean = lArtifactStoreBeans[0];
} catch(Exception e) {
throw new RuntimeException(e.getMessage());
}
}
}

15 許容値リストAPI

この章では、許容値リストAPIのユースケースについて説明します。このユースケースで、新しい許容値リストを作成し、これをOracle Enterprise Repositoryに入力し、アセットの単一または複数の選択リストに許容値を移入する方法について解説します。

この章では、次の項目について説明します。

- 15.1項「概要」

- 15.2項「ユースケース」

15.1 概要

許容値リストは、単一および複数の選択ドロップダウン・ボックスのメタデータ要素で使用します。

アセット・タイプを作成または編集する場合、許容値リストはメタデータ要素として使用します。これらのメタデータ要素は、アセット・タイプ/コンプライアンス・テンプレートのエディタおよびビューアXMLで、ID別に参照します。

アセットを作成または編集する場合、許容値リストに含まれる値は、特定のアセット・タイプ/コンプライアンス・テンプレート用に定義されたメタデータ要素のオプションとして使用します。許容値リストの許容値を使用するには、アセット(Asset.GetCustomData())のカスタム・データを変更して、許容値のIDを参照します。

15.2 ユースケース

この項では、許容値リストAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 15.2.1項「ユースケース: 許容値リストの作成および編集」

- 15.2.2項「ユースケース: 許容値リストの検索およびアセットでの使用」

15.2.1 ユースケース: 許容値リストの作成および編集

説明

新しい許容値リストを作成し、これをOracle Enterprise Repositoryに入力します。

サンプル・コード

例15-1 ユースケース: 許容値リストの作成および編集

package com.flashline.sample.acceptablevaluelists;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AcceptableValue;
import com.flashline.registry.openapi.entity.AcceptableValueList;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateAndEditAcceptableValueList {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Build an array of acceptable values for the list.
// //////////////////////////////
String newAcceptableValueListName = "My AcceptableValueList
"+Calendar.getInstance().getTimeInMillis();
AcceptableValue[] acceptableValues = new AcceptableValue[3];
acceptableValues[0] = new AcceptableValue();
acceptableValues[0].setValue("My Value");
acceptableValues[1] = new AcceptableValue();
acceptableValues[1].setValue("My Next Value");
acceptableValues[2] = new AcceptableValue();
acceptableValues[2].setValue("My Last Value");
// //////////////////////////////
// Create the AcceptableValueList in Repository
// //////////////////////////////
AcceptableValueList newAcceptableValueList = repository
.acceptableValueListCreate(authToken, newAcceptableValueListName,
acceptableValues);
System.out.println("The new acceptableValueList id  =\""
+ newAcceptableValueList.getID() + "\"");
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

15.2.2 ユースケース: 許容値リストの検索およびアセットでの使用

説明

アセットの単一または複数の選択リストに許容値を移入します。

サンプル・コード

例15-2 ユースケース: リストへの許容値の移入

package com.flashline.sample.acceptablevaluelists;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AcceptableValue;
import com.flashline.registry.openapi.entity.AcceptableValueList;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AcceptableValueListCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class FindAcceptableValueListAndUseInAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Find the AcceptableValueList
// //////////////////////////////
AcceptableValueListCriteria criteria = new AcceptableValueListCriteria();
criteria.setNameCriteria("My AcceptableValueList");
AcceptableValueList[] acceptableValueLists = repository
.acceptableValueListQuery(authToken, criteria);
AcceptableValueList myAcceptableValueList = acceptableValueLists[0];
AcceptableValue[] acceptableValues = myAcceptableValueList
.getAcceptableValues();
// //////////////////////////////
// Find one value within the AcceptableValueList
// //////////////////////////////
AcceptableValue myAcceptableValue = null;
for (int i = 0; i < acceptableValues.length; i++) {
if (acceptableValues[i].getValue().equals("My Value")) {
myAcceptableValue = acceptableValues[i];
break;
}
}
long myAcceptableValueID = myAcceptableValue.getID();
Asset myAsset = repository.assetRead(authToken, 561);
String customData = myAsset.getCustomData();
// //////////////////////////////
// Modify customData to use myAcceptableValueID.
// //////////////////////////////
String modifiedCustomData = customData;
// ...
// //////////////////////////////
// save modified custom data
// //////////////////////////////
myAsset.setCustomData(modifiedCustomData);
repository.assetUpdate(authToken, myAsset);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16 アセットAPI

この章では、アセットAPIについて説明し、アセットAPIのユースケースを示します。このユースケースで、アセットの作成または変更、アセットの検索の作成、およびアセット・ステータスとアセット・タブの操作を行う方法について解説します。

この章では、次の項目について説明します。

- 16.1項「概要」

- 16.2項「ユースケース」

16.1 概要

アセットは、Oracle Enterprise Repositoryのコア・エンティティです。このドキュメントには、アセット・サブシステムのアクションの作成、読込み、更新、削除および問合せについて記述されています。また、次の項目の更新についても記述されています。

- アセットのアクティブ・ステータス:

- アクティブ化

- 非アクティブ化

- リタイア

- アセットの登録ステータス:

- 発行

- 許可

- 登録

- 未発行

- 未許可

- 登録解除

- アセットの割当てステータス:

- 割当て

- 未割当て

REXを使用してOracle Enterprise Repositoryのアセットを操作する場合、いくつかの問題を考慮する必要があります。メモリー消費におけるトレードオフとパフォーマンスについて、よく検討する必要があります。

- メモリーの消費
アセットおよびそのメタデータは、REXサーバーとREXを使用するクライアント・ソフトウェアの両方で、かなりの量のメモリーを消費します。REXを使用してOracle Enterprise Repositoryを検索する場合、多数のアセットが返される可能性があります。サービス拒否によるシステムの中断を回避するために、管理者は、REXメソッドのassetQueryのコールで返される結果の最大数を制限します。システム設定のcmee.extframework.assets.maxでは、問合せの結果として返される検索結果の最大数を制御します。問合せに一致する結果の数が最大数を超えると、REXによって例外が生成されます。

多数のアセットが問合せに一致する可能性がある場合、assetQuerySummaryメソッドをお薦めします。Oracle Enterprise Repositoryに問合せを実行する別の方法では、assetQueryへのコールとして同じアセットと完全一致させますが、完全なアセット・オブジェクトではなく、軽量アセット・サマリー・オブジェクトを返します。これらのサマリー・オブジェクトのメモリーの消費量は少ないので、問合せの結果としてリソースを使い果す可能性はほとんどありません。

サマリー問合せが実行された後、assetReadまたはassetReadArrayFromSummaryのいずれかを使用して、完全なアセット・オブジェクトを対象アセットのために取得できます。複数のアセットが必要な場合、assetReadArrayFromSummaryメソッドを使用することをお薦めします。このメソッドの使用方法の詳細は、APIのドキュメントを参照してください。

- パフォーマンス
REXは、標準的なWebサービス・テクノロジに基づいており、柔軟性と移植性において多数の利点があります。ただし、あらゆるWebサービスに基づいたテクノロジと同様に、特にデータ量が多い状況(多数のアセットを操作する場合など)で、パフォーマンスがあまりよくないことがあります。REXでは、想定されるパフォーマンスの問題を開発者が回避できるオプションがあります。

- 反復する読込み
Webサービス・テクノロジの主なオーバーヘッドは、ネットワーク転送と組み合せた、XMLを使用するシリアライズとデシリアライズで起こります。このようなオーバーヘッドの多くは、多数のアセットが読み込まれる状況で回避できます。たとえば、REXを使用して、50個のアセットをOracle Enterprise Repositoryから取得する場合、assetReadが50回コールされます。よりよい方法として、必要なアセットのIDを単一の引数として渡す、assetReadArrayメソッドを使用する方法を採用するとします。これを使用すると、1回のコールですべての50個のアセットが取得されるので、パフォーマンスがかなり向上します。

- リスト表示操作
エンドユーザーにリスト表示するために、REXからデータを取得することがあります。この場合、アセットをよく検査して選択する必要があります。このような場合、完全なアセット・メタデータは、サマリー・リストの生成に必要ありません。前述のメモリーに関する項で説明したとおり、REXで提供されたサマリー・メソッドを使用することを検討してください。

- アクセス制御

- REXのユーザーに表示されるアセットおよびこれらのアセットの情報は、アクセス設定によって、ある程度制御されます。Web GUIを介してシステムにアクセスするユーザーのために存在する、同様のアクセス制限もREXアセット・サブシステムに適用されます。

- 問合せの制限: assetQueryまたはassetReadをコールする場合、ユーザーが取得できるのは、表示権限のあるアセットのみです。

- 更新の制限: ユーザーが更新できるのは、編集権限のあるアセットのみです。

- ファイルの制限: ユーザーが表示できるのは、各ファイルに適用済のファイル・タイプのカスタム・アクセス設定で設定されているように、ダウンロード権限のあるファイルのみです。つまり、ユーザーはアセットを表示できますが、アセットのファイルの中には表示できないものもあるということです。各ファイルには、アセットの権限とは別に、そのファイル用の権限があります。特定のファイル・タイプの権限がファイルに適用されていない場合、これらの権限はそのファイルが属するアセットの権限から継承されます。

16.1.1 定義

この項では、次の項目の定義について説明します。

- IDおよびUUID

- IDは、単一のOracle Enterprise Repositoryインスタンス内でアセットを一意に特定するために内部で使用される一意の識別子(数値)です。

- UUIDは、Oracle Enterprise Repositoryのインスタンスで一意にアセットを特定するためにユニバーサルに使用される識別子(16進数で表される128ビットの数値)です。各アセットのUUIDは、主に読込みと検索用に表示されます。REXを使用してこのフィールドを変更しないことを強くお薦めします。ただし、管理者がアセットのUUIDを変更することを選択した場合、フォーマットは一貫している必要があります(00000000-0000-0000-0000-000000000000)。また、UUIDは、ターゲットのOracle Enterprise Repositoryインスタンス内で一意である必要があります。これ以外の場合、変更操作は失敗します。

- 名前およびバージョン
アセットを一意に特定するために結合した文字列のフィールド。

- カスタム・データ
アセットのカスタマイズ可能なメタデータは、この文字列内にXML構造で保存されています。サンプル・コードでは、カスタム・データ・メソッドを記述しています。

16.1.2 サンプル・コード

例16-1 カスタム・データ・メソッドのサンプル・コード

package com.flashline.sample.assetapi;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.xml.rpc.ServiceException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateCustomData {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException, ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
////////////////////////////////////////////////////////////
// Login to OER
////////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
//////////////////////////////////////////
// assetUpdateCustomDataString
//////////////////////////////////////////
// Find and Modify a custom data field value with a value supplied on the
command line
Long currentLicenses = new
Long(repository.assetReadCustomDataString(authToken, 589, "/
_-total-licenses-owned"));
currentLicenses = new Long(currentLicenses.intValue() + 1);
//    save the modifications
//  NOTICE: A leading slash is required to specify the appropriate path to
the element being updated.
repository.assetUpdateCustomDataString(authToken, 589, "/
_-total-licenses-owned", currentLicenses.toString());
//////////////////////////////////////////
// assetUpdateCustomDataStringArray
//////////////////////////////////////////
// Add a custom data field value with a value supplied on the command line
Format formatter = new SimpleDateFormat("yyyyMMdd");
String dateFormat = formatter.format(new Date());
// NOTICE: for the following method, there is no leading slash for the
elements being updated.
String[] versionHistory = {"version-history/version-history/version-number",
"version-history/version-history/production-date-yyyymmdd-",
"version-history/version-history/comments"};
String[] versionHistoryValues = {currentLicenses.toString(), dateFormat,
"Updated version History: " + dateFormat};
//    save the modifications
repository.assetUpdateCustomDataStringArray(authToken, 589, versionHistory,
versionHistoryValues);
//////////////////////////////////////////
// assetUpdateCustomDataNode
//////////////////////////////////////////
//The following updates a specific custom data element called
"document-name" that is a child of "document",
//which is a child of "documentation"
XPath lXPath = null;
List lElms = null;
//First read the Node "documentation" of the specific asset
String lXMLDocumentation = repository.assetReadCustomDataNode(authToken,
589, "documentation");
//Using DOM, convert the XML to a Document
Document lDoc = null;
SAXBuilder lBuilder = new SAXBuilder();
StringReader lReader = null;
lReader = new StringReader(lXMLDocumentation);
lBuilder.setValidation(false);
lBuilder.setIgnoringElementContentWhitespace(true);
lDoc = lBuilder.build(lReader);
lXPath = XPath.newInstance("documentation/document");
lElms = lXPath.selectNodes(lDoc);
//Cycle through the "document" elements until we find the one we want.  Then
update it.
for (int i=0;i<lElms.size();i++) {
Element lElm = (Element)lElms.get(i);
List lChildElms = lElm.getChildElements();
for (int x=0;x<lChildElms.size();x++) {
Element lChildElm = (Element)lChildElms.get(x);
if (lChildElm.getName().equals("document-name") &&
lChildElm.getValue().equals("API")) {
lChildElm.setText("API KHAN");
} else {
lChildElm.setText(lChildElm.getValue());
}
}
}
//Convert the Document back to an XML string and update the asset's custom
data.
repository.assetUpdateCustomDataNode(authToken, 589, "documentation", new
XMLOutputter().outputString(lDoc));
//////////////////////////////////////////
// assetUpdateCustomDataNodeArray
//////////////////////////////////////////
try {
//The following updates multiple custom data elements.  One is called
"document-name" that is a child of "document",
//which is a child of "documentation"
//The other is the element called "also-known-as"
lXPath = null;
lElms = null;
//First read the Node "documentation" of the specific asset
lXMLDocumentation = repository.assetReadCustomDataNode(authToken, 589,
"documentation");
//Using DOM, convert the XML to a Document
lDoc = null;
lBuilder = new SAXBuilder();
lReader = null;
lReader = new StringReader(lXMLDocumentation);
lBuilder.setValidation(false);
lBuilder.setIgnoringElementContentWhitespace(true);
lDoc = lBuilder.build(lReader);
lXPath = XPath.newInstance("documentation/document");
lElms = lXPath.selectNodes(lDoc);
//Cycle through the "document" elements until we find the one we want.
Then update it.
for (int i=0;i<lElms.size();i++) {
Element lElm = (Element)lElms.get(i);
List lChildElms = lElm.getChildElements();
for (int x=0;x<lChildElms.size();x++) {
Element lChildElm = (Element)lChildElms.get(x);
if (lChildElm.getName().equals("document-name") &&
lChildElm.getValue().equals("API")) {
lChildElm.setText("API KHAN");
} else {
lChildElm.setText(lChildElm.getValue());
}
}
}
String lDoc1 = new XMLOutputter().outputString(lDoc);
//Get the next element
lXMLDocumentation = repository.assetReadCustomDataNode(authToken, 589,
"also-known-as");
lDoc = null;
lBuilder = new SAXBuilder();
lReader = null;
lReader = new StringReader(lXMLDocumentation);
lBuilder.setValidation(false);
lBuilder.setIgnoringElementContentWhitespace(true);
lDoc = lBuilder.build(lReader);
lXPath = XPath.newInstance("also-known-as");
lElms = lXPath.selectNodes(lDoc);
//Get the also-known-as element
for (int i=0;i<lElms.size();i++) {
Element lElm = (Element)lElms.get(i);
lElm.setText("Modified Alias");
}
String lDoc2 = new XMLOutputter().outputString(lDoc);
//Convert the Document back to an XML string and update the asset's custom
data.
repository.assetUpdateCustomDataNodeFromStringArray(authToken, 589, new
String[] {"documentation", "also-known-as"}, new String[] {lDoc1, lDoc2});
} catch (Exception e) {
e.printStackTrace();
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}

16.1.3 関連するサブシステム

この項では、アセットAPIで使用される次の関連サブシステムについて説明します。

- アセット・タイプ
すべてのアセットには、アクティブで有効なアセット・タイプが必要です。このアセット・タイプは、アセット用のカスタム・データに保存できるメタデータを定義します。

- ベンダー
必要に応じて、アセットをベンダーにリンクできます。リンクはベンダーID別に行います。

- 許容値
アセットを作成または編集する場合、許容値リストに含まれる許容値は、アセット・タイプ用に定義されたメタデータ要素のオプションとして使用します。許容値リストの許容値を使用するには、アセット(Asset.GetCustomData())のカスタム・データを変更して、許容値のIDを参照します。

- リレーションシップ・タイプ
リレーションシップ・タイプは、アセット間に存在できるリレーションシップの種類を定義します。

- カテゴリ分けタイプ
カテゴリ分けタイプは、アセット・タイプに追加された最上位レベルのグループのカテゴリ分けです。カテゴリ分けは、アセットを記述します。

- プロジェクト
アセットは、プロジェクト別に作成できます。アセット用にプロジェクトを作成すると、IDの配列で格納されます。

- ユーザー
ユーザーはアセットに割り当てることができます。メタデータの操作の担当者です。

16.2 ユースケース

この項では、アセットAPIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 16.2.1項「ユースケース: 新しいアセットの作成」

- 16.2.2項「ユースケース: XMLからの新しいアセットの作成」

- 16.2.3項「ユースケース: アセットの変更」

- 16.2.4項「ユースケース: アセットへのユーザーの割当て」

- 16.2.5項「ユースケース: アセットの検索の作成」

- 16.2.6項「ユースケース: アセット・ステータスのアップグレード」

- 16.2.7項「ユースケース: アセット・ステータスのダウングレード」

- 16.2.8項「ユースケース: プロジェクトからのコンプライアンス・テンプレートの適用と削除」

- 16.2.9項「ユースケース: 新しいバージョンのアセットの作成および古いバージョンのリタイア」

- 16.2.10項「ユースケース: アセットのグループの削除」

- 16.2.11項「ユースケース: アセットの検索およびカスタム・データのアップグレード」

- 16.2.12項「ユースケース: アセットのタブの読込み」

- 16.2.13項「ユースケース: タブ・タイプに基づいたアセットのタブの取得」

- 16.2.14項「ユースケース: タブの承認および未承認」

- 16.2.15項「ユースケース: 特定のタブ用のアセットのメタデータの読込み」

16.2.1 ユースケース: 新しいアセットの作成

説明

新しいアセットを作成し、これをOracle Enterprise Repositoryに入力します。

サンプル・コード

例16-2 ユースケース: 新しいアセットの作成

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
///////////////////////////////////
// Create new asset
///////////////////////////////////
Asset myAsset = repository.assetCreate(authToken,
"My Asset Name108", "My Version
"+Calendar.getInstance().getTimeInMillis(), 144);
////////////////////////////////////////////
//The following demonstrates how to modify a custom data Date element on an
asset.
//This date must be in a specific format and the name of the element must by
known.
//In this example, the name of the element is "testdate".  This element must
have been created in the
//asset type as a Date element
//Update the testdate field to January 1, 2007
//Note: the format of the date should match the system setting for Short
Date.
repository.assetUpdateCustomDataString(authToken, myAsset.getID(),
"testdate", "2007-1-1");
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.2 ユースケース: XMLからの新しいアセットの作成

説明

アセットのXML表現から新しいアセットを作成することもできます。スキーマを使用してアセットのXMLを検証してから、作成します。アセット・タイプのスキーマは、例16-3に示されているように、オープンAPIで使用できます。

個別に検証を実行する必要はありません。作成の前に、アセットのXMLが内部で検証されるためです。個別に検証を実行する場合、Xerces 2.0などの検証用のXMLパーサーを見つける必要があります。

サンプル・コード

例16-3 ユースケース: XMLからの新しいアセットの作成

package com.flashline.sample.assetapi;
import java.io.IOException;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.rpc.ServiceException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewAssetFromXML {
public static void main(String pArgs[]) throws ServiceException,
ParserConfigurationException, SAXException, IOException {
String SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
SAXParserFactory lSaxParserFactory = null;
SAXParser lSaxParser = null;
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
// Anonymous class to handle validation errors
DefaultHandler lDefaultHandler = new DefaultHandler() {
public void error(SAXParseException exception) throws SAXException {
throw exception;
}
public void fatalError(SAXParseException exception) throws SAXException {
throw exception;
}
};
//////////////////////////////////////////////////////////////////////
// Define the asset you want to create in XML
//////////////////////////////////////////////////////////////////////
// This is the XML of the asset we're creating. Typically it would
// come from a GUI or other asset creation mechanism. It is hard
// coded for this example.
/////////////////////////////////////////////////////////////////////
String assetXML = "<asset id=\"0\">"
+ "           <asset-type id=\"145\" icon=\"component.gif\"
lastSavedDate=\"17 Jul 2007 12:00:00 AM\">Component</asset-type>"
+ "           <mandatory-data>"
+ "               <name>NewComponent</name>"
+ "
<version>"+Calendar.getInstance().getTimeInMillis()+"</version>"
+ "               <description><![CDATA[My Description]]></description>"
+ "               <keywords/>"
+ "               <notification-email/>"
+ "               <applied-policies/>"
+ "               <vendor id=\"0\"/>"
+ "               <file-informations/>"
+ "               <hash-informations/>"
+ "               <producing-projects/>"
+ "               <submission-files/>"
+ "               <applied-compliance-templates/>"
+ "               <contacts/>"
+ "               <relationships/>"
+ "               <categorization-types/>"
+ "           </mandatory-data>"
+ "           <admin-data>"
+ "           </admin-data>"
+ "       </asset>";
//////////////////////////////////////////////////////////////////////
// This returns the Schema for the asset type of the asset we're
// creating
//////////////////////////////////////////////////////////////////////
String schema = repository.assetTypeSchemaRead(authToken, 144);
//////////////////////////////////////////////////////////////////////
// This block of code shows validating the asset XML against
// the schema
//////////////////////////////////////////////////////////////////////
lSaxParserFactory = SAXParserFactory.newInstance();
lSaxParserFactory.setNamespaceAware(true);
lSaxParserFactory.setValidating(true);
lSaxParser = lSaxParserFactory.newSAXParser();
lSaxParser.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
lSaxParser.setProperty(SCHEMA_SOURCE, new InputSource(new StringReader(
schema)));
lSaxParser.parse(new InputSource(new StringReader(assetXML)),
lDefaultHandler);
//////////////////////////////////////////////////////////////////////
// If no exception was thrown the asset XML validates and
// the creation should not fail due to XML formatting errors.
//////////////////////////////////////////////////////////////////////
repository.assetCreateFromXML(authToken, assetXML);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.3 ユースケース: アセットの変更

説明

既存のアセットのメタデータを変更します。

サンプル・コード

例16-4 ユースケース: アセットの変更

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Categorization;
import com.flashline.registry.openapi.entity.CategorizationType;
import com.flashline.registry.openapi.query.CategorizationTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ModifyExistingAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
////////////////////////////////////////////////////////////
// Login to OER
////////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
////////////////////////////////////////////////////////////
// Read the asset you want to modify
////////////////////////////////////////////////////////////
Asset myAsset = repository.assetRead(authToken, 559);
// 559 is the example asset number
////////////////////////////////////////////////////////////
// Modify the name, version, description, and notification
// email
////////////////////////////////////////////////////////////
myAsset.setName("New Name");
myAsset.setVersion("New Version");
myAsset.setDescription("New Description");
myAsset.setNotificationEmail("user@example.com");
////////////////////////////////////////////////////////////
// Modify Categorizations on the asset
////////////////////////////////////////////////////////////
// Setup arrays used for assigning categorizations
CategorizationType[] lAllCatTypes = null;
Categorization[] lAllCats = null;
CategorizationType[] lCatTypes = new CategorizationType[1];
Categorization[] lCats = new Categorization[1];
////////////////////////////////////////////////////////////
// Search for all categorizations that are asset assignable
////////////////////////////////////////////////////////////
CategorizationTypeCriteria categorizationTypeCriteria = new
CategorizationTypeCriteria();
categorizationTypeCriteria.setNameCriteria("");
lAllCatTypes = repository.categorizationTypeQuery(authToken,
categorizationTypeCriteria);
////////////////////////////////////////////////////////////
// Find all the categorizations to be assigned to the asset
////////////////////////////////////////////////////////////
for (int i = 0; i < lAllCatTypes.length; i++) {
CategorizationType lCatType = repository.categorizationTypeRead(
authToken, lAllCatTypes[i].getID());
lAllCats = repository.categorizationReadByType(authToken,
lCatType, true, true);
if (lAllCats.length > 0) {
lCatTypes[0] = lCatType;
// when we find the first one, use it
break;
}
}
lCats[0] = lAllCats[0];
////////////////////////////////////////////////////////////
// Modify the asset to use the categorizations
////////////////////////////////////////////////////////////
myAsset.setCategorizations(lCats);
myAsset.setCategorizationTypes(lCatTypes);
////////////////////////////////////////////////////////////
// Modify the custom access settings for the asset
////////////////////////////////////////////////////////////
String[] lCasTypes = repository.customAccessSettingTypesGet(authToken);
String[] lCustomAccessSettings = null;
if (lCasTypes!=null && lCasTypes.length>0) {
lCustomAccessSettings = repository.customAccessSettingNamesGet(authToken,
lCasTypes[0]);
}
if (lCustomAccessSettings!=null && lCustomAccessSettings.length>0) {
String[] myCustomAccessSettings = { lCustomAccessSettings[0] };
myAsset.setCustomAccessSettings(myCustomAccessSettings);
}
////////////////////////////////////////////////////////////
// Add producing projects to the asset
////////////////////////////////////////////////////////////
long[] producingProjectsIDs = new long[1];
producingProjectsIDs[0] = 50000;
myAsset.setProducingProjectsIDs(producingProjectsIDs);
////////////////////////////////////////////////////////////
// save the modifications
////////////////////////////////////////////////////////////
repository.assetUpdate(authToken, myAsset);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.4 ユースケース: アセットへのユーザーの割当て

説明

複数のユーザーを1つのアセットに割り当てることができます。

サンプル・コード

例16-5 ユースケース: アセットへのユーザーの割当て

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssignedUser;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.query.UserCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AssignUsers {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
//////////////////////////////////////////////////////////
// Login to OER
//////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
//////////////////////////////////////////////////////////
// Retrieve desired asset
//////////////////////////////////////////////////////////
Asset myAsset = repository.assetRead(authToken, 559);
// 559 is the example asset number
//////////////////////////////////////////////////////////
// Create array of AssignedUser objects
//////////////////////////////////////////////////////////
AssignedUser[] lUsers = new AssignedUser[3];
//////////////////////////////////////////////////////////
// NOTE:
//
// The AssignedUser object has two methods:
// setUserID(long)
// setAssignedDate(Calendar).
// (Specifies the date the user was assigned to the
// asset. If no date is specified, the current date
// is used.)
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// Add AssignedUser objects to the array
//////////////////////////////////////////////////////////
AssignedUser lUser = new AssignedUser();
lUser.setUserID(99); // 99 is the admin user id
lUsers[0] = lUser;
lUser = new AssignedUser();
RegistryUser lRegistryUser1 = createRegistryUser(repository, authToken);
lUser.setUserID(lRegistryUser1.getID());
lUsers[1] = lUser;
lUser = new AssignedUser();
RegistryUser lRegistryUser2 = createRegistryUser(repository, authToken);
lUser.setUserID(lRegistryUser2.getID());
lUsers[2] = lUser;
//////////////////////////////////////////////////////////
// Add array to the asset that is being updated
//////////////////////////////////////////////////////////
myAsset.setAssignedUsers(lUsers);
//////////////////////////////////////////////////////////
// save the modifications
//////////////////////////////////////////////////////////
repository.assetUpdate(authToken, myAsset);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static RegistryUser createRegistryUser(FlashlineRegistry repository,
AuthToken authToken) throws OpenAPIException, RemoteException {
RegistryUser lRet = null;
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
lRet = repository.userCreate(authToken, lUserName, "", lUserName,
lUserName+"@example.com", lUserName, false, false, false);
return lRet;
}
}

16.2.5 ユースケース: アセットの検索の作成

説明

特定の条件を満たすアセットをすべて検索します。

サンプル・コード

例16-6 ユースケース: アセットの検索の作成

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetSummary;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.DateRangeSearchTerm;
import com.flashline.registry.openapi.query.SearchTerm;
import com.flashline.registry.openapi.query.TabStatusSearchTerm;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class FindAssets {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
////////////////////////////////////////////////////////////
// Login to OER
////////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
////////////////////////////////////////////////////////////
// Search for all assets
////////////////////////////////////////////////////////////
AssetCriteria criteria = new AssetCriteria();
AssetSummary[] assets = repository.assetQuerySummary(authToken, criteria);
////////////////////////////////////////////////////////////
// try a general search which includes Name, version,
// description, and keywords
////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
criteria.setGeneralCriteria("My Asset");
assets = repository.assetQuerySummary(authToken, criteria);
////////////////////////////////////////////////////////////
// Search for assets that contain a specific search string
// in one particular field.
////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
criteria.setNameCriteria("My Name");
criteria.setVersionCriteria("My version");
criteria.setDescriptionCriteria("My Description");
assets = repository.assetQuerySummary(authToken, criteria);
////////////////////////////////////////////////////////////
// Implementing a Search through the AssetCriteria Object
// --------------------------------------------------
// If no operator is specified when implementing a search
// using the setSearchTerms method in the AssetCriteria
// object, the system defaults to the operator EQUALS.
// The operator LIKE must be specified if required for the
// search.
////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
SearchTerm lSearchTerm = new SearchTerm();
lSearchTerm.setKey("name");
lSearchTerm.setOperator("LIKE");
lSearchTerm.setValue("Test");
SearchTerm[] lTerms = new SearchTerm[1];
lTerms[0] = lSearchTerm;
criteria.setSearchTerms(lTerms);
assets = repository.assetQuerySummary(authToken, criteria);
//Search for assets where a specific DATETIME field is a given age
//////////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
//Not specifying an operator defaults to 'equals'.
DateRangeSearchTerm lTerm = new DateRangeSearchTerm();
/////////////////////////
//date-range is the query key.  registereddate is the date field we are
searching on
//Allowable fields to search on:
//submitteddate
//registereddate
//accepteddate
//createddate
//updateddate
//To do a search for all assets that were registered more than 5 days ago
lTerm.setKey("date-range");
//Set the value to a day 5 days older than the current date.  Assume today's
date is 1/10/2007
//The format defaults to OER's system setting for Short Date Format.
//The format can be set to any valid date format using setDateFormat() and
passing the date format.
lTerm.setDateFormat("yyyy-MM-dd");
lTerm.setBeginDate("2007-1-5");
lTerm.setBeginOperator("lt");
lTerm.setDateField("registereddate");
lTerms = new SearchTerm[1];
lTerms[0] = lTerm;
criteria.setSearchTerms(lTerms);
assets = repository.assetQuerySummary(authToken, criteria);
//Search for assets where a given date field is within a date range
//////////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
lTerm = new DateRangeSearchTerm();
/////////////////////////
//date-range is the query key.  registereddate is the date field we are
searching on
//Allowable fields to search on:
//submitteddate
//registereddate
//accepteddate
//createddate
//updateddate
//The following SearchTerm translates to "Assets where the registereddate is
greater than or equal to Jan. 1, 2007
lTerm.setKey("date-range");
//The format defaults to OER's system setting for Short Date Format.
//The format can be set to any valid date format using setDateFormat() and
passing the date format.
lTerm.setDateField("registereddate");
lTerm.setDateFormat("yyyy-MM-yy");
lTerm.setBeginDate("2007-01-01");
lTerm.setBeginOperator("gte");
lTerm.setEndDate("2007-01-10");
lTerm.setEndOperator("lte");
//The following SearchTerm translates to "Assets where the registereddate is
less than or equal to Jan. 10, 2007
criteria.setSearchTerms(new SearchTerm[] {lTerm});
//This query returns all assets that were registered between January 1 and
January 10, including those days.
assets = repository.assetQuerySummary(authToken, criteria);
//Search for assets where a given tab has been approved or unapproved
//////////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
TabStatusSearchTerm lTabTerm = new TabStatusSearchTerm();
//tabstatus is the type of search we want to do.  overview is the name of
the tab we want to search on
lTabTerm.setKey("tabstatus");
lTabTerm.setTabNames(new String[] {"overview"});
lTabTerm.setApproved(true);
criteria.setSearchTerms(new SearchTerm[] {lTabTerm});
//This query returns all assets with the Overview tab being approved
assets = repository.assetQuerySummary(authToken, criteria);
//You may also search by a date range.
lTabTerm.setKey("tabstatus");
lTabTerm.setTabNames(new String[] {"overview"});
lTabTerm.setApproved(false);
lTabTerm.setBeginDate("2007-1-01");
lTabTerm.setBeginOperator("lte");
criteria.setSearchTerms(new SearchTerm[] {lTabTerm});
//The following returns all assets that have the Overview tab unapproved
since or before January 1, 2007
assets = repository.assetQuerySummary(authToken, criteria);
//Search for assets where a custom field date has a specific value.
//This test returns all assets that have a testdate of January 1, 2007.
//The testdate field is a custom data date element.
//////////////////////////////////////////////////////////////////
criteria = new AssetCriteria();
DateRangeSearchTerm lDateRangeTerm = new DateRangeSearchTerm();
//Test Equals
lDateRangeTerm.setKey("/asset/custom-data/testdate");
lDateRangeTerm.setBeginDate("2007-01-1");
lDateRangeTerm.setBeginOperator("eq");
criteria.setSearchTerms(new SearchTerm[] {lDateRangeTerm});
assets = repository.assetQuerySummary(authToken, criteria);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.6 ユースケース: アセット・ステータスのアップグレード

説明

アセットのステータス・レベルを未発行から、発行済、承認済、登録済に変更します。

サンプル・コード

例16-7 ユースケース: アセット・ステータスのアップグレード

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.KeyValuePair;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class PromoteAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
long lAssetID = 559;
// -------------------------------------------------------
// asset with id 559 would have to be unsubmitted for this to work
AssetCriteria lAssetCriteria = new AssetCriteria();
lAssetCriteria.setIDCriteria(lAssetID);
KeyValuePair lKeyValuePair = repository.assetEvaluate(authToken,
lAssetCriteria, "Registration Status");
if (!lKeyValuePair.getValue().equalsIgnoreCase("unsubmitted")) {
unregisterAsset(repository, authToken, lAssetID);
}
///////////////////////////////////////////////////////////
// promote the asset from unsubmitted to submitted
///////////////////////////////////////////////////////////
repository.assetSubmit(authToken, lAssetID);
// asset 559 would have to be unsubmitted for this to work
///////////////////////////////////////////////////////////
// promote the asset from submitted to accepted
///////////////////////////////////////////////////////////
repository.assetAccept(authToken, lAssetID);
// asset 561 would have to be submitted for this to work
///////////////////////////////////////////////////////////
// promote the asset from accepted to registered
///////////////////////////////////////////////////////////
repository.assetRegister(authToken, lAssetID);
// asset 563 would have to be accepted for this to work
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static void unregisterAsset(FlashlineRegistry repository, AuthToken
authToken, long pAssetID) {
try {
repository.assetUnRegister(authToken, pAssetID);
} catch (Exception e) {
}
try {
repository.assetUnAccept(authToken, pAssetID);
} catch (Exception e) {
}
try {
repository.assetUnSubmit(authToken, pAssetID);
} catch (Exception e) {
}
}
}

16.2.7 ユースケース: アセット・ステータスのダウングレード

説明

前述のユースケースとは反対に、アセットのステータス・レベルを登録済から、承認済、発行済、未発行に変更します。

サンプル・コード

例16-8 ユースケース: アセット・ステータスのダウングレード

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.KeyValuePair;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class DemoteAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
long lAssetID = 559;
// -------------------------------------------------------
// asset with id 559 would have to be registered for this to work
AssetCriteria lAssetCriteria = new AssetCriteria();
lAssetCriteria.setIDCriteria(lAssetID);
KeyValuePair lKeyValuePair = repository.assetEvaluate(authToken,
lAssetCriteria, "Registration Status");
if (!lKeyValuePair.getValue().equalsIgnoreCase("registered")) {
registerAsset(repository, authToken, lAssetID);
}
///////////////////////////////////////////////////////////
// demote the asset from registered to accepted
///////////////////////////////////////////////////////////
repository.assetUnRegister(authToken, lAssetID);
///////////////////////////////////////////////////////////
// demote the asset from accepted to submitted
///////////////////////////////////////////////////////////
repository.assetUnAccept(authToken, lAssetID);
///////////////////////////////////////////////////////////
// demote the asset from submitted to unsubmitted
///////////////////////////////////////////////////////////
repository.assetUnSubmit(authToken, lAssetID);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static void registerAsset(FlashlineRegistry repository, AuthToken
authToken, long pAssetID) {
try {
repository.assetSubmit(authToken, pAssetID);
} catch (Exception e) {
}
try {
repository.assetAccept(authToken, pAssetID);
} catch (Exception e) {
}
try {
repository.assetRegister(authToken, pAssetID);
} catch (Exception e) {
}
}
}

16.2.8 ユースケース: プロジェクトからのコンプライアンス・テンプレートの適用と削除

説明

コンプライアンス・テンプレートのプロジェクトへの追加およびプロジェクトからの削除を行うことができます。

注意:

アセットがプロジェクトに適用されていて、そのアセットがコンプライアンス・テンプレートでない場合、OpenAPIExceptionが発生します。

サンプル・コード

例16-9 ユースケース: プロジェクトからのコンプライアンス・テンプレートの適用および削除

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.AssetTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AddRemoveTemplate {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
URL lURL = null;
lURL = new URL(pArgs[0]);
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
///////////////////////////////////////////////////////////
// Read or Create a Compliance Template Type and Asset
///////////////////////////////////////////////////////////
AssetType ctType = null;
AssetTypeCriteria lAssetTypeCriteria = new AssetTypeCriteria();
lAssetTypeCriteria.setArcheTypeCriteria("Compliance Template Type");
AssetType[] lAssetTypes =
repository.assetTypeQuery(authToken, lAssetTypeCriteria);
if (lAssetTypes!=null && lAssetTypes.length>0) {
ctType = lAssetTypes[0];
} else {
ctType = repository.assetTypeCreateComplianceTemplate(authToken,
"My Compliance Template
Type"+Calendar.getInstance().getTimeInMillis());
}
Asset lComplianceTemplateAsset = null;
AssetCriteria lAssetCriteria = new AssetCriteria();
lAssetCriteria.setAssetTypeCriteria(ctType.getID());
Asset[] lAssets = repository.assetQuery(authToken, lAssetCriteria);
if (lAssets!=null && lAssets.length>0) {
lComplianceTemplateAsset = lAssets[0];
} else {
lComplianceTemplateAsset = repository.assetCreate(authToken, "My
Compliance Template",
""+Calendar.getInstance().getTimeInMillis(), ctType.getID());
}
///////////////////////////////////////////////////////////
// Create a String array of Project IDs that the Compliance
// Template is applied to.
///////////////////////////////////////////////////////////
String[] lProjectIDs = { "50000" };
// /////////////////////////////////////////////////////////
// Apply template to the projects.
// /////////////////////////////////////////////////////////
repository.assetApplyToProjects(authToken, lProjectIDs,
lComplianceTemplateAsset);
///////////////////////////////////////////////////////////
// Retrieve an array of Projects that this template is
// applied to.
///////////////////////////////////////////////////////////
Project[] lProjects = repository.assetReadAppliedToProjects(
authToken, lComplianceTemplateAsset);
String lMsg = "Compliance Template '" + lComplianceTemplateAsset.getName();
lMsg += "' applied to Project(s): ";
for (int i=0; lProjects!=null && i<lProjects.length; i++) {
lMsg += ""+lProjects[i].getName()+(i+1==lProjects.length ? "." : ", ");
}
System.out.println(lMsg);
///////////////////////////////////////////////////////////
// Create a String array of Project IDs that the Compliance
// Template is removed from.
///////////////////////////////////////////////////////////
String[] lRemoveProjectIDs = { "50000" };
///////////////////////////////////////////////////////////
// Remove template from the projects.
///////////////////////////////////////////////////////////
repository.assetRemoveAppliedToProjects(authToken,
lRemoveProjectIDs, lComplianceTemplateAsset);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.9 ユースケース: 新しいバージョンのアセットの作成および古いバージョンのリタイア

説明

リポジトリを更新して、新しいバージョンのアセットを使用できるようにし、以前のバージョンのアセットをリタイアします。

サンプル・コード

例16-10 ユースケース: 新しいバージョンのアセットの作成

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RelationshipType;
import com.flashline.registry.openapi.query.RelationshipTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewVersionOfAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
///////////////////////////////////////////////////////////
// Read old asset.
// Update metadata as necessary.
// Save as new asset.
///////////////////////////////////////////////////////////
Asset myAsset = repository.assetRead(authToken, 561);
///////////////////////////////////////////////////////////
// Find the "next-version" relationship for the asset
///////////////////////////////////////////////////////////
RelationshipType[] allRelationshipTypes =
getAllRelationshipTypes(repository, authToken);
for (int i = 0; i < allRelationshipTypes.length; i++) {
if (allRelationshipTypes[i].getName().equals("next-version")) {
///////////////////////////////////////////////////////////
// This is the relationship type, modify the assets that are related
// using it
///////////////////////////////////////////////////////////
RelationshipType myRelationshipType = allRelationshipTypes[i];
///////////////////////////////////////////////////////////
// Add the old version to list of previous versions of the
// newly created asset
///////////////////////////////////////////////////////////
long[] oldSecondaryIDs = myRelationshipType.getSecondaryIDs();
long[] newSecondaryIDs = new long[oldSecondaryIDs.length + 1];
for (int j = 0; j < oldSecondaryIDs.length; j++) {
newSecondaryIDs[j] = oldSecondaryIDs[j];
}
newSecondaryIDs[newSecondaryIDs.length - 1] = 561;
myRelationshipType.setSecondaryIDs(newSecondaryIDs);
}
}
Asset myNewAsset = repository.assetCreate(authToken,
myAsset.getName(), ""+Calendar.getInstance().getTimeInMillis(),
myAsset.getTypeID());
myNewAsset.setRelationshipTypes(allRelationshipTypes);
///////////////////////////////////////////////////////////
// Update the new asset
///////////////////////////////////////////////////////////
myNewAsset = repository.assetUpdate(authToken, myNewAsset);
///////////////////////////////////////////////////////////
// retire the old asset
///////////////////////////////////////////////////////////
repository.assetRetire(authToken, 561);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
/**
* This method returns every relationship type in the repository
* @param repository
* @param authToken
* @return
* @throws RemoteException
*/
public static RelationshipType[] getAllRelationshipTypes(FlashlineRegistry
repository, AuthToken authToken) throws RemoteException {
//Create an empty relationship type criteria object
RelationshipTypeCriteria criteria = new RelationshipTypeCriteria();
criteria.setNameCriteria("");
RelationshipType[] allRelationshipTypes =
repository.relationshipTypeQuery(authToken, criteria);
return allRelationshipTypes;
}
}

16.2.10 ユースケース: アセットのグループの削除

説明

リポジトリに属さないアセットのグループを削除します。

サンプル・コード

例16-11 ユースケース: リポジトリからの不要なアセットの削除

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class DeleteAssets {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
///////////////////////////////////////////////////////////
// find the assets to delete
///////////////////////////////////////////////////////////
AssetCriteria criteria = new AssetCriteria();
criteria.setGeneralCriteria("delete me");
Asset[] assets = repository.assetQuery(authToken, criteria);
///////////////////////////////////////////////////////////
// Iterate through assets, deleting them one at a time.
///////////////////////////////////////////////////////////
for (int i = 0; i < assets.length; i++) {
repository.assetDelete(authToken, assets[i].getID());
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

短所:

アセットは完全に削除されます。オープンAPIでは、削除したアセットをリストアするメソッドがありません。

回避するメソッド:

次のメソッドはオープンAPIのコンテキストでは意味がないので、使用しないでください。

- setAcceptedByID

- setAcceptedByName

- setAcceptedByDate

- setActiveStatus

- setAssigned

- setAssignedToID

- setAssignedDate

- setCategorizationTypes

- setCreatedByID

- setCreatedByName

- setCreatedByDate

- setDeleted

- setEntityType

- setExtractable

- setFullAsset

- setInactive

- setKey

- setLoadedDate

- setLongName

- setNotifyUpdatedRelationships

- setRegisteredByID

- setRegisteredByName

- setRegisteredDate

- setRegistrationStatus

- setRegistrationStatusBaseName

- setRegistrationStatusRegistered

- setRegistrationStatusRejected

- setRegistrationStatusSubmittedPendingReview

- setRegistrationStatusSubmittedUnderReview

- setRegistrationStatusUnsubmitted

- setRejectionReason

- setRetired

- setSubmittedByID

- setSubmittedByName

- setSubmittedDate

- setTypeIcon

- setTypeName

- setUpdatedDate

- setVendorName

- setVisible

一般的なミスの回避

- アセットのルール

- アセットは、アクティブで有効なアセット・タイプに割り当てる必要があります。

- アセットの名前/バージョンの文字列は一意のペアである必要があります。

- 新しいアセットのIDは0にする必要があります。

- 新しいアセットのアクティブなステータスはアクティブである必要があります。

提供されていない機能

- カスタム・データを変更するためのヘルパー・メソッド

- 追加の検証
アセットを保存する場合、Oracle Enterprise Repositoryでは、現在、次の内容を検証しています。

- アセット・タイプが有効でアクティブであること

- 名前/バージョンが一意であること

- アセットを作成する場合、アクティブなステータスが有効であること

- アセットを更新する場合、アセットがすでに存在すること

- コンタクトが重複していないこと

- カテゴリ分けが有効であること

- 今後のバージョンのリポジトリの検証内容

- カスタム・データが正しいフォーマットのXMLであること

- カスタム・データにはアセット・タイプに基づいて有効なXMLが含まれていること

16.2.11 ユースケース: アセットの検索およびカスタム・データのアップグレード

説明

特定のカスタム・データ値ですべてのアセットの検索を実行し、これらのアセットのそれぞれについてカスタム・データの一部を更新します。注意: assetUpdateCustomDataNodeメソッドを使用する場合、アセットは自動的に保存されます。

サンプル・コード

例16-12 ユースケース: アセットの検索およびカスタム・データのアップグレード

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetSummary;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.SearchTerm;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateAssetTestResults {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException, ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
///////////////////////////////////////////////////////////
// create a criteria object searching for all assets with a
// custom-data element for test-frequency equal to 'DAILY'
///////////////////////////////////////////////////////////
SearchTerm[] searchTermArray = new SearchTerm[1];
SearchTerm term = new SearchTerm();
term.setKey("/asset/custom-data/test-frequency");
term.setValue("DAILY");
searchTermArray[0] = term;
AssetCriteria criteria = new AssetCriteria();
criteria.setSearchTerms(searchTermArray);
///////////////////////////////////////////////////////////
// perform search, getting back summary objects. loop through
// objects and perform an action on each one
///////////////////////////////////////////////////////////
AssetSummary[] assets = repository.assetQuerySummary(authToken,
criteria);
///////////////////////////////////////////////////////////
// Loop through search results
///////////////////////////////////////////////////////////
for (int i = 0; i < assets.length; i++) {
long assetID = assets[i].getID();
String testResult = null;
///////////////////////////////////////////////////////////
// Update value in the asset
///////////////////////////////////////////////////////////
repository.assetUpdateCustomDataNode(
authToken, assetID, "/asset/custom-data/test-result", testResult);
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.12 ユースケース: アセットのタブの読込み

説明

アセットのタブを読み込みます。

サンプル・コード

例16-13 ユースケース: アセットのタブの読込み

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.TabBean;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AssetReadTabs {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
TabBean[] lTabBeans = null;
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
///////////////////////////////////
// read an asset's tabs
///////////////////////////////////
lTabBeans = repository.assetTabsRead(authToken, 559);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.13 ユースケース: タブ・タイプに基づいたアセットのタブの取得

説明

タブ・タイプ別に特定のアセット・タブを取得します。

サンプル・コード

例16-14 ユースケース: タブ・タイプに基づいたアセットのタブの取得

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.TabBean;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AssetGetTabByType {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
Asset lAsset = null;
TabBean lTabBean = null;
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
///////////////////////////////////
// read an asset
///////////////////////////////////
lAsset = repository.assetRead(authToken, 559);
///////////////////////////////////
// get an asset's tab by tabbeantype
///////////////////////////////////
lTabBean = repository.assetTabRead(authToken, lAsset.getID(), 458);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.14 ユースケース: タブの承認および未承認

説明

アセットのタブを承認するか、または未承認にします。

サンプル・コード

例16-15 ユースケース: タブの承認および未承認

package com.flashline.sample.assetapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;

public class ApproveUnapproveTab {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
///////////////////////////////////
// approve an asset tab
///////////////////////////////////
repository.assetTabApprove(authToken, 559, 1864);
///////////////////////////////////
// unapprove an asset tab
///////////////////////////////////
repository.assetTabUnapprove(authToken, 559, 1864);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

16.2.15 ユースケース: 特定のタブ用のアセットのメタデータの読込み

説明

特定のタブに基づいたアセットのメタデータを読み込みます。

サンプル・コード

例16-16 ユースケース: 特定のタブ用のアセットのメタデータの読込み

package com.flashline.sample.assetapi;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;

import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetMetadataElement;
import com.flashline.registry.openapi.entity.AssetMetadataTableElement;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;

public class AssetGetMetadataByTab {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {

///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
Asset lAsset = null;

///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);

///////////////////////////////////
// read an asset
///////////////////////////////////
lAsset = repository.assetRead(authToken, 589);

///////////////////////////////////
// Get the metadata elements based
// on the asset ID and the tab name
///////////////////////////////////
AssetMetadataElement[] lElements =
repository.assetReadTabMetadata(authToken, lAsset.getID(), "Overview");

//An AssetMetadataElement represents a custom or mandatory data element of an asset
for (AssetMetadataElement lElement : lElements) {
//This represents a TABLE element type
if (lElement.getValue() instanceof AssetMetadataTableElement) {
AssetMetadataTableElement lTable =
(AssetMetadataTableElement)lElement.getValue();
System.out.println(lElement.getDisplayName());
//A TABLE can have multiple elements
for (AssetMetadataElement lTableElement : lTable.getElements()) {
//An element of a TABLE can be another TABLE
if (lTableElement.getValue() instanceofAssetMetadataTableElement) {

System.out.println(((AssetMetadataTableElement)lTableElement.getValue()).getDisplayName());
for (AssetMetadataElement lChildElement :
((AssetMetadataTableElement)lTableElement.getValue()).getElements()) {
System.out.println(lChildElement.getDisplayName() + " : " +
lChildElement.getValue());
}
} else {
//Or an element of a TABLE can be a regular value
System.out.println(lTableElement.getDisplayName() + " : " +
lTableElement.getValue());
}
}
//This represents a MULTIPLE ITEM LIST
}  else if (lElement.getValue() instanceof String[]) {
System.out.println(lElement.getDisplayName());
for (String lString : (String[])lElement.getValue()) {
System.out.println(lString);
}
//This represents a SINGLE ITEM
} else {
System.out.println(lElement.getDisplayName() + " : " +
lElement.getValue());
}
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

17 アセット・タイプAPI

この章では、アセット・タイプAPIのユースケースについて説明します。このユースケースで、リポジトリへの新しいタイプの追加、新しいコンプライアンス・テンプレートのタイプの作成、タイプの特定、アセット・タイプで使用できるタブのリストの取得、およびOracle Enterprise Repository内でのすべてのアセット・タイプのタブの取得を行う方法について解説します。

この章では、次の項目について説明します。

- 17.1項「概要」

- 17.2項「ユースケース」

17.1 概要

タイプ(アセット・タイプおよびコンプライアンス・テンプレート)では、アセットの構造を定義します。タイプは、主に2つの部分から構成されます。

- エディタ
アセットのために格納されるメタデータを定義し、アセット・エディタでのメタデータ要素の編成方法を指定します。

- ビューア
Oracle Enterprise Repositoryにおけるアセット詳細でのメタデータ要素の表示方法を定義します。

タイプを作成または編集する場合、許容値リストとカテゴリ分けタイプはメタデータ要素として使用します。これらのメタデータ要素は、タイプのエディタおよびビューアXMLで、ID別に参照します。アセットを作成または編集する場合、タイプはアセット(Asset.GetCustomData())のカスタム・データで使用されるメタデータ要素を定義します。

注意:

- この項のコード例ではアセット・タイプを参照していますが、ユースケースで記述されたプロセスがアセット・タイプとコンプライアンス・テンプレートの両方を作成するために使用されることに注意してください。コンプライアンス・テンプレートの詳細は、Oracle Fusion Middleware Oracle Enterprise Repository構成ガイドを参照してください。

- エディタおよびビューアのメタデータは、CDATAをエスケープしたXMLとして表現されます。したがって、多数のアセット・タイプがassetTypeQueryのコールで返される場合、一部のXMLパーサーがエンティティの拡張の制限を超える可能性があります。一般的なパーサーでは、デフォルトのエンティティ拡張の制限が64,000に設定されているものがあります。この制限を超えた場合、コマンドライン・パラメータ(entityExpansionLimit)を渡して、この制限値をJAXP準拠のプロセッサ上で増加できます。たとえば、JVMに次のパラメータを渡すと、エンティティ拡張の制限が5MBに増加します。
java -DentityExpansionLimit=5242880 com.example.MyApp

17.2 ユースケース

この項では、AssetType APIを使用するユースケースについて説明します。内容は次のとおりです。

- 17.2.1項「ユースケース: 新しいタイプの作成および編集」

- 17.2.2項「ユースケース: コンプライアンス・テンプレート・タイプの作成」

- 17.2.3項「ユースケース: タイプの検索」

- 17.2.4項「ユースケース: アセット・タイプのタブの取得」

- 17.2.5項「ユースケース: すべてのアセット・タイプのタブの取得」

17.2.1 ユースケース: 新しいタイプの作成および編集

説明

新しいタイプをリポジトリに追加します。

サンプル・コード

例17-1 ユースケース: 新しいタイプの作成および編集

package com.flashline.sample.assettypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewAssetType {
public static void main(String pArgs[]) throws RemoteException,
OpenAPIException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Select an existing Type on which to base the new one
// //////////////////////////////
String newAssetTypeName = "My AssetType";
long baseAssetTypeID = 151;
AssetType newAssetType = repository.assetTypeCreateClone(
authToken, baseAssetTypeID, newAssetTypeName);
System.out.println("The new Asset Type id =\"" + newAssetType.getID()
+ "\"");
// //////////////////////////////
// Manipulate xml strings
// //////////////////////////////
String lEditorXML = newAssetType.getEditorXML();
String lViewerXML = newAssetType.getViewerXML();
// Perform XML manipulation on the editor and viewer definitions...
// //////////////////////////////
// Set the new editor/viewer definitions on the asset type, and save the
// type back to OER
// //////////////////////////////
newAssetType.setEditorXML(lEditorXML);
newAssetType.setViewerXML(lViewerXML);
repository.assetTypeUpdate(authToken, newAssetType);
// ----------------------------------------
// clean up sample
repository.assetTypeDelete(authToken, newAssetType.getID());
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

17.2.2 ユースケース: コンプライアンス・テンプレート・タイプの作成

説明

新しいコンプライアンス・テンプレートをリポジトリに追加します。

サンプル・コード

例17-2 ユースケース: コンプライアンス・テンプレート・タイプの作成

package com.flashline.sample.assettypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewComplianceTemplateType {
public static void main(String pArgs[]) throws RemoteException,
OpenAPIException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(
pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Create a new compliance template.
// //////////////////////////////
String newAssetTypeName = "My Compliance
Template"+Calendar.getInstance().getTimeInMillis();
AssetType newAssetType = repository
.assetTypeCreateComplianceTemplate(authToken, newAssetTypeName);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

17.2.3 ユースケース: タイプの検索

説明

リポジトリ内でタイプを検索します。

サンプル・コード

例17-3 ユースケース: タイプの検索

package com.flashline.sample.assettypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetTypeCriteria;
import com.flashline.registry.openapi.query.SearchTerm;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class FindAssetType {
public static void main(String pArgs[]) throws RemoteException,
OpenAPIException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Create SearchTerms and set them on the AssetSearchCriteria
// //////////////////////////////
AssetTypeCriteria assetTypeCriteria = new AssetTypeCriteria();
SearchTerm[] searchTerms = new SearchTerm[1];
searchTerms[0] = new SearchTerm();
searchTerms[0].setKey("name");
searchTerms[0].setValue("Component");
assetTypeCriteria.setSearchTerms(searchTerms);
// //////////////////////////////
// Perform the search using the specified criteria
// //////////////////////////////
AssetType[] assetTypes = repository.assetTypeQuery(authToken,
assetTypeCriteria);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

回避するメソッド:

- setIcon

- setID

17.2.4 ユースケース: アセット・タイプのタブの取得

説明

アセット・タイプに使用できるタブ・リストを取得します。

サンプル・コード

例17-4 ユースケース: アセット・タイプのタブ・リストの取得

package com.flashline.sample.assettypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.TabTypeBean;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ReadTabTypes {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
TabTypeBean[] lTabTypeBeans = null;
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
///////////////////////////////////
// read the tab types of an assettype
///////////////////////////////////
lTabTypeBeans = repository.assetTypeTabsRead(authToken, 100);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

17.2.5 ユースケース: すべてのアセット・タイプのタブの取得

説明

Oracle Enterprise Repository内のすべてのアセット・タイプのタブを取得します。

サンプル・コード

例17-5 ユースケース: すべてのアセット・タイプのタブの取得

package com.flashline.sample.assettypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.TabTypeBean;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ReadTabTypes {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
TabTypeBean[] lTabTypeBeans = null;
///////////////////////////////////
// Login to OER
///////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
///////////////////////////////////
// read the tab types of an assettype
///////////////////////////////////
lTabTypeBeans = repository.assetTypeTabsRead(authToken, 100);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

RelationshipTypeQueryの例

try
{
RelationshipTypeCriteria rCriteria = new RelationshipTypeCriteria();
RelationshipType[] allRelationshipTypes =
FlashlineRegistry.relationshipQuery(lAuthToken, rCriteria);
}
catch (OpenAPIException e)
{
e.printStackTrace();
}
catch (RemoteException re)
{
re.printStackTrace();
}

18 カテゴリ分けタイプとカテゴリ分けAPI

この章では、カテゴリ分けタイプとカテゴリ分けAPIのユースケースについて説明します。このユースケースで、カテゴリ分けタイプの作成、カテゴリ分けの操作、およびカテゴリ分けタイプの操作を行う方法について解説します。

この章では、次の項目について説明します。

- 18.1項「概要」

- 18.2項「ユースケース」

18.1 概要

カテゴリ分けとカテゴリ分けタイプの違いを理解することは重要です。

カテゴリ分けタイプは、カスタムの分類を定義する手段を提供します。カテゴリ分けはカテゴリ分けタイプのサブセットであり、アセットに割り当てられます。たとえば、テクノロジと呼ばれるカテゴリ分けタイプには、割当て可能なカテゴリ分けとして、Java、.NETおよびCOBOLが含まれていることがあります。さらに、Javaの下のサブカテゴリ分けには、サーブレットとアプレットが含まれています。したがって、Oracle Enterprise Repositoryのアセットは、Javaのカテゴリ分けに割り当てられるか、特にサーブレットのサブカテゴリ分けに割り当てられることがあります。

特定のアセットに割り当てられるカテゴリ分けは、そのアセットのタイプに定義されたカテゴリ分けタイプで決定されます。前述の例として、テクノロジのカテゴリ分けタイプがアセット・タイプXYZに対して定義されている場合、タイプXYZのアセットはJava、.NETまたはCOBOLのカテゴリ分けに割り当てるか、サーブレットまたはアプレットのサブカテゴリ分けに割り当てることができます。この分類の構造によって、アセットをグループ化し、Oracle Enterprise Repository内で様々な方法で表示できます。

カテゴリ分けタイプはプロジェクトに関連付けることもできます(Oracle Enterprise Repositoryがその機能用に構成されている場合)。すべてのプロジェクトに割当て可能なカテゴリ分けタイプは、すべてのプロジェクトに使用できます。アセットと同様に、プロジェクトは、割当て済カテゴリ分けタイプで使用可能なカテゴリ分けのいずれにも関連付けることができます。

カテゴリ分けタイプとカテゴリ分けのルールは、次のとおりです。

- リポジトリは0からn個のカテゴリ分けタイプを含めることができ、それぞれのカテゴリ分けタイプには0からn個のカテゴリ分けが含まれます。

- 各カテゴリ分けは、0からn個のサブカテゴリ分けを含むことができます。

- 各カテゴリ分けタイプには一意の名前が付けられている必要があります。この名前には、空白や特殊文字は使用できません。

- オプションとして、特定のカテゴリ分けタイプ内のカテゴリ分けは互いに排他的であることがあります。すなわち、カテゴリ分けのリストが表示された際は、1つしか選択できません。

- カテゴリ分けタイプのために相互排他オプションが選択された場合、Oracle Enterprise Repositoryでは今後の使用のみにルールを強制します。タイプ内の複数選択されたカテゴリ分けへの既存の参照は変更されません。

- このように構成した場合、カテゴリ分けタイプはプロジェクトに割り当てることができます。これによって、Oracle Enterprise Repositoryのプロジェクトをカテゴリ分けタイプまたはカテゴリ分けで編成できます。

- 特定のカテゴリ分けタイプの構成がプロジェクトに割り当てることができないように変更された場合、この変更は後続のプロジェクトの割当てのみに影響します。既存のプロジェクトへのカテゴリ分けタイプの割当てには影響しません。

- カテゴリ分けタイプはOracle Enterprise Repositoryから削除できます。ただし、これを実行すると、削除したカテゴリ分けタイプ内のすべてのカテゴリ分けも削除されます。この作業を実行する際は、注意してください。

- カテゴリ分けは非アクティブ化できます。非アクティブ化を行うと、カテゴリ分け(およびすべてのサブカテゴリ分け)を今後使用できなくなりますが、Oracle Enterprise Repositoryから削除されません。カテゴリ分けへの既存の参照は、非アクティブ化によって影響を受けません。

- 前述のプロセスとは逆に、非アクティブ化されたカテゴリ分けは、再度アクティブ化できます。

- 特定のカテゴリ分けタイプ内では、すべてのカテゴリ分けには、一意の名前が付けられている必要があります。ただし、同じ名前は、別のカテゴリ分けタイプに存在する複数のカテゴリ分けで共有できます。

次のメソッドによって、カテゴリ分けタイプの作成、更新、表示、問合せおよび削除を行うことができます。

18.2 ユースケース

この項では、カテゴリ分けタイプおよびカテゴリ分けAPIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 18.2.1項「ユースケース: カテゴリ分けタイプの作成」

- 18.2.2項「ユースケース: カテゴリ分けタイプの操作」

- 18.2.3項「ユースケース: カテゴリ分けの操作」

18.2.1 ユースケース: カテゴリ分けタイプの作成

説明

新しく作成されたカテゴリ分けタイプに付けられた要素名には、空白や特殊文字は使用できません。単数および複数の表示名に使用される文字に制限はありません。pExclusiveAssignブールでは、カテゴリ分けタイプ内で割り当てることができるカテゴリ分けを1つにするか、または複数にするかを決定します。pExclusiveAssignブールは、カテゴリ分けタイプをプロジェクトに割り当てるかどうかも決定します。このメソッドでは、既存のカテゴリ分けの重複を避け、作成済のカテゴリ分けタイプを返します。

サンプル・コード

例18-1 ユースケース: カテゴリ分けタイプの作成

package com.flashline.sample.categorizationtypesandapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.CategorizationType;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateCategorizationType {
public static void main(String pArgs[]) throws java.rmi.RemoteException,
OpenAPIException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Create the categorization type
// //////////////////////////////
String pName = "Name";
String pSingularDisplay = "SingularDisplay";
String pPluralDisplay = "PluralDisplay";
boolean pExclusiveAssign = true;
boolean pProjectAssign = true;
CategorizationType lCategorizationType =
repository.categorizationTypeCreate(authToken, pName,
pSingularDisplay, pPluralDisplay, pExclusiveAssign, pProjectAssign);
// ----------------------------------------
// clean up
repository.categorizationTypeDelete(authToken, lCategorizationType);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

18.2.2 ユースケース: カテゴリ分けタイプの操作

説明

次の操作を例に示します。

- ID別のカテゴリ分けタイプの取得。

- カテゴリ分けタイプの更新。

- カテゴリ分けタイプの削除。

- 注意が必要です。このメソッドでは、カテゴリ分けタイプ全体、およびこれに含まれているすべてのカテゴリ分けが削除されます。

- カテゴリ分けタイプの問合せ。

- 名前、タイプ、およびカテゴリ分けをプロジェクトに割り当てるかどうかを含め、様々な条件を使用します。

- カテゴリ分けタイプの取得。

サンプル・コード

例18-2 ユースケース: カテゴリ分けタイプの操作

package com.flashline.sample.categorizationtypesandapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Categorization;
import com.flashline.registry.openapi.entity.CategorizationType;
import com.flashline.registry.openapi.query.CategorizationTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CategorizationExamples {
public static void main(String pArgs[]) throws ServiceException,
RemoteException,
OpenAPIException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Create a Categorization Type
// //////////////////////////////
CategorizationType categorizationType = repository
.categorizationTypeCreate(authToken, "exampleType", "Example Type",
"Example Types", false, true);
// //////////////////////////////
// Find and update a categorization type
// //////////////////////////////
CategorizationTypeCriteria categorizationTypeCriteria = new
CategorizationTypeCriteria();
boolean projectAssign = true;
categorizationTypeCriteria.setProjectAssignCriteria(projectAssign + "");
CategorizationType[] categorizationTypes = repository
.categorizationTypeQuery(authToken, categorizationTypeCriteria);
// Set plural display name
categorizationType.setDisplayPlural("Updated Example Types");
// Set singular display name
categorizationType.setDisplaySingular("Updated Example Type");
// Set Categorization Type name
categorizationType.setName("updatedExampleType");
// Set Categorization Type exclusive assign
categorizationType.setExclusiveAssign(true);
// Set Categorization Type project Assignable
categorizationType.setProjectAssignable(false);
// Update Categorization Type
categorizationType = repository.categorizationTypeUpdate(
authToken, categorizationType);
// Read a Categorization Type
CategorizationType categorizationTypeRead = repository
.categorizationTypeRead(authToken, categorizationType.getID());
// //////////////////////////////
// Create a Categorization within a Categorization Type
// //////////////////////////////
Categorization categorization = repository.categorizationCreate(
authToken, "Example Categorization", categorizationType);
// //////////////////////////////
// Create a Categorization within a Categorization (a.k.a. a
// sub-categorization or child categorization)
//
// method validates that:
//   - no child categorization with the same name exists within the
//     parent categorization.
//   - the categorization type is valid
//   - the parent categorization is valid.
// //////////////////////////////
Categorization childCategorization = repository
.categorizationChildCreate(authToken, "Example Child Categorization",
categorizationType, categorization);
childCategorization.setName("Updated Example Child Categorization");
childCategorization = repository.categorizationUpdate(authToken,
childCategorization, categorizationType);
// //////////////////////////////
// Observe various properties of a categorization. Note that the
// properties are not being assigned to local variables in
// the interest of brevity...
// //////////////////////////////
Categorization categorizationRead = repository.categorizationRead(
authToken, childCategorization.getID());
// Get Categorization parent id
//categorizationRead.getParentID();
// Get Categorization active status
categorizationRead.getActiveStatus();
// Get Categorization ID
categorizationRead.getID();
// Get Categorization name
categorizationRead.getName();
// Get Categorization recursive name
categorizationRead.getRecursiveName();
// Get Categorization Categorization Type ID
categorizationRead.getTypeID();
// //////////////////////////////
// Retrieve the full tree of categorizations for a Categorization Type.
// This means that the Categorization entity returned has children
// which contain their children (if any), and so on.
// //////////////////////////////
// Get active Categorizations full tree
boolean active = true;
boolean fullTree = true;
Categorization[] categorizationArray = repository.categorizationReadByType(
authToken, categorizationType, active, fullTree);
// Get children categorizations for categorization
Categorization[] childCategorizations =
repository.categorizationChildRead(authToken,
categorizationType, categorization, active);
// //////////////////////////////
// Deactivate a Categorization
// //////////////////////////////
categorization = repository.categorizationDeactivate(authToken,
categorization, categorizationType);
// pActive is set to "true" so that the method returns
// only active categorizations
Categorization[] activeCategorizations = repository
.categorizationChildRead(authToken, categorizationType,
categorization, true);
// Get inactive child Categorizations
Categorization[] inactiveCategorizations =
repository.categorizationChildRead(authToken,
categorizationType, categorization, false);
// /////////////////////////////
// Reactivate Categorizations
// /////////////////////////////
for(int i=0; i<inactiveCategorizations.length; i++){
categorization = repository.categorizationReactivate(authToken,
inactiveCategorizations[i], categorizationType);
}
// //////////////////////////////
// Delete a Categorization Type
// //////////////////////////////
repository.categorizationTypeDelete(authToken, categorizationType);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

回避するメソッド

次に示すメソッドは、Oracle Enterprise Repository内部でのみ使用します。これらのメソッドの誤った使用によって、カテゴリ分けタイプの機能が損われることがあります(回復できないダメージが起こることはありません)。これらのメソッドで提供される機能は、Oracle Enterprise RepositoryのCategorizationTypeメソッドに組み込まれています。

- getActiveStatus() int - CategorizationType

- getCategorizations() Categorizations[] - CategorizationType

- GetEntityType() String - CategorizationType

- getKey() String - CategorizationType

- getTypeDesc() TypeDesc - CategorizationType

- hashCode() int - CategorizationType

- isCustom() boolean - CategorizationType

- isFlat() boolean - CategorizationType

- isSystemOnly() boolean - CategorizationType

- setActiveStatus(int activeStatus) void - CategorizationType

- setAssetAssignable(boolean assetAssignable) void - CategorizationType

- setCategorizations(Categorizations[] categorizations) void - CategorizationType

- setCustom(boolean custom) void - CategorizationType

- setEntityType(String entityType) void - CategorizationType

- setFlat(boolean flat) void - CategorizationType

- setID(long ID) void - CategorizationType

- setKey(String key) void - CategorizationType

- setSystemOnly(boolean systemOnly) void - CategorizationType

18.2.3 ユースケース: カテゴリ分けの操作

説明

次のコード・サンプルに、カテゴリ分けの作成、更新、表示、非アクティブ化/再アクティブ化を示します。前述のように、カテゴリ分けはカテゴリ分けタイプの下位にあります。すなわち、カテゴリ分けはカテゴリ分けタイプに属しています。

サンプル・コード

例18-3 ユースケース: カテゴリ分けの操作

package com.flashline.sample.categorizationtypesandapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Categorization;
import com.flashline.registry.openapi.entity.CategorizationType;
import com.flashline.registry.openapi.query.CategorizationTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CategorizationExamples {
public static void main(String pArgs[]) throws ServiceException,
RemoteException,
OpenAPIException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Create a Categorization Type
// //////////////////////////////
CategorizationType categorizationType = repository
.categorizationTypeCreate(authToken, "exampleType", "Example Type",
"Example Types", false, true);
// //////////////////////////////
// Find and update a categorization type
// //////////////////////////////
CategorizationTypeCriteria categorizationTypeCriteria = new
CategorizationTypeCriteria();
boolean projectAssign = true;
categorizationTypeCriteria.setProjectAssignCriteria(projectAssign + "");
CategorizationType[] categorizationTypes = repository
.categorizationTypeQuery(authToken, categorizationTypeCriteria);
// Set plural display name
categorizationType.setDisplayPlural("Updated Example Types");
// Set singular display name
categorizationType.setDisplaySingular("Updated Example Type");
// Set Categorization Type name
categorizationType.setName("updatedExampleType");
// Set Categorization Type exclusive assign
categorizationType.setExclusiveAssign(true);
// Set Categorization Type project Assignable
categorizationType.setProjectAssignable(false);
// Update Categorization Type
categorizationType = repository.categorizationTypeUpdate(
authToken, categorizationType);
// Read a Categorization Type
CategorizationType categorizationTypeRead = repository
.categorizationTypeRead(authToken, categorizationType.getID());
// //////////////////////////////
// Create a Categorization within a Categorization Type
// //////////////////////////////
Categorization categorization = repository.categorizationCreate(
authToken, "Example Categorization", categorizationType);
// //////////////////////////////
// Create a Categorization within a Categorization (a.k.a. a
// sub-categorization or child categorization)
//
// method validates that:
//   - no child categorization with the same name exists within the
//     parent categorization.
//   - the categorization type is valid
//   - the parent categorization is valid.
// //////////////////////////////
Categorization childCategorization = repository
.categorizationChildCreate(authToken, "Example Child Categorization",
categorizationType, categorization);
childCategorization.setName("Updated Example Child Categorization");
childCategorization = repository.categorizationUpdate(authToken,
childCategorization, categorizationType);
// //////////////////////////////
// Observe various properties of a categorization. Note that the
// properties are not being assigned to local variables in
// the interest of brevity...
// //////////////////////////////
Categorization categorizationRead = repository.categorizationRead(
authToken, childCategorization.getID());
// Get Categorization parent id
//categorizationRead.getParentID();
// Get Categorization active status
categorizationRead.getActiveStatus();
// Get Categorization ID
categorizationRead.getID();
// Get Categorization name
categorizationRead.getName();
// Get Categorization recursive name
categorizationRead.getRecursiveName();
// Get Categorization Categorization Type ID
categorizationRead.getTypeID();
// //////////////////////////////
// Retrieve the full tree of categorizations for a Categorization Type.
// This means that the Categorization entity returned has children
// which contain their children (if any), and so on.
// //////////////////////////////
// Get active Categorizations full tree
boolean active = true;
boolean fullTree = true;
Categorization[] categorizationArray = repository.categorizationReadByType(
authToken, categorizationType, active, fullTree);
// Get children categorizations for categorization
Categorization[] childCategorizations =
repository.categorizationChildRead(authToken,
categorizationType, categorization, active);
// //////////////////////////////
// Deactivate a Categorization
// //////////////////////////////
categorization = repository.categorizationDeactivate(authToken,
categorization, categorizationType);
// pActive is set to "true" so that the method returns
// only active categorizations
Categorization[] activeCategorizations = repository
.categorizationChildRead(authToken, categorizationType,
categorization, true);
// Get inactive child Categorizations
Categorization[] inactiveCategorizations =
repository.categorizationChildRead(authToken,
categorizationType, categorization, false);
// /////////////////////////////
// Reactivate Categorizations
// /////////////////////////////
for(int i=0; i<inactiveCategorizations.length; i++){
categorization = repository.categorizationReactivate(authToken,
inactiveCategorizations[i], categorizationType);
}
// //////////////////////////////
// Delete a Categorization Type
// //////////////////////////////
repository.categorizationTypeDelete(authToken, categorizationType);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

回避するメソッド:

次に示すメソッドはOracle Enterprise Repository内部専用なので、使用しないでください。これらのメソッドを誤って使用すると、カテゴリ分けが正しく機能しないことがあります。これらのメソッドで提供される機能は、Oracle Enterprise RepositoryのCategorizationメソッドに組み込まれています。

- getDescription() String - Categorization

- GetEntityType() String - Categorization

- getKey() String - Categorization

- getLevel() long - Categorization

- getType() CategorizationType - Categorization

- getTypeDesc() TypeDesc - Categorization

- hashCode() int - Categorization

- set_super(Categorization _super) void - Categorization

- setActiveStatus(int activeStatus) void - Categorization

- setDeleted(boolean deleted) void - Categorization

- setDescription(String description) void - Categorization

- setEntityType(String entityType) void - Categorization

- setID(long ID) void - Categorization

- setKey(String key) void - Categorization

- setRecursiveName(String recursiveName) void - Categorization

- setType(CategorizationType type) void - Categorization

- setTypeID(long ID) void - Categorization

19 CMFエントリ・タイプAPI

この章では、CMFエントリ・タイプAPIのユースケースについて説明します。また、Oracle Enterprise Repositoryへの新しいCMFエントリ・タイプの追加、およびアセットへの既存のCMFエントリ・タイプの割当てを行う方法について解説します。

この章では、次の項目について説明します。

- 19.1項「概要」

- 19.2項「ユースケース」

19.1 概要

CMFエントリ・タイプは、アセットにアタッチできるメタデータを記述します。CMFエントリ・タイプは、IDと単一の名前の文字列で識別されます。

検証: CMFエントリ・タイプを保存する場合、Oracle Enterprise Repositoryは、現在、次の内容を検証します。

- CMFエントリ・タイプ名の長さが範囲内であること

- CMFエントリ・タイプ名が一意であること

- CMFエントリ・タイプの更新時に、CMFエントリ・タイプIDが存在していること

関連するサブシステム

アセットの観点からでは、CMFエントリはアセットにリンクしています。CMFエントリ・タイプでは、これらのエントリのパラメータを定義します。

追加で必要なインポート

import com.flashline.registry.openapi.entity.MetadataEntryTypeSummary;
import com.flashline.registry.openapi.query.MetadataEntryTypeCriteria;

19.2 ユースケース

この項では、CMFエントリ・タイプAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 19.2.1項「ユースケース: CMFエントリ・タイプの操作」

19.2.1 ユースケース: CMFエントリ・タイプの操作

説明

- 新しいCMFエントリ・タイプをOracle Enterprise Repositoryに追加します。

- 既存のCMFエントリ・タイプをアセットに割り当てます。

サンプル・コード

例19-1 ユースケース: CMFエントリ・タイプの操作

package com.flashline.sample.metadataentrytypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.MetadataEntryTypeSummary;
import com.flashline.registry.openapi.query.MetadataEntryTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class MetadataEntryTypes {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
// -----------------------------------------
// Create a new CMF Entry Type
String newMetadataEntryTypeName = "Sample MetadataEntryType";
MetadataEntryTypeSummary newMetadataEntryType =
repository.metadataEntryTypeCreate(authToken, newMetadataEntryTypeName);
System.out.println("The new MetadataEntryType id =\"" +
newMetadataEntryType.getID() + "\"");
// -----------------------------------------
// Find a CMF Entry Type
MetadataEntryTypeCriteria criteria = new MetadataEntryTypeCriteria();
criteria.setNameCriteria("Sample");
MetadataEntryTypeSummary[] metadataEntryTypes =
repository.metadataEntryTypeQuery(authToken, criteria);
long myMetadataEntryTypeID = metadataEntryTypes[0].getID();
// -----------------------------------------
// Read a CMF Entry Type
MetadataEntryTypeSummary readMetadataEntryType =
repository.metadataEntryTypeRead(authToken, myMetadataEntryTypeID);
System.out.println("The MetadataEntryType name =\"" +
readMetadataEntryType.getName() + "\"");
// -----------------------------------------
// Delete a CMF Entry Type
repository.metadataEntryTypeDelete(authToken, myMetadataEntryTypeID);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

20 カスタム・アクセス設定API

この章では、カスタム・アクセス設定APIのユースケースについて説明します。また、カスタム・アクセス設定タイプ・リストの取得、およびOracle Enterprise Repository内にある特定のタイプのデフォルトのカスタム・アクセス設定リストの取得を行う方法について解説します。

この章では、次の項目について説明します。

- 20.1項「概要」

- 20.2項「ユースケース」

20.1 概要

カスタム・アクセス設定サブシステムは、Oracle Enterprise Repositoryのカスタム・アクセス設定(CAS)を取得する、Webサービス・ベースのメカニズムを提供するために使用します。例20-1に、カスタム・アクセス設定のサンプル・コードを示します。

例20-1 カスタム・アクセス設定のサンプル・コード

カスタム・アクセス設定を行うオープンAPIメソッドの作業コードです。

package com.flashline.sample.customaccesssettingsapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CustomAccesssettings {
public static void main(String pArgs[]) throws java.rmi.RemoteException,
OpenAPIException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
// ////////////////////////////////////////////////////////////
// Retrieve a List of Custom Access Setting Types
// ////////////////////////////////////////////////////////////
String[] lRoleContextTypes = null;
lRoleContextTypes = repository
.customAccessSettingTypesGet(authToken);
// ////////////////////////////////////////////////////////////
// Get Custom Access Setting Names
// ////////////////////////////////////////////////////////////
String[] lCustomAccessSettingNames = null;
lCustomAccessSettingNames = repository
.customAccessSettingNamesGet(authToken, "asset");
// ////////////////////////////////////////////////////////////
// Retrieve an array of Custom Access Setting Names of type "asset".
// ////////////////////////////////////////////////////////////
String[] rCustomAccessSettingNames = null;
rCustomAccessSettingNames = repository
.customAccessSettingDefaultNamesGet(authToken, "asset");
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

20.2 ユースケース

この項では、カスタム・アクセス設定APIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 20.2.1項「ユースケース: カスタム・アクセス設定タイプ・リストの取得」

- 20.2.2項「ユースケース: デフォルトのカスタム・アクセス設定名の取得」

20.2.1 ユースケース: カスタム・アクセス設定タイプ・リストの取得

説明

このメソッドは、Oracle Enterprise Repositoryで使用可能なカスタム・アクセス設定タイプ・リストを取得するために使用します。

サンプル・コード

1. String[] lCustomAccessSettingNames = null;
2. lCustomAccessSettingNames = mFlashlineRegistry.customAccessSettingNamesGet
(mAuthToken, "asset");

注釈

行2: タイプ"asset"のカスタム・アクセス設定名の配列を取得します。

20.2.2 ユースケース: デフォルトのカスタム・アクセス設定名の取得

説明

このメソッドは、特定のタイプのデフォルトのカスタム・アクセス設定リストを取得するために使用します。ファイルのデフォルトのカスタム・アクセス設定がすべての新しいファイルに適用されるように、アセットのデフォルトのカスタム・アクセス設定がすべての新しいアセットに適用されます。

サンプル・コード

1. String[] lCustomAccessSettingNames = null;
2. lCustomAccessSettingNames = mFlashlineRegistry.customAccessSettingDefault
NamesGet(mAuthToken, "asset");

注釈

行2: タイプ"asset"のデフォルトのカスタム・アクセス設定名の配列を取得します。

21 部門API

この章では、部門APIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryの部門の作成、更新、問合せおよび削除を行う方法について解説します。

この章では、次の項目について説明します。

- 21.1項「概要」

- 21.2項「ユースケース」

21.1 概要

部門の作成、読込み、問合せおよび変更を行うことができます。これらの操作は、次のとおりです。部門の作成後は削除できないことに注意してください。部門の2つの属性(名前と説明)のみがユーザーに有効です。

追加で必要なインポート

import com.flashline.registry.openapi.entity.Department;

21.2 ユースケース

この項では、部門APIを使用するユースケースについて説明します。内容は次のとおりです。

- 21.2.1項「ユースケース: 部門の操作」

21.2.1「ユースケース: 部門の操作」

説明

次のサンプル・コードは、Oracle Enterprise Repositoryの部門の操作が含まれる典型的なタスクを示します。これには、作成、更新、問合せおよび削除が含まれます。

サンプル・コード

例21-1 ユースケース: 部門の操作

package com.flashline.sample.departmentapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Department;
import com.flashline.registry.openapi.query.DepartmentCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class Departments {
public static void main(String pArgs[]) throws java.rmi.RemoteException,
OpenAPIException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// //////////////////////////////
// Create a new department
// Each Department requires a unique name. Descriptions are optional.
// //////////////////////////////
Department dept = repository.departmentCreate(authToken,
"My Dept "+Calendar.getInstance().getTimeInMillis(), "A New
Department");
// //////////////////////////////
// Read a department
// To read a Department you must have the Department name.
// //////////////////////////////
Department dept2 = repository.departmentRead(authToken,
"ADepartment");
// //////////////////////////////
// Query for a department
//
// To query for a Department you must fill out a
// DepartmentCriteria object with an array of SearchTerms. A SearchTerm
// is a key/value pair. Currently the only valid key is "name".
//
// A query for name is a match if the value for the name term
// occurs anywhere in the name of the department. For example,
// a search for fred matches fred, alfred, and fredrick.
// //////////////////////////////
DepartmentCriteria criteria = new DepartmentCriteria();
criteria.setNameCriteria("DepartmentName");
Department[] depts = repository.departmentQuery(authToken,
criteria);
// //////////////////////////////
// Update a department
//
// To update a Department you need only to modify a Department
// reference and call departmentUpdate...
// //////////////////////////////
String lOldName = dept.getName();
String lNewName = "New " + dept.getName();
Department dept3 = repository.departmentRead(authToken, lOldName);
dept3.setName(lNewName);
repository.departmentUpdate(authToken, dept3);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

22 抽出API

この章では、抽出APIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryにおいて、アセットの抽出、抽出の読込み、抽出の更新を行う方法について解説します。

この章では、次の項目について説明します。

- 22.1項「概要」

- 22.2項「ユースケース」

22.1 概要

「使用-ダウンロード」(抽出)プロセスの一部として、ユーザーは選択したアセットを特定のプロジェクトに関連付けるように要求されます。これらの使用状況のインスタンスは、調査(使用状況の更新に含まれます)とともに、Oracle Enterprise Repository内のメトリックの主要なドライバです。

注意:

以前の製品リリースでは、抽出という用語は、アセットのペイロードのダウンロードやアクセスなどの行為を説明するために使用されていました。その後、抽出という用語は使用 - ダウンロードという語句に置き換わりました。ただし、抽出APIのドキュメントのコンテキスト内で、抽出という用語の使用例(特にコード例)の多くは、REX APIの使用を単純化するためにそのままになっていることに注意してください。

定義

- 状態
状態は、使用またはダウンロードするために選択したアセットの使用状況のステータスのことです。次の4つの状態があります。

- IN PROCESS

- ACCEPTED

- REJECTED

- DEPLOYED (DEPLOYEDはプロジェクトで対応されています)。

- 抽出ダウンロード
抽出したアセットに関連付けられた情報が含まれています。抽出ダウンロードの値は、0または1です。

- ファイル情報
アセットに関連付けられた実際のファイルへのURLリンクと情報は、抽出ダウンロードに含まれているものとして、ファイル情報を作成します。抽出ダウンロードのファイル情報の値は、0から1です。

- 関連するアセット
Oracle Enterprise Repositoryでは、事前定義済の番号またはカスタム構成済のリレーションシップ(あるいはその両方)で、アセットを他のアセットと関連付けることができます。アセットは、0からn個の関連アセットを含むことができます。

関連するサブシステム

- アセット・サブシステム

- プロジェクト・サブシステム

- カテゴリ分けタイプ・サブシステム

- 調査サブシステム

22.2 ユースケース

この項では、抽出APIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 22.2.1項「ユースケース: アセットの抽出」

- 22.2.2項「ユースケース: 抽出の読込み」

- 22.2.3項「ユースケース: 抽出の更新」

22.2.1 ユースケース: アセットの抽出

説明

抽出は、ユーザーがアセットをプロジェクトで使用するために関連付けると作成されます。このプロセス中に、関連しているアセットのリストも抽出用に使用可能になります。この場合、ユーザーは、プライマリ・アセットと関連アセットの両方を同時に抽出できます。各アセットに一意の抽出が記録されます。抽出を作成すると、0からn個の抽出ダウンロードを含む配列が作成されます。各ダウンロードのファイル情報の値は、0から1です。ファイル情報にはファイルに関する基本情報が含まれます。この情報は、ファイルへのリンクを作成するために使用します。

アセットを抽出するには、次の条件を満たす必要があります。

- ユーザーは、アセットが抽出されるプロジェクトのメンバーである必要があります。

- ユーザーは、適切なロール・タイプに割り当てられている必要があります。

- プロジェクトは、オープンである必要があります。

- アセットは、登録済でアクティブである必要があります。

- 「カスタム・アクセス設定」が有効になっている場合、抽出を実行するユーザーは、指定したアセットに対して適切なアクセス権を持っている必要があります。

- 「カスタム・アクセス設定」が有効になっている場合、抽出を実行するユーザーは、適切な権限を持っているファイルに対してのみファイル情報を受け取ります。

- これらの条件は、使用される適切なメソッドでチェックされます。条件を満たさない場合、例外がスローされます。

サンプル・コード

例22-1 ユースケース: アセットの抽出

package com.flashline.sample.extractionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.ExtractionDownload;
import com.flashline.registry.openapi.entity.FileInfo;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ExtractAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1], pArgs[2]);
long ASSET_ID_1 = 589;     // must be a valid asset id in OER
long ASSET_ID_2 = 569;     // must be a valid asset id in OER
long PROJECT_ID = 50000;   // must be a valid project id in OER
long EXTRACTION_ID = 0;
// ----------------------------------------
// Create a new extraction
long[] lAssetIDs = { ASSET_ID_1, ASSET_ID_2 };
ExtractionDownload[] extractionDownloads =
repository.extractionCreate(authToken, PROJECT_ID, lAssetIDs);
System.out.println("Number of new extraction downloads created: " +
extractionDownloads.length);
// ----------------------------------------
// Read an extraction by project and asset
Extraction extraction =
repository.extractionReadByProjectAndAsset(authToken, PROJECT_ID, ASSET_ID_1);
EXTRACTION_ID = extraction.getID();
// ----------------------------------------
// Read an extraction by ID
Extraction extractionByID = repository.extractionRead(authToken, EXTRACTION
_ID);
System.out.println("The extraction '"+extractionByID.getDisplayName()+"' was
read by id ("+EXTRACTION_ID+")");
// ----------------------------------------
// Read asset extractions
Extraction[] assetExtractions =
repository.extractionReadAssetExtractions(authToken, PROJECT_ID, ASSET_ID_1,
true);
System.out.println("The number of extractions for this asset is:
"+(assetExtractions==null ? 0 : assetExtractions.length));
// ----------------------------------------
// Read project extractions
Extraction[] projectExtractions =
repository.extractionReadProjectExtractions(authToken, PROJECT_ID, true);
System.out.println("The number of extractions for this project is:
"+(projectExtractions==null ? 0 : projectExtractions.length));
// ----------------------------------------
// Read related assets
Asset[] relatedAssets = repository.extractionReadRelatedAssets(authToken,
ASSET_ID_2);
System.out.println("The number of related assets is: "+relatedAssets==null ?
0 : relatedAssets.length);
// ----------------------------------------
// Read File-Info for an extraction
List fileInfosList = new ArrayList();
if (projectExtractions != null) {
for (int i = 0; i < projectExtractions.length; i++) {
extraction = repository.extractionRead(authToken,
projectExtractions[i].getID());
fileInfosList.add(repository.extractionReadFileInfos(authToken,
extraction));
}
}
// ----------------------------------------
// Get File
List fileInfoList = new ArrayList();
Iterator fileInfosListIter = fileInfosList.iterator();
while (fileInfosListIter.hasNext()) {
FileInfo[] fileInfos = (FileInfo[]) fileInfosListIter.next();
for (int i = 0; i < fileInfos.length; i++) {
fileInfoList.add(fileInfos[i]);
}
}
String[] fileLinks = new String[fileInfoList.size()];
for (int i = 0; i < fileInfoList.size(); i++) {
FileInfo fileInfo = (FileInfo) fileInfoList.get(i);
fileLinks[i] = repository.repositoryFileTranslator(authToken, fileInfo);
System.out.println("Project extraction file-info link: "+fileLinks[i]);
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

FileInfoオブジェクトについての注意

FileInfoオブジェクトは、抽出したアセットに関連付けられた個々のファイルを示します。ファイルの物理的な場所は、次の2つのメソッドで取得できます。

1. FileInfoオブジェクトのdownloadURIプロパティ(fileInfo.getDownloadURI()など)を使用します。

2. FileInfoオブジェクトを渡す、OpenAPIメソッドのrepositoryFileTranslator(flashlineRegistry.repositoryFileTranslator(authToken, fileInfo)など)を使用します。

注意:

Oracle Enterprise Repository固有のパスを示す、FileInfoオブジェクトのURIプロパティを使用しないでください。

22.2.2 ユースケース: 抽出の読込み

説明

アセットの抽出のユースケースで説明されたメソッド以外のメソッドを使用して、抽出を読み込みます。抽出は、アセット、プロジェクトまたはユーザーでグループ化できます。抽出のグループ化によって使用するメソッドが決定されます。

抽出を読み込むには、次の条件を満たす必要があります。

- プロジェクトは、オープンである必要があります。

- アセットは、登録済でアクティブである必要があります。

- 抽出は、アクティブである必要があります。

これらの条件は、使用される適切なメソッドでチェックされます。条件を満たさない場合、例外がスローされます。

サンプル・コード

例22-2 ユースケース: 抽出の読込み

package com.flashline.sample.extractionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ExtractRead {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
long PROJECT_ID = 50000; // must be a valid project id in the OER
long ASSET_ID = 569;    // must be a valid asset id in the OER
// ----------------------------------------
// Read project extractions
Extraction[] projectExtractions = repository
.extractionReadProjectExtractions(authToken, PROJECT_ID, true);
// ----------------------------------------
// Read asset extractions
Extraction[] assetExtractions = repository
.extractionReadAssetExtractions(authToken, PROJECT_ID, ASSET_ID, true);
// ----------------------------------------
// Read user extractions
Extraction[] userExtractions = repository
.extractionReadUserExtractions(authToken, true);
// ----------------------------------------
// Read related assets
Asset[] assets = repository.extractionReadRelatedAssets(authToken,
ASSET_ID);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

22.2.3 ユースケース: 抽出の更新

説明

抽出レコードは、アセットの状態が変更されたか、アセットの使用者がアセットの調査を終了したときに更新されます。状態の変更と調査の完了は別のトランザクションにできます。また、一緒に行うこともできます。

抽出を更新するには、次の条件を満たす必要があります。

- プロジェクトは、オープンである必要があります。

- アセットは、登録済でアクティブである必要があります。

- 抽出は、アクティブである必要があります。

- 実行した調査は、アクティブである必要があります。

これらの条件は、使用される適切なメソッドでチェックされます。条件を満たさない場合、例外がスローされます。

サンプル・コード

例22-3 ユースケース: 抽出の更新

package com.flashline.sample.extractionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Answer;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Categorization;
import com.flashline.registry.openapi.entity.Choice;
import com.flashline.registry.openapi.entity.ChoiceList;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.ExtractionDownload;
import com.flashline.registry.openapi.entity.IExtraction;
import com.flashline.registry.openapi.entity.Question;
import com.flashline.registry.openapi.entity.SurveyTaken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ExtractUpdate {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
long PROJECT_ID = 50000; // must be a valid project id in the OER
long ASSET_ID = 569; // must be a valid asset id in the OER
// ----------------------------------------
// Create a new extraction
long[] lAssetIDs = { ASSET_ID };
ExtractionDownload[] extractionDownloads =
repository.extractionCreate(authToken, PROJECT_ID, lAssetIDs);
Extraction[] assetExtractions = repository
.extractionReadAssetExtractions(authToken, PROJECT_ID, ASSET_ID, true);
///////////////////////////////////////////////////////////////////////////
// this assumes that there is at least 1 extraction and the first one is
// used
///////////////////////////////////////////////////////////////////////////
IExtraction iExtraction = repository
.extractionReadExtractionStates(authToken);
Extraction extraction = repository.extractionRead(authToken,
assetExtractions[0].getID());
///////////////////////////////////////////////////////////////////////////
// can set the status of the extraction to 'Deployed', 'Rejected', or 'In
// Process'.
///////////////////////////////////////////////////////////////////////////
assetExtractions[0].setStatus("In Process");
extraction = repository.extractionTentativelyAccept(authToken,
extraction);
SurveyTaken surveyTaken = repository.surveyTakenRead(authToken,
extraction);
extraction = repository.extractionUpdateSurvey(authToken,
extraction, surveyTaken);
extraction.setStatus(iExtraction.getInProcess());
surveyTaken = repository.surveyTakenRead(authToken, extraction);
extraction = repository.extractionUpdateSurvey(authToken,
extraction, surveyTaken);
Categorization[] rejectionReasons = repository
.extractionReadRejectionReasons(authToken);
surveyTaken = repository.surveyTakenRead(authToken, extraction);
extraction = repository.extractionUpdateSurvey(authToken,
extraction, surveyTaken);
surveyTaken = repository.surveyTakenRead(authToken, extraction);
Question[] questions = repository.surveyReadQuestions(authToken);
ChoiceList choiceList = null;
Choice[] choices = null;
Answer[] answers = new Answer[4];
for (int i = 0; i < answers.length; i++) {
answers[i] = new Answer();
}
answers[0].setQuestionId(questions[0].getId());
choiceList = questions[0].getChoiceList();
choices = choiceList.getChoices();
answers[0].setChoiceId(choices[0].getId());
answers[0].setValue(choices[0].getValue());
answers[1].setQuestionId(questions[1].getId());
answers[1].setChoiceId(0);
answers[1].setValue("100");
answers[2].setQuestionId(questions[2].getId());
answers[2].setChoiceId(0);
answers[2].setValue("200");
answers[3].setQuestionId(questions[3].getId());
choiceList = questions[3].getChoiceList();
choices = choiceList.getChoices();
answers[3].setChoiceId(choices[3].getId());
answers[3].setValue(choices[3].getValue());
surveyTaken.setAnswers(answers);
surveyTaken = repository.surveyTakenUpdate(authToken, surveyTaken);
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

短所

状態の変更または調査の実行は2つの手順のプロセスであることに注意してください。最初の手順は、状態の変更または調査の実行です。2番目の手順は、extractionUpdateStatusメソッドを使用して抽出のステータスを更新することです。状態の変更と調査の実行は別のトランザクションにできます。また、一緒に行うこともできます。一緒に行う場合、extractionUpdateStatusメソッドを一度だけ呼び出す必要があります。

extractionUpdateStatusメソッドはSurveyTakenが必要です。extractionUpdateStatusメソッドが呼び出されたときに調査が実行されたかどうかに関係なく、これは必要です(状態の変更など)。surveyTakenReadメソッドを使用して、この調査を取得します。この抽出の調査が行われていない場合、surveyTakenReadメソッドによって作成されます。

Oracle Enterprise Repositoryで、現在の調査は4つの質問から構成されます。調査が実行されると、4つの質問に対する回答を格納する配列が作成されます。それぞれの調査には有効な3つの情報が含まれている必要があります。

- 値(質問に対するユーザーの回答)

- 質問ID

- 選択ID

質問2と3は回答が1つの質問なので、常に選択IDは0に設定されています。質問1と4は複数の回答があります。複数の回答はsurveyReadChoiceListメソッドを使用して取得されます。

回避するメソッド:

次のオブジェクトは、抽出サブシステムおよび調査サブシステムで使用します。

- Extraction

- ExtractionDownload

- FileInfo

- SurveyTaken

- Question

- ChoiceList

- Choice

- Answer

これらのオブジェクト内でgetメソッドのいずれかを使用することが可能です。残りのすべてのメソッド(特にsetメソッド)の使用は避ける必要があります。残りのメソッドで発生したイベントは、抽出および調査サブシステムのメソッドで対応されています。

23 REXクライアントのローカライズ

この章では、REXクライアントのローカライズのユースケースについて説明します。このユースケースで、Oracle Enterprise RepositoryのREX例外およびREX監査メッセージのローカライズ済のメッセージを作成する方法について解説します。

この章では、次の項目について説明します。

- 23.1項「概要」

- 23.2項「ユースケース」

23.1 概要

ステータスは、OpenAPIExceptionまたはAuditMsgオブジェクトのいずれかとして、REXクライアントに渡されます。OpenAPIExceptionオブジェクトは例外用に使用されますが、AuditMsgオブジェクトは非同期的に実行されるプロセス用に使用されます。これらのオブジェクトの両方がREXクライアントにテキストのエラー・メッセージを返します。

両方のオブジェクトのインタフェースがエラー・コードおよびメッセージの引数のリストを含めるために拡張されたため、REXクライアントは別の言語でエラー・メッセージやステータス・メッセージを表示できます。クライアントは標準のエラー・メッセージを使用し続けるか、またはメッセージを無視し、エラー・コードとメッセージ引数を使用して専用のエラー・メッセージを作成できます。

たとえば、REXを使用するアプリケーションをローカライズする場合、最初に、想定されるすべてのエラー・メッセージを表示するプロパティ・ファイルを取得します。メッセージは次のようになります。

ERR_9008 = Error updating project with ID = [{0}].

次に、必要に応じて、すべてのメッセージを次のように翻訳する必要があります。

ERR_9008 = Errorway updatingay ojectpray ithway IDway = [{0}].

クライアント・コードはプロジェクトをID=123で変更しようとして、その変更が失敗した場合、エンドユーザーに例外が発生し、次のエラー・メッセージが表示されます。

Error updating project with ID = [123].

このエラーをローカルの言語(ピッグ・ラテン語など)で表示する場合、エラー・コード9008を選択し、これを翻訳済ファイルで検索して文字列"Errorway updatingay ojectpray ithway IDway = [{0}]."を取得します。次に、メッセージ引数を使用して、トークンを置き換えます。この場合、123という文字列が1つのみ検索されるので、メッセージ引数を1つ見つけることができます。

次のように、エンドユーザー用にカスタムのエラー・メッセージを作成できます。

Errorway updatingay ojectpray ithway IDway = [123].

23.2 ユースケース

この項では、REXクライアントのローカライズのユースケースについて説明します。内容は次のとおりです。

- 23.2.1項「ユースケース: REX例外からのローカライズ済のメッセージの作成」

- 23.2.2項「ユースケース: REX監査メッセージからのローカライズ済のメッセージの作成」

23.2.1 ユースケース: REX例外からのローカライズ済のメッセージの作成

説明

- OpenAPIExceptionから、サーバー・エラー・コードとメッセージ引数を取得します。

- クライアント・ロケールに適切なOpenAPIExceptionsのリソース・バンドルを取得します。

- エラー・コードに関連付けられた文字列を取得し、トークンをメッセージ引数で置き換えます。

サンプル・コード

例23-1 ユースケース: REX例外からのローカライズ済のメッセージの作成

package com.flashline.sample.localization;
import java.net.URL;
import java.text.MessageFormat;
import java.util.ResourceBundle;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class SyncTest {
private static final int INVALID_PROJECT_ID = 8672609;
public static void main(String[] args) throws Exception {
URL lURL = new
URL("http://localhost:9080/registry/services/FlashlineRegistry");
FlashlineRegistry reg = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
AuthToken token = reg.authTokenCreate("admin", "n0pa55w0rd");
try {
Project project = reg.projectRead(token,INVALID_PROJECT_ID);
} catch (OpenAPIException ex) {
String msg =
createMessage(ex.getServerErrorCode(),ex.getMessageArguments());
System.out.println(msg);
}
}
private static String createMessage(int pServerErrorCode, Object[] pArgs) {
ResourceBundle mResourceBundle =
ResourceBundle.getBundle("com.flashline.sample.localization.sync_error
_messages");
return MessageFormat.format(mResourceBundle.getString("ERR
_"+pServerErrorCode), pArgs);
}
}

23.2.2 REX監査メッセージからのローカライズ済のメッセージの作成

説明

- AuditMsgとImpExpJobから、サーバー・エラー・コードとメッセージ引数を取得し、AuditMsgからメッセージ引数を取得します。

- クライアント・ロケールに適切な監査メッセージのリソース・バンドルを取得します。

- エラー・コードに関連付けられた文字列を取得し、トークンをメッセージ引数で置き換えます。

サンプル・コード

例23-2 REX監査メッセージからのローカライズ済のメッセージの作成

package com.flashline.sample.localization;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.text.MessageFormat;
import java.util.ResourceBundle;
import javax.activation.DataHandler;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Stub;
import org.apache.soap.util.mime.ByteArrayDataSource;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.ImpExpJob;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AsyncTest {
public void run() throws MalformedURLException, ServiceException,
OpenAPIException, RemoteException{
URL lURL = new
URL("http://localhost:9080/registry/services/FlashlineRegistry");
FlashlineRegistry reg = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
AuthToken token = reg.authTokenCreate("admin", "n0pa55w0rd");
try {
File lFile = new
File("samples/com/flashline/sample/localization/asynctest.zip");
//Import the file and save to db
InputStream lIS = new FileInputStream(lFile);
ByteArrayDataSource lDataSource = new ByteArrayDataSource(lIS,
"application/x-zip-compressed");
DataHandler lDH = new DataHandler(lDataSource);
// add the attachment
((Stub)reg).addAttachment(lDH);
ImpExpJob lJob = reg.importExecute(token, "flashline", null, "Import Assets
Test", null);
boolean lPassed = false;
for(int i=0; i<1000; i++){
lJob = reg.importStatus(token, lJob);
System.out.println("Import Job ["+lJob.getID()+"] - State:
"+lJob.getState());
String msg =
createMessage(lJob.getAuditMsg().getSummaryID(),lJob.getAuditMsg().getSummaryArgs
());
System.out.println(msg);
if( lJob.getState().equals("completed")){
lPassed = true;
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (lPassed){
System.out.println("Import Completed");
}
} catch (OpenAPIException ex) {
String msg =
createMessage(ex.getServerErrorCode(),ex.getMessageArguments());
System.out.println(msg);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
* @throws ServiceException
* @throws RemoteException
* @throws MalformedURLException
* @throws OpenAPIException
*/
public static void main(String[] args) throws OpenAPIException,
MalformedURLException, RemoteException, ServiceException {
AsyncTest test = new AsyncTest();
test.run();
}
private static String createMessage(int pServerErrorCode, Object[] pArgs) {
ResourceBundle mResourceBundle =
ResourceBundle.getBundle("com.flashline.sample.localization.async_error
_messages");
return MessageFormat.format(mResourceBundle.getString("ERR
_"+pServerErrorCode), pArgs);
}
private String readZip(String pFileName) throws IOException {
int    lNumRead = 0;
char[] lBuf = new char[2048];
StringBuffer lQuery = new StringBuffer();
InputStreamReader lReader = new
InputStreamReader(getClass().getResourceAsStream(pFileName));
while( (lNumRead=lReader.read(lBuf)) != -1){
lQuery.append(lBuf, 0, lNumRead);
}
return lQuery.toString();
}
}

24 通知API

この章では、通知APIのユースケースについて説明します。このユースケースで、新しい読込み通知置換リストを作成する方法およびOracle Enterprise Repositoryの通知を作成する方法について解説します。

この章では、次の項目について説明します。

- 24.1項「概要」

- 24.2項「ユースケース」

24.1 概要

通知サブシステムは、Oracle Enterprise Repositoryの通知を作成する場合に使用する、Webサービス・ベースのメカニズムを提供します。

24.2 ユースケース

この項では、通知APIを使用するユースケースについて説明します。内容は次のとおりです。

- 24.2.1項「ユースケース: 読込み通知置換リストの作成と通知の作成」

24.2.1 ユースケース: 読込み通知置換リストの作成と通知の作成

説明

読込み通知置換リストを作成し、Oracle Enterprise Repositoryの通知を作成します。

サンプル・コード

例24-1 ユースケース: 読込み通知置換リストの作成と通知の作成

String[] lSubstitutions = null;
String[] lRecipients = null;
String lTemplateType = "asset_registered";
NameValue[] lNameValues = null;

lRecipients = new String[] {"recipient@xyz.com"};

try {
//////////////////////////
// read the existing substitutions based on the given template
lSubstitutions = mFlashlineRegistry.notificationSubstitutionsRead(mAuthToken, lTemplateType);

//////////////////////////
// create an array of namevalue pairs; a namevalue pair for each required substitution
lNameValues = new NameValue[lSubstitutions.length];

// populate the namevalues
for(int i=0; i<lSubstitutions.length; i++) {
lNameValues[i] = new NameValue();
lNameValues[i].setName(lSubstitutions[i]);
lNameValues[i].setValue("valueof-"+lSubstitutions[i]);
}

////////////////////////////////////////////
// create the notification
mFlashlineRegistry.notificationCreate(mAuthToken, lTemplateType, lRecipients, lNameValues);

} catch(Exception e) {
fail(e.getMessage());
}

25 ポリシーAPI

この章では、ポリシーAPIのユースケースについて説明します。このユースケースで、新しいポリシーの作成、すべてのポリシーの取得、ポリシー・アサーションの取得または設定、アセットに適用されたポリシーの取得、および適用されたすべてのポリシーまたは特定のポリシーに対してアセットのコンプライアンスの判定を行う方法について解説します。

この章では、次の項目について説明します。

- 25.1項「概要」

- 25.2項「ユースケース」

25.1 概要

REXにより、ポリシーに対して次の機能がサポートされるようになりました。

- ポリシーの問合せ

- アセットにおけるポリシーのステータス(合格/失敗)

- アセットにおけるポリシーの収集ステータス

- ポリシー・アサーションの技術的な説明フィールドからのXMLの取得

- ポリシーも適用されているアセット

- ビューア

- ポリシーでの個々のポリシー・アサーション・リストの保持

- アセットに対する個々のポリシー・アサーションのステータスの設定

- ポリシーの適用とアセットからのポリシーの削除

必要な追加のインポート(すべての例で使用できないものもあります。)

import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.PolicyAssertion;
import com.flashline.registry.openapi.entity.PolicyAssertionResult;

注意:

- Oracle Enterprise Repositoryのポリシーは、ポリシー・タイプに基づいた、特定のタイプのアセットです。ポリシーの作成、変更および削除の詳細は、アセットAPIのユースケースを参照してください。

定義

- アサーション
アサーションは、ポリシー・アセットに追加されたポリシー文です。

- アサーション結果
ポリシーがアセットに適用された場合、ポリシー内の各アサーションをアセット用に評価できます。アサーション結果は、アセットとアサーションのペアで、合格、失敗または不明のいずれかです。

メソッド

FlashlineRegistryサービスで使用可能な次の4つの新しいメソッドがあります。

- assetReadAppliedPolicies()

- assetUpdateAppliedPolicies()

- assetEvaluateAgainstPolicy()

- assetEvaluateAgainstAllPolicies()

25.2 ユースケース

この項では、ポリシーAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 25.2.1項「ユースケース: ポリシーの作成」

- 25.2.2項「ユースケース: すべてのポリシーの取得」

- 25.2.3項「ユースケース: ポリシー・アサーションの取得または設定」

- 25.2.4項「ユースケース: アセットに適用されたポリシーの取得」

- 25.2.5項「ユースケース: アセットに適用されたポリシーの設定」

- 25.2.6項「ユースケース: アセット・コンプライアンスの評価」

25.2.1 ユースケース: ポリシーの作成

説明

新しいポリシーを作成するには、ポリシー・タイプ(102)に基づいた新しいアセットを作成します。

サンプル・コード

例25-1 ユースケース: ポリシーの作成

package com.flashline.sample.policies;
import java.net.URL;
import java.rmi.RemoteException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.PolicyAssertion;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreatePolicySample {
private static final String POLICY_TYPE_NAME_PREFIX = "Policies-Test Policy
Type";
private static final long ASSET_POLICY_ARCHETYPE = 102;
private static final String POLICY_NAME_PREFIX = "Policies-Test Policy";
private static final String POLICY_VERSION = "1.0";
private static FlashlineRegistry mRepository = null;
private static AssetType mPolicyAssetType = null;
private AuthToken mAuthToken = null;
public CreatePolicySample(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
mRepository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
mAuthToken  = mRepository.authTokenCreate(pArgs[1], pArgs[2]);
mPolicyAssetType = createPolicyAssetType();
} catch(Exception e) {
}
}
public static void main(String[] pArgs) {
try {
CreatePolicySample lCreatePolicySample = new CreatePolicySample(pArgs);
// ---------------------------
// create a new policy object
Asset lPolicy = lCreatePolicySample.createPolicy();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Creates an asset policy with a unique name
*/
private Asset createPolicy() throws RemoteException {
String lPolicyName = POLICY_NAME_PREFIX + " " + System.currentTimeMillis();
// ---------------------------
// create a policy (an asset whose assettype's archtype is "102" (policy)
Asset lPolicy = mRepository.assetCreate(mAuthToken, lPolicyName, POLICY
_VERSION, mPolicyAssetType.getID());
lPolicy.setCustomData("<custom-data></custom-data>");
// ---------------------------
// set some polcy assertions
lPolicy.setPolicyAssertions(generateSampleAssertions());
return mRepository.assetUpdate(mAuthToken, lPolicy);
}
/**
* Returns several sample policy assertions for use in testing.
* Located in a function to be shared between test calls.
*
* @return Array of policy assertions
*/
private PolicyAssertion[] generateSampleAssertions() {
PolicyAssertion[] lPolicyAssertions = new PolicyAssertion[3];
String[] lPolicyAssertionNames = {"First", "Second", "Third"};
for (int i=0; i<lPolicyAssertionNames.length; i++) {
String lPolicyAssertionName = "My " + lPolicyAssertionNames[i] + "
Assertion";
lPolicyAssertions[i] = new PolicyAssertion();
lPolicyAssertions[i].setName(lPolicyAssertionName);
lPolicyAssertions[i].setDescription(lPolicyAssertionName + " Description");
lPolicyAssertions[i].setTechnicalDefinition(lPolicyAssertionName + "
Technical Definition");
}
return lPolicyAssertions;
}
/**
* Creates an asset policy asset type with a unique name
*/
private AssetType createPolicyAssetType() throws RemoteException {
String lPolicyTypeName = POLICY_TYPE_NAME_PREFIX + " " +
System.currentTimeMillis();
// ---------------------------
// create a new asset type
AssetType lPolicyType = mRepository.assetTypeCreate(mAuthToken,
lPolicyTypeName);
// ---------------------------
// update the asset type to be a policy asset type by settings the archtype =
102
lPolicyType.setArcheTypeIDs(new long[] {ASSET_POLICY_ARCHETYPE});
return mRepository.assetTypeUpdate(mAuthToken, lPolicyType);
}
}

25.2.2 ユースケース: すべてのポリシーの取得

説明

すべてのポリシーを取得するには、アセット・タイプの原型がポリシーの原型(102)であるアセットをすべて見つけます。

サンプル・コード

例25-2 ユースケース: すべてのポリシーの取得

package com.flashline.sample.policies;
import java.net.URL;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.AssetTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class FindPoliciesSample {
private static FlashlineRegistry mRepository = null;
private static AuthToken mAuthToken = null;
public FindPoliciesSample(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
mRepository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
mAuthToken  = mRepository.authTokenCreate(pArgs[1], pArgs[2]);
} catch(Exception e) {
}
}
public static void main(String[] pArgs) {
try {
FindPoliciesSample lFindPoliciesSample = new FindPoliciesSample(pArgs);
AssetType[] lPolicyAssetTypes = null;
Asset[] lPolicies = null;
AssetTypeCriteria lAssetTypeCriteria = null;
AssetCriteria lAssetCritera = null;
List lListPolicies = new LinkedList();
// -----------------------
// search for all asset types that have the policy (102) archetype
lAssetTypeCriteria = new AssetTypeCriteria();
lAssetTypeCriteria.setArcheTypeCriteria("102");
lPolicyAssetTypes = mRepository.assetTypeQuery(mAuthToken,
lAssetTypeCriteria);
for(int i=0; i<lPolicyAssetTypes.length; i++) {
// -----------------------
// for each policy assettype, search for all assets that are of policy
assettype
lAssetCritera = new AssetCriteria();
lAssetCritera.setAssetTypeCriteria(lPolicyAssetTypes[i].getID());
lPolicies = mRepository.assetQuery(mAuthToken, lAssetCritera);
// -----------------------
// add polices to list
lListPolicies.addAll(Arrays.asList(lPolicies));
}
} catch(Exception e) {
e.printStackTrace();
}
}
}

25.2.3 ユースケース: ポリシー・アサーションの取得または設定

説明

ポリシー・アサーションを取得するには、getPolicyAssertionsを呼び出します。ポリシー・アサーションを設定するには、setPolicyAssertionsを呼び出し、ポリシーを更新します。

サンプル・コード

例25-3 ユースケース: ポリシー・アサーションの取得または設定

package com.flashline.sample.policies;
import java.net.URL;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.PolicyAssertion;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.AssetTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class GetSetPolicyAssertionsSample {
private static FlashlineRegistry mRepository = null;
private static AuthToken mAuthToken = null;
public GetSetPolicyAssertionsSample(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
mRepository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
mAuthToken  = mRepository.authTokenCreate(pArgs[1], pArgs[2]);
} catch(Exception e) {
}
}
public static void main(String[] pArgs) {
try {
GetSetPolicyAssertionsSample lGetSetPolicyAssertionsSample = new
GetSetPolicyAssertionsSample(pArgs);
AssetType[] lPolicyAssetTypes = null;
Asset[] lPolicies = null;
AssetTypeCriteria lAssetTypeCriteria = null;
AssetCriteria lAssetCritera = null;
List lListPolicies = new LinkedList();
// -----------------------
// search for all asset types that have the policy (102) archetype
lAssetTypeCriteria = new AssetTypeCriteria();
lAssetTypeCriteria.setArcheTypeCriteria("102");
lPolicyAssetTypes = mRepository.assetTypeQuery(mAuthToken,
lAssetTypeCriteria);
for(int i=0; i<lPolicyAssetTypes.length; i++) {
// -----------------------
// for each policy assettype, search for all assets that are of policy
assettype
lAssetCritera = new AssetCriteria();
lAssetCritera.setAssetTypeCriteria(lPolicyAssetTypes[i].getID());
lPolicies = mRepository.assetQuery(mAuthToken, lAssetCritera);
// -----------------------
// add polices to list
lListPolicies.addAll(Arrays.asList(lPolicies));
}
if(lListPolicies.size() > 0) {
// -----------------------
// get the first policy
Asset lPolicy = (Asset)lListPolicies.get(0);
// -----------------------
// get the policy assertions
PolicyAssertion[] lPolicyAssetions = lPolicy.getPolicyAssertions();
// -----------------------
// print out the policy assertions
for(int i=0; i<lPolicyAssetions.length; i++) {
lPolicyAssetions[i].toString();
}
// -----------------------
// set different policy assertions
lPolicy.setPolicyAssertions(generateNewAssertions());
// -----------------------
// update the asset with new assertions
mRepository.assetUpdate(mAuthToken, lPolicy);
} else {
System.out.println("No policies were found in OER.");
}
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Returns several sample policy assertions for use in testing.
* Located in a function to be shared between test calls.
*
* @return Array of policy assertions
*/
private static PolicyAssertion[] generateNewAssertions() {
PolicyAssertion[] lPolicyAssertions = new PolicyAssertion[3];
String[] lPolicyAssertionNames = {"NEW-First", "NEW-Second", "NEW-Third"};
for (int i=0; i<lPolicyAssertionNames.length; i++) {
String lPolicyAssertionName = "My " + lPolicyAssertionNames[i] + "
Assertion";
lPolicyAssertions[i] = new PolicyAssertion();
lPolicyAssertions[i].setName(lPolicyAssertionName);
lPolicyAssertions[i].setDescription(lPolicyAssertionName + " Description");
lPolicyAssertions[i].setTechnicalDefinition(lPolicyAssertionName + "
Technical Definition");
}
return lPolicyAssertions;
}
}

25.2.4 ユースケース: アセットに適用されたポリシーの取得

説明

アセットに適用されたポリシーを取得するには、assetReadAppliedPoliciesを呼び出します。

サンプル・コード

例25-4 ユースケース: アセットに適用されたポリシーの取得

package com.flashline.sample.policies;
import java.net.URL;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.PolicyAssertion;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.AssetTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class GetAppliedPoliciesSample {
private static FlashlineRegistry mRepository = null;
private static AuthToken mAuthToken = null;
public GetAppliedPoliciesSample(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
mRepository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
mAuthToken  = mRepository.authTokenCreate(pArgs[1], pArgs[2]);
} catch(Exception e) {
}
}
public static void main(String[] pArgs) {
try {
GetAppliedPoliciesSample lGetAppliedPoliciesSample = new
GetAppliedPoliciesSample(pArgs);
long lAssetId = 50000;
// ---------------
// read the policed appled to asset 50000
Asset[] lAppliedPolicies = mRepository.assetReadAppliedPolicies(mAuthToken,
lAssetId);
} catch(Exception e) {
e.printStackTrace();
}
}
}

25.2.5 ユースケース: アセットに適用されたポリシーの設定

説明

アセットに適用されたポリシーを更新するには、 assetUpdateAppliedPoliciesを呼び出します。

サンプル・コード

例25-5 ユースケース: アセットに適用されたポリシーの更新

package com.flashline.sample.policies;
import java.net.URL;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AssetType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.PolicyAssertion;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.query.AssetTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ApplyPoliciesSample {
private static FlashlineRegistry mRepository = null;
private static AuthToken mAuthToken = null;
public ApplyPoliciesSample(String pArgs[]) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
mRepository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
mAuthToken  = mRepository.authTokenCreate(pArgs[1], pArgs[2]);
} catch(Exception e) {
}
}
public static void main(String[] pArgs) {
try {
ApplyPoliciesSample lApplyPoliciesSample = new ApplyPoliciesSample(pArgs);
long lAssetId = 50000;
long[] lPolicyIds = {50000, 50001, 50002};
mRepository.assetUpdateAppliedPolicies(mAuthToken, lAssetId, lPolicyIds);
} catch(Exception e) {
e.printStackTrace();
}
}
}

25.2.6 ユースケース: アセット・コンプライアンスの評価

説明

指定したポリシーでアセットのコンプライアンスを判定するには、assetEvaluateAgainstPolicyを使用します。適用済のすべてのポリシーに対して、アセットのコンプライアンスを判定するには、assetEvaluateAgainstAllPoliciesを使用します。

サンプル・コード

例25-6 ユースケース: アセット・コンプライアンスの評価

package com.flashline.sample.policies;
import java.net.URL;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class PolicyEvaluationSample {
private static FlashlineRegistry mRepository = null;
private static AuthToken mAuthToken = null;
public PolicyEvaluationSample(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
mRepository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
mAuthToken  = mRepository.authTokenCreate(pArgs[1], pArgs[2]);
} catch(Exception e) {
}
}
public static void main(String[] pArgs) {
try {
PolicyEvaluationSample lPolicyEvalSamp = new PolicyEvaluationSample(pArgs);
long lAssetId = 50000;
long lPolicyId = 50001;
String lEvaluationResult = null;
// --------------------
// evaluate asset id 50000 against policy id 50001
// the return is one of the following values "pass", "fail", "unknown"
lEvaluationResult = mRepository.assetEvaluateAgainstPolicy(mAuthToken,
lAssetId, lPolicyId);
// --------------------
// evaluate asset id 50000 against all polices applied to the asset
// the return is one of the following values "pass", "fail", "unknown"
lEvaluationResult = mRepository.assetEvaluateAgainstAllPolicies(mAuthToken,
lAssetId);
} catch(Exception e) {
e.printStackTrace();
}
}
}

26 プロジェクトAPI

この章では、プロジェクトAPIのユースケースについて説明します。このユースケースで、プロジェクトの作成、読込み、更新、問合せおよび検証を行う方法、プロジェクト・アセットと連携する方法、およびOracle Enterprise Repositoryでプロジェクト・ユーザーに変更を加える方法について解説します。

この章では、次の項目について説明します。

- 26.1項「概要」

- 26.2項「ユースケース」

26.1 概要

この項では、プロジェクトの作成、読込み、更新、問合せおよび検証について説明します。いくつかのエンティティがプロジェクト(関連プロジェクト、ユーザー、使用済アセットおよび作成済アセット)にアタッチされます。これらのエンティティの追加および削除についても、この項で説明します。

必要な追加のインポート(すべての例で使用できないものもあります。)

import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.query.ProjectCriteria;
import com.flashline.registry.openapi.entity.KeyValuePair;
import com.flashline.registry.openapi.entity.Results;
import java.text.SimpleDateFormat;
import com.flashline.registry.openapi.decision.ExtractionReassignmentDecision;
import com.flashline.registry.openapi.entity.ProjectEntities;

26.2 ユースケース

この項では、プロジェクトAPIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 26.2.1項「ユースケース: 新しいプロジェクトの作成」

- 26.2.2項「ユースケース: プロジェクトの読込み」

- 26.2.3項「ユースケース: プロジェクトの検証」

- 26.2.4項「ユースケース: プロジェクトの更新」

- 26.2.5項「ユースケース: プロジェクトの作成済アセットの更新」

- 26.2.6項「ユースケース: プロジェクトからの作成済アセットの削除」

- 26.2.7項「ユースケース: プロジェクトのアセット使用状況の更新」

- 26.2.8項「ユースケース: 非表示のアセットのあるプロジェクトの終了」

- 26.2.9項「ユースケース: プロジェクトへのユーザーと関連プロジェクトの追加」

- 26.2.10項「ユースケース: プロジェクトからの関連プロジェクトとユーザーの削除」

- 26.2.11項「ユースケース: プロジェクトの抽出の更新 - 同じプロジェクトまたは別のプロジェクトにおける別のユーザーへの抽出の再割当て」

26.2.1 ユースケース: 新しいプロジェクトの作成

説明

このメソッドは、プロジェクトの作成、ユーザーの割当ておよび関連プロジェクトの割当てを行います。

プロジェクトのルール

- プロジェクトには、割当て済のプロジェクト・リーダーが含まれている必要があります。

- プロジェクト名は一意である必要があります。nullにすることはできません。

- プロジェクトは部門に割り当てられている必要があります。

- プロジェクトに見積もられた時間は0より大きい整数である必要があります。

サンプル・コード

例26-1 ユースケース: 新しいプロジェクトの作成

package com.flashline.sample.projectapi;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Project lProject = null;
ProjectEntities lProjectEntities = null;
String[] lLeaderIds = null;
//
---------------------------------------------------------------------------------
--
lProject = new Project();
lProjectEntities = new ProjectEntities();
//
-----------------------------------------------------------------------------------
// set the name of project
lProject.setName("NEW_PROJECT_NAME");
//
---------------------------------------------------------------------------------
--
// set the name of the project's department
lProject.setDepartmentID(50000); // a department with id 50000 must
// already exist
//
---------------------------------------------------------------------------------
--
// set the userids of the project leaders
lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
//
---------------------------------------------------------------------------------
--
repository.projectCreate(authToken, lProject, lProjectEntities);
} catch (OpenAPIException oapie) {
System.out.println("\t --- ServerCode = " + oapie.getServerErrorCode());
System.out.println("\t --- Message    = " + oapie.getMessage());
} catch (Exception e) {
System.out.println("\t --- ErrorMessage = " + e.getMessage());
}
}
}

26.2.2 ユースケース: プロジェクトの読込み

説明

プロジェクトを検索し、そのプロジェクトの抽出、作成済アセット、ユーザーおよび関連プロジェクトを読み込みます。

サンプル・コード

例26-2 ユースケース: プロジェクトの読込み

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.query.ProjectCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ReadProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// Read a project
ProjectCriteria projectCriteria = new ProjectCriteria();
projectCriteria.setNameCriteria("Project A");
Project[] projects = repository.projectQuery(authToken,
projectCriteria);
if (projects.length > 0) {
try {
Project projectRead = (Project) projects[0];
Extraction[] lExtractions = repository.projectReadExtractions(
authToken, projectRead);
Asset[] lAssets = repository.projectReadProducedAssets(
authToken, projectRead);
Project[] childProjects = repository.projectReadChildProjects(
authToken, projectRead);
Project[] parentProjects = repository
.projectReadParentProjects(authToken, projectRead);
RegistryUser[] members = repository.projectReadMembers(
authToken, projectRead);
RegistryUser[] leaders = repository.projectReadLeaders(
authToken, projectRead);
} catch (OpenAPIException ex) {
ex.printStackTrace();
}
} else {
System.out.println("No projects found");
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

26.2.3 ユースケース: プロジェクトの検証

説明

プロジェクトを検証すると、ユーザーは、プロジェクトの保存が試行される前に、検証エラーを取得できます。

サンプル・コード

例26-3 ユースケース: プロジェクトの検証

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Department;
import com.flashline.registry.openapi.entity.KeyValuePair;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.Results;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ValidateProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException, ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Project lProject = new Project();
Results lResults = new Results();
String[] lLeaders = { "100" };
Department department = repository.departmentRead(authToken, "Department
Name");
ProjectEntities lProjectEntities = new ProjectEntities();
// -----------------------------------
// set the project data
lProjectEntities.setLeaderIDs(lLeaders);
lProject.setName("Project Name");
lProject.setDepartmentName("DEPARTMENT_NAME");
// -----------------------------------
// Validate a project
lResults = repository.projectValidate(authToken, lProject,
lProjectEntities);
KeyValuePair[] lPairs = lResults.getErrors();
for (int i = 0; i < lPairs.length; i++) {
KeyValuePair lPair = lPairs[i];
System.out.println(lPair.getValue());
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

26.2.4 ユースケース: プロジェクトの更新

説明

特定のプロジェクトに関連付けられた情報およびデータを更新します。

サンプル・コード

例26-4 ユースケース: プロジェクトの更新

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Department;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Project lProject = new Project();
Department department = new Department();
ProjectEntities lProjectEntities = new ProjectEntities();
// -----------------------------------
// creating a new temporary project for sample
Project lSampleProject = createProject(repository, authToken);
// -----------------------------------
// read an existing project
try {
lProject = repository.projectRead(authToken, lSampleProject.getID());
} catch (OpenAPIException ex) {
throw ex;
}
// -----------------------------------
// change project data
lProject.setName("Update "+lProject.getName());
lProject.setDescription("Updated Description");
try {
department = repository.departmentRead(authToken,
"Different Department");
if (department==null) {
System.out.println("dept is null");
department = repository.departmentCreate(authToken, "Different
Department",
"Different Department description...");
}
} catch (OpenAPIException ex) {
throw ex;
}
lProject.setDepartmentID(department.getID());
lProject.setAddByDefault(true);
lProject.setEstimatedHours(50);
java.util.Calendar lCal = new java.util.GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy");
lCal.setTime(sdf.parse("1/1/04"));
lProject.setStartDate(lCal);
// -----------------------------------
// Update the project
lProject = (Project) repository.projectUpdate(authToken,
lProject, lProjectEntities);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
} catch (Exception e) {
}
}
protected static Project createProject(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName("Project "+Calendar.getInstance().getTimeInMillis());
lProject.setDepartmentID(50000); // a department with id 50000 must
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
}

26.2.5 ユースケース: プロジェクトの作成済アセットの更新

説明

ユーザーが、プロジェクトの作成済アセットを設定するために、単一のデータベース・トランザクションを実行できるようになります。

サンプル・コード

例26-5 ユースケース: プロジェクトの作成済アセットの更新

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.APIValidationException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProjectProducedAssets {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
ProjectEntities lProjectEntities = new ProjectEntities();
Asset lSampleAsset1 = createAsset(repository, authToken);
Asset lSampleAsset2 = createAsset(repository, authToken);
String[] assetIds = { ""+lSampleAsset1.getID(), ""+lSampleAsset2.getID() };
try {
// -----------------------------------
// read an existing project
Project projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// set the produced asset ids
lProjectEntities.setAssetIDs(assetIds);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead,
lProjectEntities);
} catch (APIValidationException ex) {
ex.printStackTrace();
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Asset createAsset(FlashlineRegistry repository, AuthToken
authToken)
throws OpenAPIException, RemoteException {
Asset myAsset = repository.assetCreate(authToken,
"My Produced Asset", ""+Calendar.getInstance().getTimeInMillis(), 144);
return myAsset;
}
}

26.2.6 ユースケース: プロジェクトからの作成済アセットの削除

説明

プロジェクトから作成済アセットを削除します。

サンプル・コード

例26-6 ユースケース: プロジェクトからの作成済アセットの削除

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.APIValidationException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class RemoveProducedAssetsFromProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
ProjectEntities lProjectEntities = new ProjectEntities();
String[] assetIds = { "569", "589" };
try {
// -----------------------------------
// read an existing project
Project projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// set the remove assets ids
lProjectEntities.setRemovedAssetIDs(assetIds);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead,
lProjectEntities);
} catch (APIValidationException ex) {
ex.printStackTrace();
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}
As an alternative, produced assets may be removed by specifying the assets that
are to remain on the project.
Sample Code:
package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class RemoveProducedAssetsFromProject2 {
public static void main(String pArgs[])
throws OpenAPIException, RemoteException, ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// An alternate way of removing produced assets is to specify which assets
// you wish to remain on the project.
String[] assetIDs = { "569" };
ProjectEntities lEntities = new ProjectEntities();
Project projectRead = new Project();
try {
// -----------------------------------
// read an existing project
projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// set the entities of the produced assets
lEntities.setAssetIDs(assetIDs);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lEntities);
} catch (OpenAPIException ex) {
ex.printStackTrace();
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

26.2.7 ユースケース: プロジェクトのアセット使用状況の更新

説明

ユーザーが、プロジェクトに関連付けられた抽出を拒否できるようになります。

サンプル・コード

例26-7 ユースケース: プロジェクトのアセット使用状況の更新

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.List;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectAsset;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProjectExtractions {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// Update a project's extractions
ProjectEntities lProjectEntities = null;
try {
// -----------------------------------
// read an existing project
Project projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// get an extraction or create one
long lExtractionID = 0;
ProjectAsset[] lProjectAssets = projectRead.getAssets();
if (lProjectAssets!=null && lProjectAssets.length>0) {
lProjectAssets[0].getStatus();
lExtractionID = lProjectAssets[0].getID();
} else {
lProjectEntities = new ProjectEntities();
lExtractionID = repository.assetRead(authToken, 569).getID();
String[] lAssetIDs = { ""+lExtractionID };
lProjectEntities.setAssetIDs(lAssetIDs);
repository.projectUpdate(authToken, projectRead, lProjectEntities);
}
// -----------------------------------
// set the rejected assets ids
String[] rejectedIds = null;
projectRead = repository.projectRead(authToken, 50000); // reload modified
project
Extraction[] lExtractions = repository.projectReadExtractions(authToken,
projectRead);
rejectedIds = new String[lExtractions.length];
for (int i=0; lExtractions!=null && i<lExtractions.length; i++) {
rejectedIds[i] = ""+lExtractions[i].getID();
}
lProjectEntities = new ProjectEntities();
lProjectEntities.setRejectedIDs(rejectedIds);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lProjectEntities);
} catch (OpenAPIException ex) {
ex.printStackTrace();
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

26.2.8 ユースケース: 非表示のアセットのあるプロジェクトの終了

説明

プロジェクトを終了する際に、DEPLOYEDまたはREJECTEDとして指定されていないプロジェクトで使用されたアセットの使用状況ステータスを更新する必要があります。

ただし、AquaLogic Enterprise Repositoryの拡張ロール・ベース・アクセス制御(RBAC)設定では、プロジェクト・リーダーはプロジェクトで使用されたすべてのアセットを表示できないことがあります。

プロジェクトが終了した場合、拒否されていない非表示のアセットは、自動的にDEPLOYEDとして指定されます。

AquaLogic Enterprise Repositoryを使用している場合、プロジェクト・リーダーは、プロジェクトに非表示のアセットが含まれていることを通知され、非表示のアセットの使用状況ステータスを更新してアセット値の調査を完了するために必要なアクセス権を持っているユーザーに問い合せる機会を与えられます。適切なユーザーが必要なアクションを行ったことをプロジェクト・リーダーが認識すると、プロジェクトを終了できます。

次の例に、プロジェクトの終了時にプロジェクト・リーダーに非表示となっているアセットのステータスを更新するための、プログラムでのFLEXメカニズムを示します。

サンプル・コード

例26-8 ユースケース: 非表示のアセットのあるプロジェクトの終了

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.List;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectAsset;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProjectExtractions {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// Update a project's extractions
ProjectEntities lProjectEntities = null;
try {
// -----------------------------------
// read an existing project
Project projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// get an extraction or create one
long lExtractionID = 0;
ProjectAsset[] lProjectAssets = projectRead.getAssets();
if (lProjectAssets!=null && lProjectAssets.length>0) {
lProjectAssets[0].getStatus();
lExtractionID = lProjectAssets[0].getID();
} else {
lProjectEntities = new ProjectEntities();
lExtractionID = repository.assetRead(authToken, 569).getID();
String[] lAssetIDs = { ""+lExtractionID };
lProjectEntities.setAssetIDs(lAssetIDs);
repository.projectUpdate(authToken, projectRead, lProjectEntities);
}
// -----------------------------------
// set the rejected assets ids
String[] rejectedIds = null;
projectRead = repository.projectRead(authToken, 50000); // reload modified
project
Extraction[] lExtractions = repository.projectReadExtractions(authToken,
projectRead);
rejectedIds = new String[lExtractions.length];
for (int i=0; lExtractions!=null && i<lExtractions.length; i++) {
rejectedIds[i] = ""+lExtractions[i].getID();
}
lProjectEntities = new ProjectEntities();
lProjectEntities.setRejectedIDs(rejectedIds);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lProjectEntities);
} catch (OpenAPIException ex) {
ex.printStackTrace();
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

26.2.9 ユースケース: プロジェクトへのユーザーと関連プロジェクトの追加

説明

ユーザーをプロジェクトに追加するプロセスは、関連ユーザーを追加するプロセスと同様です。

サンプル・コード

例26-9 ユースケース: プロジェクトへのユーザーと関連プロジェクトの追加

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.APIValidationException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AddUsersAndRelatedProjectsToProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// Add users and related projects to a project
Project projectRead = new Project();
String[] newLeaderIDs = { "99" };
ProjectEntities lEntities = new ProjectEntities();
try {
// -----------------------------------
// read an existing project
projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// create two new projects
Project lParentProject = createNewProject(repository, authToken, "My
Parent Project");
Project lChildProject = createNewProject(repository, authToken, "My Child
Project");
String[] newParentIDs = { ""+lParentProject.getID() };
String[] newChildIDs = { ""+lChildProject.getID() };
// -----------------------------------
// create two new users
RegistryUser lUserOne = createNewUser(repository, authToken, "one");
RegistryUser lUserTwo = createNewUser(repository, authToken, "two");
String[] newMemberIDs = { ""+lUserOne.getID(), ""+lUserTwo.getID() };
// -----------------------------------
// set the added leader ids
lEntities.setAddedLeaderIDs(newLeaderIDs);
// -----------------------------------
// set the added member ids
lEntities.setAddedMemberIDs(newMemberIDs);
// -----------------------------------
// set the added children project ids
lEntities.setAddedChildIDs(newChildIDs);
// -----------------------------------
// set the added parent project ids
lEntities.setAddedParentIDs(newParentIDs);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lEntities);
} catch (OpenAPIException ex) {
throw ex;
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Project createNewProject(FlashlineRegistry repository,
AuthToken authToken, String pName)
throws APIValidationException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName(pName+" "+Calendar.getInstance().getTimeInMillis()); // force
uniqueness
lProject.setDepartmentID(50000); // a department with id 50000 must already
exist
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
protected static RegistryUser createNewUser(FlashlineRegistry repository,
AuthToken authToken, String pUserName)
throws APIValidationException, RemoteException {
String lUserName = pUserName + Calendar.getInstance().getTimeInMillis(); //
force uniqueness
RegistryUser lRegistryUser = repository.userCreate(authToken, lUserName,
"First", pUserName,
pUserName+"@example.com", pUserName, false, false, false);
return lRegistryUser;
}
}

次に例に、ユーザーと関連プロジェクトの別の追加方法を示します。この例では、追加済のユーザーまたはプロジェクトは、プロジェクトに割当て済のユーザーまたはプロジェクトのみです。IDの文字列配列に含まれていないユーザーまたはプロジェクトは、プロジェクトから削除されます。この方法を選択すると、ユーザーの追加と削除が1つの手順で行えます。

サンプル・コード

例26-10 ユースケース: プロジェクトに対するユーザーの追加と削除

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.APIValidationException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class AddUsersAndRelatedProjectsToProject2 {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// The following example presents an alternate way of adding users and
// related projects.
// In this example the added users/projects are the ONLY
// users/projects assigned to the project.
// Any users/projects not included in the String Array of IDs are
// removed from the project.
// This option combines adding and removing users into one step.
Project projectRead = new Project();
String[] newLeaderIDs = { "50003" };
ProjectEntities lEntities = new ProjectEntities();
try {
// -----------------------------------
// read an existing project
projectRead = repository.projectRead(authToken, 50000);
// -----------------------------------
// create two new projects
Project lParentProject = createNewProject(repository, authToken, "My
Parent Project");
Project lChildProject = createNewProject(repository, authToken, "My Child
Project");
String[] newParentIDs = { ""+lParentProject.getID() };
String[] newChildIDs = { ""+lChildProject.getID() };
// -----------------------------------
// create two new users
RegistryUser lUserOne = createNewUser(repository, authToken, "one");
RegistryUser lUserTwo = createNewUser(repository, authToken, "two");
String[] newMemberIDs = { ""+lUserOne.getID(), ""+lUserTwo.getID() };
// -----------------------------------
// set the leader ids
lEntities.setLeaderIDs(newLeaderIDs);
// -----------------------------------
// set the member ids
lEntities.setMemberIDs(newMemberIDs);
// -----------------------------------
// set the children project ids
lEntities.setChildIDs(newChildIDs);
// -----------------------------------
// set the parent project ids
lEntities.setParentIDs(newParentIDs);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lEntities);
} catch (OpenAPIException ex) {
throw ex;
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Project createNewProject(FlashlineRegistry repository,
AuthToken authToken, String pName)
throws APIValidationException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName(pName+" "+Calendar.getInstance().getTimeInMillis()); // force
uniqueness
lProject.setDepartmentID(50000); // a department with id 50000 must already
exist
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
protected static RegistryUser createNewUser(FlashlineRegistry repository,
AuthToken authToken, String pUserName)
throws APIValidationException, RemoteException {
String lUserName = pUserName + Calendar.getInstance().getTimeInMillis(); //
force uniqueness
RegistryUser lRegistryUser = repository.userCreate(authToken, lUserName,
"First", pUserName,
pUserName+"@example.com", pUserName, false, false, false);
return lRegistryUser;
}
}

26.2.10 ユースケース: プロジェクトからの関連プロジェクトとユーザーの削除

説明

ユーザーをプロジェクトから削除するプロセスは、関連プロジェクトを削除するプロセスと同様です。

サンプル・コード

例26-11 ユースケース: プロジェクトからの関連プロジェクトとユーザーの削除

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.decision.ExtractionReassignmentDecision;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class RemoveRelatedProjectsAndUsersFromProject {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
long lParentProjectID = createProject(repository, authToken).getID();
long lChildProject1ID = createProject(repository, authToken).getID();
long lChildProject2ID = createProject(repository, authToken).getID();
long lUser1ID = createUser(repository, authToken).getID();
long lUser2ID = createUser(repository, authToken).getID();
long lUser3ID = createUser(repository, authToken).getID();
long lUser4ID = createUser(repository, authToken).getID();
long lUser5ID = createUser(repository, authToken).getID();
long lUser6ID = createUser(repository, authToken).getID();
// -----------------------------------
// Remove related projects and users from a project
Project projectRead = new Project();
String[] removedParentProjectIDs = { ""+lParentProjectID };
String[] removedChildProjectIDs = { ""+lChildProject1ID, ""+lChildProject2ID
};
String[] removedLeaderIDs = { ""+lUser1ID };
String[] removedMemberIDs = { ""+lUser2ID };
ProjectEntities lEntities = new ProjectEntities();
try {
projectRead = repository.projectRead(authToken, 50000);
} catch (OpenAPIException ex) {
throw ex;
}
try {
// -----------------------------------
// set the removed parent project ids
lEntities.setRemovedParentIDs(removedParentProjectIDs);
// -----------------------------------
// set the removed children project ids
lEntities.setRemovedChildIDs(removedChildProjectIDs);
// -----------------------------------
// set the remove leader ids
lEntities.setRemovedLeaderIDs(removedLeaderIDs);
// -----------------------------------
// set the removed member ids
lEntities.setRemovedMemberIDs(removedMemberIDs);
// -----------------------------------
// set the exraction reassignment decisions
ExtractionReassignmentDecision[] decisions = new
ExtractionReassignmentDecision[2];
ExtractionReassignmentDecision decision = new
ExtractionReassignmentDecision();
decision.setUserID(lUser3ID);
decision.setReassignUserID(lUser4ID);
decisions[0] = decision;
decision = new ExtractionReassignmentDecision();
decision.setUserID(lUser5ID);
decision.setReassignUserID(lUser6ID);
decisions[1] = decision;
// -----------------------------------
// set the userid for the reassigned extracions
lEntities.setReassignIDs(decisions);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lEntities);
} catch (OpenAPIException ex) {
throw ex;
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Project createProject(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName("Project "+Calendar.getInstance().getTimeInMillis());
lProject.setDepartmentID(50000); // a department with id 50000 must
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

別の方法として、次の例では、削除するユーザーまたはプロジェクトを指定するのではなく、残すユーザーまたはプロジェクトを指定します。

サンプル・コード

例26-12 ユースケース: プロジェクトに特定のユーザーとプロジェクトを残す

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.decision.ExtractionReassignmentDecision;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class RemoveRelatedProjectsAndUsersFromProject2 {
public static void main(String pArgs[])
throws OpenAPIException, RemoteException, ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// As an alternative, the following example tells the system which
// users/projects to keep,
// rather than telling it which ones to remove.
Project projectRead = new Project();
String[] lParentProjectIDs = { "50003" };
String[] lChildProjectIDs = { "50002", "50001" };
String[] lLeaderIDs = { "50001" };
String[] lMemberIDs = { "50005" };
ProjectEntities lEntities = new ProjectEntities();
try {
projectRead = repository.projectRead(authToken, 50000);
} catch (OpenAPIException ex) {
throw ex;
}
try {
// -----------------------------------
// set the parent project ids
lEntities.setParentIDs(lParentProjectIDs);
// -----------------------------------
// set the children project ids
lEntities.setChildIDs(lChildProjectIDs);
// -----------------------------------
// set the leader ids
lEntities.setLeaderIDs(lLeaderIDs);
// -----------------------------------
// set the member ids
lEntities.setMemberIDs(lMemberIDs);
// -----------------------------------
// set the extraction reassignment decisions
ExtractionReassignmentDecision[] decisions = new
ExtractionReassignmentDecision[2];
ExtractionReassignmentDecision decision = new
ExtractionReassignmentDecision();
decision.setUserID(50011);
decision.setReassignUserID(50001);
decisions[0] = decision;
decision = new ExtractionReassignmentDecision();
decision.setUserID(50012);
decision.setReassignUserID(50005);
decisions[1] = decision;
// -----------------------------------
// set the userid for the reassigned extracions
lEntities.setReassignIDs(decisions);
// -----------------------------------
// update the project
repository.projectUpdate(authToken, projectRead, lEntities);
} catch (OpenAPIException ex) {
throw ex;
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

26.2.11 ユースケース: プロジェクトの抽出の更新 - 同じプロジェクトまたは別のプロジェクトにおける別のユーザーへの抽出の再割当て

説明

抽出はユーザー間で再度割り当てることができます。抽出を再度割り当てられるユーザーは、同じプロジェクトまたは別のプロジェクトに存在できます。

サンプル・コード

例26-13 ユースケース: プロジェクトの抽出の更新

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.decision.ExtractionReassignmentDecision;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProjectExtractionswithReassign {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Project lProject = null;
long currentProjectID = 50000; // an existing project with id 50000 must
// exist
long someProjectID = 0; // an existing project with id 50001 must
// exist where re-extractions are being
// assigned to
long extractionID = 50002; // the id of the extraction being reassigned
long reassignUserID = 0; // the id of the user being assigned to this
// extraction
// -----------------------------------
// Update a project's extractions - reassign extractions to a different
// user on the same or different project
// -----------------------------------
// read a project, get a sample project
lProject = repository.projectRead(authToken, currentProjectID);
someProjectID = createProject(repository, authToken).getID();
// -----------------------------------
// get a member of the project to reassign
Project lReassignProject = repository.projectRead(authToken, someProjectID);
String[] memberIDs = repository.projectReadMemberIDs(authToken,
lReassignProject);
if (memberIDs!=null && memberIDs.length>0) {
reassignUserID = Long.parseLong(memberIDs[0]);
}
// -----------------------------------
// if no members exist, create a user and add them
if (reassignUserID==0) {
ProjectEntities lProjectEntities = new ProjectEntities();
reassignUserID = createUser(repository, authToken).getID();
String[] newMemberIDs = { ""+reassignUserID };
lProjectEntities.setAddedMemberIDs(newMemberIDs);
repository.projectUpdate(authToken, lReassignProject, lProjectEntities);
}
// -----------------------------------
// set the extraction reassignment decision
ExtractionReassignmentDecision[] lDecisions = new
ExtractionReassignmentDecision[1];
ExtractionReassignmentDecision lDecision = new
ExtractionReassignmentDecision();
// -----------------------------------
// set the reassigned project id
lDecision.setProjectID(someProjectID);
// -----------------------------------
// specify which extraction (by id)
lDecision.setExtractionID(extractionID);
// -----------------------------------
// set the reassigned user id
lDecision.setReassignUserID(reassignUserID);
lDecisions[0] = lDecision;
// -----------------------------------
// reassign project extractions
repository.projectReassignExtractions(authToken, lProject,
lDecisions);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Project createProject(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName("Project "+Calendar.getInstance().getTimeInMillis());
lProject.setDepartmentID(50000); // a department with id 50000 must
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

26.2.12 ユースケース: プロジェクトのユーザーの更新 - 別のプロジェクトへのユーザーとその抽出の再割当て

説明

ユーザーとその抽出を別のプロジェクトに再度割り当てます。

サンプル・コード

例26-14 ユースケース: 別のプロジェクトへのプロジェクト・ユーザーとユーザーの抽出の再割当て

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.decision.ExtractionReassignmentDecision;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProjectExtractionswithReassign {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Project lProject = null;
long currentProjectID = 50000; // an existing project with id 50000 must
// exist
long someProjectID = 0; // an existing project with id 50001 must
// exist where re-extractions are being
// assigned to
long extractionID = 50002; // the id of the extraction being reassigned
long reassignUserID = 0; // the id of the user being assigned to this
// extraction
// -----------------------------------
// Update a project's extractions - reassign extractions to a different
// user on the same or different project
// -----------------------------------
// read a project, get a sample project
lProject = repository.projectRead(authToken, currentProjectID);
someProjectID = createProject(repository, authToken).getID();
// -----------------------------------
// get a member of the project to reassign
Project lReassignProject = repository.projectRead(authToken, someProjectID);
String[] memberIDs = repository.projectReadMemberIDs(authToken,
lReassignProject);
if (memberIDs!=null && memberIDs.length>0) {
reassignUserID = Long.parseLong(memberIDs[0]);
}
// -----------------------------------
// if no members exist, create a user and add them
if (reassignUserID==0) {
ProjectEntities lProjectEntities = new ProjectEntities();
reassignUserID = createUser(repository, authToken).getID();
String[] newMemberIDs = { ""+reassignUserID };
lProjectEntities.setAddedMemberIDs(newMemberIDs);
repository.projectUpdate(authToken, lReassignProject, lProjectEntities);
}
// -----------------------------------
// set the extraction reassignment decision
ExtractionReassignmentDecision[] lDecisions = new
ExtractionReassignmentDecision[1];
ExtractionReassignmentDecision lDecision = new
ExtractionReassignmentDecision();
// -----------------------------------
// set the reassigned project id
lDecision.setProjectID(someProjectID);
// -----------------------------------
// specify which extraction (by id)
lDecision.setExtractionID(extractionID);
// -----------------------------------
// set the reassigned user id
lDecision.setReassignUserID(reassignUserID);
lDecisions[0] = lDecision;
// -----------------------------------
// reassign project extractions
repository.projectReassignExtractions(authToken, lProject,
lDecisions);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Project createProject(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName("Project "+Calendar.getInstance().getTimeInMillis());
lProject.setDepartmentID(50000); // a department with id 50000 must
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

26.2.13 ユースケース: プロジェクトのユーザーの更新 - 別のプロジェクトへのユーザーのみ(ユーザーの抽出は除く)の再割当て

説明

ユーザーはプロジェクト間で再度割り当てることができます。抽出を伴わないでユーザーを移動する場合、ユーザーを再度割り当てる前に、まず、抽出を別のプロジェクト・メンバーに再度割り当てる必要があります。

サンプル・コード

例26-15 ユースケース: 別のプロジェクトへのユーザーのみの再割当て

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.decision.ExtractionReassignmentDecision;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.ProjectUserType;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateProjectUserWithReassign2 {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1], pArgs[2]);
Project lProject = null;
Project someProject = null; // the id the other project
Project reassignProject = null; // the id of the project being reassigned
long currentProjectID = 50000; // the id of the current project
long extractionID = 0; // the id of the extraction
long extractionReassignUserID = 0; // the id of the user being
// reassigned
long projectReassignUserID = 0; // the id of the user being reassigned
// -----------------------------------
// Update a project's user - reassign only the user (not their
// extractions) to another project
// -----------------------------------
// read a project
lProject = repository.projectRead(authToken, currentProjectID);
// -----------------------------------
// create some projects
someProject = createProject(repository, authToken);
reassignProject = createProject(repository, authToken);
// -----------------------------------
// get a member of the project to reassign
String[] memberIDs = repository.projectReadMemberIDs(authToken, lProject);
if (memberIDs!=null && memberIDs.length>0) {
extractionReassignUserID = Long.parseLong(memberIDs[0]);
if (memberIDs.length>1) {
projectReassignUserID = Long.parseLong(memberIDs[0]);
}
}
// -----------------------------------
// if no members exist, create users and add them
if (extractionReassignUserID==0) {
ProjectEntities lProjectEntities = new ProjectEntities();
extractionReassignUserID = createUser(repository, authToken).getID();
lProjectEntities.setAddedMemberIDs(new String[]{
""+extractionReassignUserID });
repository.projectUpdate(authToken, lProject, lProjectEntities);
}
if (projectReassignUserID==0) {
ProjectEntities lProjectEntities = new ProjectEntities();
projectReassignUserID = createUser(repository, authToken).getID();
lProjectEntities.setAddedMemberIDs(new String[]{ ""+projectReassignUserID
});
repository.projectUpdate(authToken, lProject, lProjectEntities);
}
// get extraction for user or create one
Extraction[] lAssetExtractions =
repository.projectReadExtractions(authToken, lProject);
if (lAssetExtractions!=null && lAssetExtractions.length>0) {
extractionID = lAssetExtractions[0].getID();
}
if (extractionID==0) {
// create new extraction
ProjectEntities lProjectEntities = new ProjectEntities();
Asset lAsset = repository.assetRead(authToken, 569);
lProjectEntities.setAssetIDs(new String[]{ ""+lAsset.getID() });
repository.projectUpdate(authToken, lProject, lProjectEntities);
}
// -----------------------------------
// add users to reassign project (if they aren't already)
{
Project lReassignProject = repository.projectRead(authToken,
reassignProject.getID());
boolean isMemberExtraction = false, isMemberProject = false;
String[] reassignMemberIDs = repository.projectReadMemberIDs(authToken,
lReassignProject);
for (int i=0; reassignMemberIDs!=null && i<reassignMemberIDs.length; i++)
{
if
(Long.parseLong(reassignMemberIDs[i].trim())==extractionReassignUserID)
isMemberExtraction = true;
if (Long.parseLong(reassignMemberIDs[i].trim())==projectReassignUserID)
isMemberProject = true;
}
if (!isMemberExtraction) {
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedMemberIDs(new String[]{
""+extractionReassignUserID });
repository.projectUpdate(authToken, lReassignProject, lProjectEntities);
}
if (!isMemberProject) {
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedMemberIDs(new String[]{
""+projectReassignUserID });
repository.projectUpdate(authToken, lReassignProject, lProjectEntities);
}
}
// -----------------------------------
// add users to some project (if they aren't already)
{
Project lSomeProject = repository.projectRead(authToken,
someProject.getID());
boolean isMemberExtraction = false, isMemberProject = false;
String[] SomeMemberIDs = repository.projectReadMemberIDs(authToken,
lSomeProject);
for (int i=0; SomeMemberIDs!=null && i<SomeMemberIDs.length; i++) {
if (Long.parseLong(SomeMemberIDs[i].trim())==extractionReassignUserID)
isMemberExtraction = true;
if (Long.parseLong(SomeMemberIDs[i].trim())==projectReassignUserID)
isMemberProject = true;
}
if (!isMemberExtraction) {
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedMemberIDs(new String[]{
""+extractionReassignUserID });
repository.projectUpdate(authToken, lSomeProject, lProjectEntities);
}
if (!isMemberProject) {
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedMemberIDs(new String[]{
""+projectReassignUserID });
repository.projectUpdate(authToken, lSomeProject, lProjectEntities);
}
}
// -----------------------------------
// set extraction reassignment decision
ExtractionReassignmentDecision[] lDecisions = new
ExtractionReassignmentDecision[1];
ExtractionReassignmentDecision lDecision = new
ExtractionReassignmentDecision();
// set the reassign decision's project id
lDecision.setProjectID(someProject.getID());
// set the reassign decision's extraction id
lDecision.setExtractionID(extractionID);
// set the reassign decision's reassigned user ids
lDecision.setReassignUserID(extractionReassignUserID);
lDecisions[0] = lDecision;
// reassign project extractions
repository.projectReassignExtractions(authToken, lProject,
lDecisions);
// verify reassignment
lProject = repository.projectRead(authToken, currentProjectID);
ProjectUserType userType = repository
.projectReadUserTypes(authToken);
lDecisions = new ExtractionReassignmentDecision[1];
lDecision = new ExtractionReassignmentDecision();
lDecision.setProjectID(reassignProject.getID());
lDecision.setReassignUserID(projectReassignUserID);
lDecision.setReassignType(userType.getUserTypeLeader());
lDecisions[0] = lDecision;
repository.projectReassignUsers(authToken, lProject, lDecisions);
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static Project createProject(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
Project lProject = new Project();
ProjectEntities lProjectEntities = new ProjectEntities();
lProject.setName("Project "+Calendar.getInstance().getTimeInMillis());
lProject.setDepartmentID(50000); // a department with id 50000 must
String[] lLeaderIds = new String[] { "99" };
lProjectEntities.setLeaderIDs(lLeaderIds);
lProject = repository.projectCreate(authToken, lProject, lProjectEntities);
return lProject;
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

26.2.14 ユースケース: プロジェクトとアセット用に指定された値の読込み

説明

プロジェクトとアセット用に値を指定された詳細情報を読み込みます。

サンプル・コード

例26-16 ユースケース: プロジェクトとアセット用に指定された値の読込み

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Answer;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Choice;
import com.flashline.registry.openapi.entity.ChoiceList;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.ExtractionDownload;
import com.flashline.registry.openapi.entity.ProjectAssetValue;
import com.flashline.registry.openapi.entity.Question;
import com.flashline.registry.openapi.entity.SurveyTaken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ReadValueProvidedForProjectAndAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------
// Read the value provided for a project and asset
long projectid = 50000; // the id of the project
long assetid = 569; // the id of the asset
// -----------------------------------
// Make sure the project has an extraction
long[] lAssetIDs = { assetid };
ExtractionDownload[] extractionDownload =
repository.extractionCreate(authToken, projectid, lAssetIDs);
Extraction extraction =
repository.extractionReadByProjectAndAsset(authToken, projectid, assetid);
// -----------------------------------
// take survey and update
SurveyTaken surveyTaken = takeSurvey(repository, authToken, extraction);
surveyTaken = repository.surveyTakenUpdate(authToken, surveyTaken);
extraction = repository.extractionUpdateSurvey(authToken, extraction,
surveyTaken);
// -----------------------------------
// read project asset values
ProjectAssetValue[] projectAssetValues = repository
.projectAssetValueRead(authToken, projectid, assetid);
if (projectAssetValues != null) {
for (int i = 0; i < projectAssetValues.length; i++) {
ProjectAssetValue projectAssetValue = projectAssetValues[i];
projectAssetValue.getUserInfo().getUserName();
projectAssetValue.getExtractionDate();
projectAssetValue.getExtractionStatus();
projectAssetValue.getPredictedValue();
projectAssetValue.isPredictedValueSelected();
projectAssetValue.getConsumerFoundValue();
projectAssetValue.getConsumerUsage();
projectAssetValue.getConsumerValue();
projectAssetValue.isConsumerValueSelected();
projectAssetValue.getProjectLeadUsage();
projectAssetValue.getProjectLeadValue();
projectAssetValue.isProjectLeadValueSelected();
projectAssetValue.getAssetUsage();
projectAssetValue.getAssetValue();
projectAssetValue.getAssetValueSource();
}
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static SurveyTaken takeSurvey(FlashlineRegistry repository, AuthToken
authToken, Extraction extraction)
throws OpenAPIException, RemoteException {
// -----------------------------------
// take survey
SurveyTaken surveyTaken = repository.surveyTakenRead(authToken, extraction);
Question[] questions = repository.surveyReadQuestions(authToken);
ChoiceList choiceList = null;
Choice[] choices = null;
Answer[] answers = new Answer[4];
for(int i=0; i<answers.length; i++){
answers[i] = new Answer();
}
// -----------------------------------
//Sort questions
Question[] sortedQuestions = new Question[4];
for (int i=0;i<questions.length;i++) {
if (questions[i].getId()==100) {
sortedQuestions[0] = questions[i];
}
if (questions[i].getId()==101) {
sortedQuestions[1] = questions[i];
}
if (questions[i].getId()==102) {
sortedQuestions[2] = questions[i];
}
if (questions[i].getId()==103) {
sortedQuestions[3] = questions[i];
}
}
answers[0].setQuestionId(sortedQuestions[0].getId());
choiceList = sortedQuestions[0].getChoiceList();
choices = choiceList.getChoices();
answers[0].setChoiceId(choices[0].getId());
answers[0].setValue(choices[0].getValue());
answers[1].setQuestionId(sortedQuestions[1].getId());
answers[1].setChoiceId(0);
answers[1].setValue("100");
answers[2].setQuestionId(sortedQuestions[2].getId());
answers[2].setChoiceId(0);
answers[2].setValue("200");
answers[3].setQuestionId(sortedQuestions[3].getId());
choiceList = sortedQuestions[3].getChoiceList();
choices = choiceList.getChoices();
answers[3].setChoiceId(choices[3].getId());
answers[3].setValue(choices[3].getValue());
surveyTaken.setAnswers(answers);
return surveyTaken;
}
}

26.2.15 ユースケース: プロジェクトとアセット用に指定された値の更新 - 予測値の使用

説明

予測値を使用して、プロジェクトとアセット用に指定された値を更新します。

サンプル・コード

例26-17 ユースケース: プロジェクトとアセット用に指定された値の更新 - 予測値の使用

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Answer;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Choice;
import com.flashline.registry.openapi.entity.ChoiceList;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.ExtractionDownload;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectAssetValue;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.Question;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.entity.SurveyTaken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateValueProvidedForProjectAndUserWithPredictedValue {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(
pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1], pArgs[2]);
// -----------------------------------
// Update the value provided for a project and asset - use predicted value
long userid = repository.userReadByAuthToken(authToken).getID(); // the id
of the user
long projectid = 50000; // the id of the project
long assetid = 569; // the id of the asset
repository.testExtractionResetDatabaseForProject(projectid); // for sample
*only*
Project lProject = repository.projectRead(authToken, projectid);
// -----------------------------------
// if no user id exists, create a user
if (userid==0) {
userid = createUser(repository, authToken).getID();
}
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedLeaderIDs(new String[]{ ""+userid });
repository.projectUpdate(authToken, lProject, lProjectEntities);
// -----------------------------------
// Get a RegistryUser for a user
RegistryUser user = repository.userRead(authToken, userid);
// -----------------------------------
// Make sure the project has an extraction
long[] lAssetIDs = { assetid };
ExtractionDownload[] extractionDownload =
repository.extractionCreate(authToken, projectid, lAssetIDs);
Extraction extraction =
repository.extractionReadByProjectAndAsset(authToken, projectid, assetid);
// -----------------------------------
// take survey
SurveyTaken surveyTaken = repository.surveyTakenRead(authToken, extraction);
Question[] questions = repository.surveyReadQuestions(authToken);
ChoiceList choiceList = null;
Choice[] choices = null;
Answer[] answers = new Answer[4];
for(int i=0; i<answers.length; i++){
answers[i] = new Answer();
}
// -----------------------------------
//Sort questions
Question[] sortedQuestions = new Question[4];
for (int i=0;i<questions.length;i++) {
if (questions[i].getId()==100) {
sortedQuestions[0] = questions[i];
}
if (questions[i].getId()==101) {
sortedQuestions[1] = questions[i];
}
if (questions[i].getId()==102) {
sortedQuestions[2] = questions[i];
}
if (questions[i].getId()==103) {
sortedQuestions[3] = questions[i];
}
}
answers[0].setQuestionId(sortedQuestions[0].getId());
choiceList = sortedQuestions[0].getChoiceList();
choices = choiceList.getChoices();
answers[0].setChoiceId(choices[0].getId());
answers[0].setValue(choices[0].getValue());
answers[1].setQuestionId(sortedQuestions[1].getId());
answers[1].setChoiceId(0);
answers[1].setValue("100");
answers[2].setQuestionId(sortedQuestions[2].getId());
answers[2].setChoiceId(0);
answers[2].setValue("200");
answers[3].setQuestionId(sortedQuestions[3].getId());
choiceList = sortedQuestions[3].getChoiceList();
choices = choiceList.getChoices();
answers[3].setChoiceId(choices[3].getId());
answers[3].setValue(choices[3].getValue());
surveyTaken.setAnswers(answers);
// -----------------------------------
// update survey
surveyTaken = repository.surveyTakenUpdate(authToken, surveyTaken);
extraction = repository.extractionUpdateSurvey(authToken, extraction,
surveyTaken);
// -----------------------------------
// Get a ProjectAssetValue for a project asset and user.
ProjectAssetValue projectAssetValue = repository
.projectAssetValueReadForUser(authToken, projectid, assetid, user);
if (projectAssetValue != null) {
// -----------------------------------
// update the project asset value
projectAssetValue = repository.projectAssetValueUpdate(
authToken, projectAssetValue, "predicted_selected");
}
// -----------------------------------
// revert extractions
repository.extractionResetDatabase();
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

26.2.16 ユースケース: プロジェクトとアセット用に指定された値の更新 - 使用者の値の使用

説明

使用者の値を使用して、プロジェクトとアセット用に指定された値を更新します。

サンプル・コード

例26-18 ユースケース: プロジェクトとアセット用に指定された値の更新 - 使用者の値の使用

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Answer;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Choice;
import com.flashline.registry.openapi.entity.ChoiceList;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.ExtractionDownload;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectAssetValue;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.Question;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.entity.SurveyTaken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateValueProvidedForProjectAndUserWithConsumerValue {
public static void main(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(
pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1], pArgs[2]);
// -----------------------------------
// Update the value-provided for a project and asset - use consumer value
long userID = repository.userReadByAuthToken(authToken).getID(); // ID of
the user being read
long projectID = 50000; // ID of project being updated
long assetID = 569; // ID of asset
repository.testExtractionResetDatabaseForProject(projectID); // for sample
*only*
Project lProject = repository.projectRead(authToken, projectID);
// -----------------------------------
// if no user id exists, create a user
if (userID==0) {
userID = createUser(repository, authToken).getID();
}
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedLeaderIDs(new String[]{ ""+userID });
repository.projectUpdate(authToken, lProject, lProjectEntities);
// -----------------------------------
// Get the user
RegistryUser user = repository.userRead(authToken, userID);
// -----------------------------------
// Make sure the project has an extraction
long[] lAssetIDs = { assetID };
ExtractionDownload[] extractionDownload =
repository.extractionCreate(authToken, projectID, lAssetIDs);
Extraction extraction =
repository.extractionReadByProjectAndAsset(authToken, projectID, assetID);
// -----------------------------------
// take survey
SurveyTaken surveyTaken = repository.surveyTakenRead(authToken, extraction);
Question[] questions = repository.surveyReadQuestions(authToken);
ChoiceList choiceList = null;
Choice[] choices = null;
Answer[] answers = new Answer[4];
for(int i=0; i<answers.length; i++){
answers[i] = new Answer();
}
// -----------------------------------
//Sort questions
Question[] sortedQuestions = new Question[4];
for (int i=0;i<questions.length;i++) {
if (questions[i].getId()==100) {
sortedQuestions[0] = questions[i];
}
if (questions[i].getId()==101) {
sortedQuestions[1] = questions[i];
}
if (questions[i].getId()==102) {
sortedQuestions[2] = questions[i];
}
if (questions[i].getId()==103) {
sortedQuestions[3] = questions[i];
}
}
answers[0].setQuestionId(sortedQuestions[0].getId());
choiceList = sortedQuestions[0].getChoiceList();
choices = choiceList.getChoices();
answers[0].setChoiceId(choices[0].getId());
answers[0].setValue(choices[0].getValue());
answers[1].setQuestionId(sortedQuestions[1].getId());
answers[1].setChoiceId(0);
answers[1].setValue("100");
answers[2].setQuestionId(sortedQuestions[2].getId());
answers[2].setChoiceId(0);
answers[2].setValue("200");
answers[3].setQuestionId(sortedQuestions[3].getId());
choiceList = sortedQuestions[3].getChoiceList();
choices = choiceList.getChoices();
answers[3].setChoiceId(choices[3].getId());
answers[3].setValue(choices[3].getValue());
surveyTaken.setAnswers(answers);
// -----------------------------------
// update survey
surveyTaken = repository.surveyTakenUpdate(authToken, surveyTaken);
extraction = repository.extractionUpdateSurvey(authToken, extraction,
surveyTaken);
// -----------------------------------
// Get a ProjectAssetValue for a project asset and user.
ProjectAssetValue projectAssetValue = repository
.projectAssetValueReadForUser(authToken, projectID, assetID, user);
if (projectAssetValue != null) {
// If a ProjectAssetValue does not exist for this project, asset, and
// user combination a null value is returned.
ProjectAssetValue projectAssetValueSelection = new ProjectAssetValue();
projectAssetValue = repository.projectAssetValueUpdate(
authToken, projectAssetValue, "consumer_selected");
}
} catch (OpenAPIException oapie) {
System.out.println("ServerCode = " + oapie.getServerErrorCode());
System.out.println("Message    = " + oapie.getMessage());
System.out.println("StackTrace:");
oapie.printStackTrace();
} catch (RemoteException re) {
re.printStackTrace();
} catch (ServiceException se) {
se.printStackTrace();
} catch (MalformedURLException mue) {
mue.printStackTrace();
}
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

26.2.17 ユースケース: プロジェクトとアセット用に指定された値の更新 - プロジェクト・リーダーの値の使用

説明

プロジェクト・リーダーの値を使用して、プロジェクトとアセット用に指定された値を更新します。

サンプル・コード

例26-19 ユースケース: プロジェクトとアセット用に指定された値の更新 - プロジェクト・リーダーの値の使用

package com.flashline.sample.projectapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Answer;
import com.flashline.registry.openapi.entity.AssetUsageType;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Choice;
import com.flashline.registry.openapi.entity.ChoiceList;
import com.flashline.registry.openapi.entity.Extraction;
import com.flashline.registry.openapi.entity.ExtractionDownload;
import com.flashline.registry.openapi.entity.Project;
import com.flashline.registry.openapi.entity.ProjectAssetValue;
import com.flashline.registry.openapi.entity.ProjectEntities;
import com.flashline.registry.openapi.entity.Question;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.entity.SurveyTaken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class UpdateValueProvidedForProjectAndUserWithLeadValue {
public static void main(String[] pArgs) {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(
pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1], pArgs[2]);
// -----------------------------------
// Update the value provided for a project and asset - use project lead
value
long userID = repository.userReadByAuthToken(authToken).getID(); // ID of
the user being read
long projectID = 50000; // ID of project being updated
long assetID = 569; // ID of asset
float newValue = 50.0f; // Project asset value
repository.testExtractionResetDatabaseForProject(projectID); // for sample
*only*
Project lProject = repository.projectRead(authToken, projectID);
// -----------------------------------
// if no user id exists, create a user
if (userID==0) {
userID = createUser(repository, authToken).getID();
}
ProjectEntities lProjectEntities = new ProjectEntities();
lProjectEntities.setAddedLeaderIDs(new String[]{ ""+userID });
repository.projectUpdate(authToken, lProject, lProjectEntities);
// -----------------------------------
// Get a RegistryUser for a user.
RegistryUser user = repository.userRead(authToken, userID);
// -----------------------------------
// Make sure the project has an extraction
long[] lAssetIDs = { assetID };
ExtractionDownload[] extractionDownload =
repository.extractionCreate(authToken, projectID, lAssetIDs);
Extraction extraction =
repository.extractionReadByProjectAndAsset(authToken, projectID, assetID);
// -----------------------------------
// take survey
SurveyTaken surveyTaken = repository.surveyTakenRead(authToken, extraction);
Question[] questions = repository.surveyReadQuestions(authToken);
ChoiceList choiceList = null;
Choice[] choices = null;
Answer[] answers = new Answer[4];
for(int i=0; i<answers.length; i++){
answers[i] = new Answer();
}
// -----------------------------------
//Sort questions
Question[] sortedQuestions = new Question[4];
for (int i=0;i<questions.length;i++) {
if (questions[i].getId()==100) {
sortedQuestions[0] = questions[i];
}
if (questions[i].getId()==101) {
sortedQuestions[1] = questions[i];
}
if (questions[i].getId()==102) {
sortedQuestions[2] = questions[i];
}
if (questions[i].getId()==103) {
sortedQuestions[3] = questions[i];
}
}
answers[0].setQuestionId(sortedQuestions[0].getId());
choiceList = sortedQuestions[0].getChoiceList();
choices = choiceList.getChoices();
answers[0].setChoiceId(choices[0].getId());
answers[0].setValue(choices[0].getValue());
answers[1].setQuestionId(sortedQuestions[1].getId());
answers[1].setChoiceId(0);
answers[1].setValue("100");
answers[2].setQuestionId(sortedQuestions[2].getId());
answers[2].setChoiceId(0);
answers[2].setValue("200");
answers[3].setQuestionId(sortedQuestions[3].getId());
choiceList = sortedQuestions[3].getChoiceList();
choices = choiceList.getChoices();
answers[3].setChoiceId(choices[3].getId());
answers[3].setValue(choices[3].getValue());
surveyTaken.setAnswers(answers);
// -----------------------------------
// update survey
surveyTaken = repository.surveyTakenUpdate(authToken, surveyTaken);
extraction = repository.extractionUpdateSurvey(authToken, extraction,
surveyTaken);
// -----------------------------------
// Get a ~ProjectAssetValue for a project asset and user.
ProjectAssetValue projectAssetValue = repository
.projectAssetValueReadForUser(authToken, projectID, assetID, user);
if (projectAssetValue != null) {
// A null value is returned if no If a ProjectAssetValue does not exists
// for this project, asset, and user combination.
// -----------------------------------
// Get an ~AssetUsageType array.
AssetUsageType[] usageTypes = repository
.projectAssetValueReadTypes(authToken);
projectAssetValue.setProjectLeadUsage(usageTypes[1].getName());
// Set the projectAssetValue to a AssetUsageType value.
projectAssetValue.setProjectLeadValue(newValue); // Set to a new value.
ProjectAssetValue projectAssetValueSelection = new ProjectAssetValue();
projectAssetValue = repository.projectAssetValueUpdate(
authToken, projectAssetValue, "predicted_selected");
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
protected static RegistryUser createUser(FlashlineRegistry repository, AuthToken
authToken) throws OpenAPIException, RemoteException {
String lUserName = "user"+Calendar.getInstance().getTimeInMillis();
return repository.userCreate(authToken, lUserName, "First", "User",
"user@example.com", "user", false, false, false);
}
}

27 リレーションシップ・タイプAPI

この章では、リレーションシップ・タイプAPIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryにおいて、新しいリレーションシップ・タイプの作成、および関連アセットの変更または問合せを行う方法について解説します。

この章では、次の項目について説明します。

- 27.1項「概要」

- 27.2項「ユースケース」

27.1 概要

リレーションシップ・タイプは、2つのアセットを関連付けるために使用するリレーションシップの構造を定義します。

アセット・サブシステム

アセットを作成または編集する場合、リレーションシップ・タイプは、アセット間に存在するリレーションシップを定義または変更するために使用します。

27.2 ユースケース

この項では、リレーションシップ・タイプAPIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 27.2.1項「ユースケース: 新しいリレーションシップ・タイプの作成」

- 27.2.2項「ユースケース: 関連アセットの変更」

- 27.2.3項「ユースケース: 関連アセットの問合せ」

27.2.1 ユースケース: 新しいリレーションシップ・タイプの作成

説明

アセット間で使用されるリレーションシップの新しいタイプを作成します。

サンプル・コード

例27-1 ユースケース: 新しいリレーションシップ・タイプの作成

package com.flashline.sample.relationshiptypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RelationshipType;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateNewRelationshipType {
public static void main(String pArgs[]) throws java.rmi.RemoteException,
OpenAPIException {
try{
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository =new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------------
// create the new relationship type
String newRelationshipTypeName
="My-NewRelationshipTypeName";  //Relationship Type name must contain only alpha
characters or hyphens
RelationshipType newRelationshipType =
repository.relationshipTypeCreate(authToken, newRelationshipTypeName);
System.out.println("The new relationshipType id =
"+newRelationshipType.getID()+" ");
// -----------------------------------------
// set the direction definition and the display text describing the
relationship type
//// Two-way = "BIDIRECTIONAL"
//// Two-way, order matters = "ORDERED-BIDIRECTIONAL"
//// One-way = "UNIDIRECTIONAL"
newRelationshipType.setDirection("ORDERED-BIDIRECTIONAL");
newRelationshipType.setDisplayPrimary("Contained In"); // Source Asset -
'Contained In' - Target Asset
newRelationshipType.setDisplaySecondary("Contains");   // Target Asset -
'Contains' - Source Asset
newRelationshipType = repository.relationshipTypeUpdate(authToken,
newRelationshipType);
// -----------------------------------------
// delete the new relationship type
repository.relationshipTypeDelete(authToken,
newRelationshipType.getID());
}catch(OpenAPIException  lEx) {
System.out.println("ServerCode = "+
lEx.getServerErrorCode());
System.out.println("Message    = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

27.2.2 ユースケース: 関連アセットの変更

説明

My RelationshipTypeを使用して、ターゲット・アセットを他のアセットに関連付けます。同じリレーションシップ・タイプを使用して、追加のアセットに対するリレーションシップを設定します。

サンプル・コード

例27-2 ユースケース: 関連アセットの変更

package com.flashline.sample.relationshiptypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RelationshipType;
import com.flashline.registry.openapi.query.RelationshipTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class FindRelationshipTypeAndUseInAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException, ServiceException {
try{
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository =new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Asset myAsset = repository.assetRead(authToken, 563);
//MY_OTHER_ASSET_ID should be an integer and should be the
id of an asset in the repository
RelationshipType[] allRelationshipTypes =
getAllRelationshipTypes(repository, authToken);
for (int i = 0; i < allRelationshipTypes.length; i++) {
if
(allRelationshipTypes[i].getName().equals("MyRelationshipType2")) {
//This is the relationship type, modify the assets that
are related
// using it
RelationshipType myRelationshipType =
allRelationshipTypes[i];
Asset otherAsset = repository.assetRead(authToken, 569);
//569= MY_OTHER_ASSET_ID
//MY_OTHER_ASSET_ID should be an integer and should be
the id of an asset in the repository
//add this asset to the list of related assets
long[] oldSecondaryIDs =
myRelationshipType.getSecondaryIDs();
long[] newSecondaryIDs = new long[oldSecondaryIDs.length
+ 1];
for (int j = 0; j < oldSecondaryIDs.length; j++) {
newSecondaryIDs[j] = oldSecondaryIDs[j];
}
newSecondaryIDs[newSecondaryIDs.length - 1] =
otherAsset.getID();
myRelationshipType.setSecondaryIDs(newSecondaryIDs);
}
}
myAsset.setRelationshipTypes(allRelationshipTypes);
repository.assetUpdate(authToken, myAsset);
}catch(OpenAPIException  lEx) {
System.out.println("ServerCode = "+
lEx.getServerErrorCode());
System.out.println("Message    = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
/**
* This method returns every relationship type in the repository
* @param repository
* @param authToken
* @return
* @throws RemoteException
*/
public static RelationshipType[] getAllRelationshipTypes(FlashlineRegistry
repository, AuthToken authToken) throws RemoteException {
//Create an empty relationship type criteria object
RelationshipTypeCriteria criteria = new RelationshipTypeCriteria();
criteria.setNameCriteria("");
RelationshipType[] allRelationshipTypes =
repository.relationshipTypeQuery(authToken, criteria);
return allRelationshipTypes;
}
}

注意:

回避するメソッド: SetPromptNotifySecondary()

27.2.3 ユースケース: 関連アセットの問合せ

説明

関連アセット・タイプを問い合せます。

サンプル・コード

例27-3 ユースケース: 関連アセットの問合せ

package com.flashline.sample.relationshiptypeapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RelationshipType;
import com.flashline.registry.openapi.query.RelationshipTypeCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class FindRelationshipTypeAndUseInAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException, ServiceException {
try{
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository =new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
Asset myAsset = repository.assetRead(authToken, 563);
//MY_OTHER_ASSET_ID should be an integer and should be the
id of an asset in the repository
RelationshipType[] allRelationshipTypes =
getAllRelationshipTypes(repository, authToken);
for (int i = 0; i < allRelationshipTypes.length; i++) {
if
(allRelationshipTypes[i].getName().equals("MyRelationshipType2")) {
//This is the relationship type, modify the assets that
are related
// using it
RelationshipType myRelationshipType =
allRelationshipTypes[i];
Asset otherAsset = repository.assetRead(authToken, 569);
//569= MY_OTHER_ASSET_ID
//MY_OTHER_ASSET_ID should be an integer and should be
the id of an asset in the repository
//add this asset to the list of related assets
long[] oldSecondaryIDs =
myRelationshipType.getSecondaryIDs();
long[] newSecondaryIDs = new long[oldSecondaryIDs.length
+ 1];
for (int j = 0; j < oldSecondaryIDs.length; j++) {
newSecondaryIDs[j] = oldSecondaryIDs[j];
}
newSecondaryIDs[newSecondaryIDs.length - 1] =
otherAsset.getID();
myRelationshipType.setSecondaryIDs(newSecondaryIDs);
}
}
myAsset.setRelationshipTypes(allRelationshipTypes);
repository.assetUpdate(authToken, myAsset);
}catch(OpenAPIException  lEx) {
System.out.println("ServerCode = "+
lEx.getServerErrorCode());
System.out.println("Message    = "+ lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
/**
* This method returns every relationship type in the repository
* @param repository
* @param authToken
* @return
* @throws RemoteException
*/
public static RelationshipType[] getAllRelationshipTypes(FlashlineRegistry
repository, AuthToken authToken) throws RemoteException {
//Create an empty relationship type criteria object
RelationshipTypeCriteria criteria = new RelationshipTypeCriteria();
criteria.setNameCriteria("");
RelationshipType[] allRelationshipTypes =
repository.relationshipTypeQuery(authToken, criteria);
return allRelationshipTypes;
}
}

RelationshipTypeQueryの例

try
{
RelationshipTypeCriteria rCriteria = new RelationshipTypeCriteria();
RelationshipType[] allRelationshipTypes =
FlashlineRegistry.relationshipQuery(lAuthToken, rCriteria);
}
catch (OpenAPIException e)
{
e.printStackTrace();
}
catch (RemoteException re)
{
re.printStackTrace();
}

28 ロールAPI

この章では、ロールAPIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryのロールの作成、読込み、更新、削除または問合せを行う方法について解説します。

この章では、次の項目について説明します。

- 28.1項「概要」

- 28.2項「ユースケース」

28.1 概要

ロール・サブシステムは、Oracle Enterprise Repositoryのロールの作成、読込み、更新、問合せまたは操作に使用する、Webサービス・ベースのメカニズムを提供します。

関連するサブシステム

詳細は、第31章「ユーザーAPI」を参照してください。

追加で必要なインポート

import com.flashline.registry.openapi.entity.Role;
import com.flashline.registry.openapi.query.RoleCriteria;

28.2 ユースケース

この項では、ロールAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 28.2.1項「ユースケース: ロールの操作」

28.2.1 ユースケース: ロールの操作

説明

- 新しいロールを作成します。

- ロールを読み込みます。

- ロールを更新します。

- ロールを削除します。

- ロールを問い合せます。

サンプル・コード

例28-1 ユースケース: ロールの操作

package com.flashline.sample.roleapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Role;
import com.flashline.registry.openapi.query.RoleCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class Roles {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------------
// Create a new role
String lName = "new_role_type_name";
String lDesc = "new_role_type_desc";
boolean lDeafultForNewUser = true;
Role lRole = null;
lRole = repository.roleCreate(authToken, lName, lDesc,
lDeafultForNewUser);
// -----------------------------------------
// Read a Role
String lRoleName = lName;
Role lRole2 = null;
lRole2 = repository.roleRead(authToken, lRoleName);
// -----------------------------------------
// Update a Role
String lRoleName3 = lName;
Role lRole3 = null;
lRole3 = repository.roleRead(authToken, lRoleName3);
lRole3.setName("user_modified");
lRole3.setStatus(20);
lRole3 = repository.roleUpdate(authToken, lRole);
// -----------------------------------------
// Delete a Role
String lRoleName4 = "user_modified"; // role name must exist in OER
Role lRole4 = repository.roleRead(authToken, lRoleName4);
if (lRole4==null) {
lRole4 = repository.roleRead(authToken, lName);
}
if (lRole4!=null) {
try {
repository.roleDelete(authToken, lRole4.getName());
} catch (OpenAPIException e) {
e.printStackTrace();
}
}
// -----------------------------------------
// This method is used to query for roles.
Role[] lRoles = null;
RoleCriteria lRoleCriteria = null;
lRoleCriteria = new RoleCriteria();
lRoleCriteria.setNameCriteria("user");
lRoles = repository.roleQuery(authToken, lRoleCriteria);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

29 サブスクリプションAPI

この章では、サブスクリプションAPIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryにおいてアセットに対するサブスクリプションの作成、読込みまたは削除を行う方法、およびアセットに対してサブスクライブされたユーザーを読み込む方法について解説します。

この章では、次の項目について説明します。

- 29.1項「概要」

- 29.2項「ユースケース」

29.1 概要

サブスクリプションAPIでは、サブスクライブされているアセットをユーザーが管理するメカニズムを提供します。この場合、サブスクリプションは、具体的には電子メール・サブスクリプションを示します。このAPIを介して作成されるサブスクリプションは、アセットの詳細ページで「サブスクライブ」ボタンをクリックするユーザーに相当します。ユーザーがアセットに対してサブスクライブした後、アセットに発生しているイベントについて電子メールで通知されます。サブスクライブ済のユーザーが通知されるイベントのリストは、『Oracle Fusion Middleware Oracle Enterprise Repositoryユーザーズ・ガイド』を参照してください。

REXのサブスクリプションAPIを使用すると、開発者はアセットのリストに対するサブスクリプションを作成、削除および検査できます。この操作は、常に、様々なサブスクリプション・メソッドに引数として渡された認証トークンで識別されたユーザーに対して実行されます。

29.2 ユースケース

この項では、サブスクリプションAPIを使用するユースケースについて説明します。含まれる内容は、次のとおりです。

- 29.2.1項「ユースケース: アセットに対するサブスクリプションの作成」

- 29.2.2項「ユースケース: アセットに対するサブスクリプションの削除」

- 29.2.3項「ユースケース: アセットに対するサブスクリプションの読込み」

- 29.2.4項「ユースケース: アセットに対してサブスクライブされたユーザーの読込み」

29.2.1 ユースケース: アセットに対するサブスクリプションの作成

説明

- REXで認証します。

- 問合せを介してアセットのサマリーのリストを読み込みます。

- 一致したアセットに対してサブスクライブします。

サンプル・コード

例29-1 ユースケース: アセットに対するサブスクリプションの作成

package com.flashline.sample.subscriptionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetSummary;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class CreateSubscription {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException, ServiceException {
try {
// /////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
// /////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// /////////////////////////////////////////////////////////
// Login to OER
// /////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1], pArgs[2]);
// /////////////////////////////////////////////////////////
// find the assets to which to subscribe
// /////////////////////////////////////////////////////////
AssetCriteria criteria = new AssetCriteria();
criteria.setNameCriteria("%");
AssetSummary[] lAssetSummaries = repository.assetQuerySummary(authToken,
criteria);
// /////////////////////////////////////////////////////////
// Iterate through assets, pulling out the ids and adding
// to the array of longs
// /////////////////////////////////////////////////////////
long[] lAssetIDs = new long[lAssetSummaries.length];
for (int i = 0; i < lAssetSummaries.length; i++) {
lAssetIDs[i] = lAssetSummaries[i].getID();
}
// /////////////////////////////////////////////////////////
// Create the subscriptions. The value of "false" for the
// parameter pFailOnAnyError, causes the operation to NOT
// fail for any asset to which the user does not have VIEW
// privileges, or for which the asset is not subscribable.
//
// If this value is not "false", the operation throws
// an exception if any asset in the array of asset IDs is
// not subscribable or viewable by the user, and NONE of the
// subscriptions are recorded in the repository.
// /////////////////////////////////////////////////////////
repository.subscriptionCreate(authToken, lAssetIDs, false);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

29.2.2 ユースケース: アセットに対するサブスクリプションの削除

説明

- REXで認証します。

- 問合せを介してアセットのサマリーのリストを読み込みます。

- 一致したアセットに対して存在するサブスクリプションを削除します。

サンプル・コード

例29-2 ユースケース: アセットに対するサブスクリプションの削除

package com.flashline.sample.subscriptionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetSummary;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class DeleteSubscription {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
///////////////////////////////////////////////////////////
// find the assets for which to delete subscriptions
///////////////////////////////////////////////////////////
AssetCriteria criteria = new AssetCriteria();
criteria.setNameCriteria("%");
AssetSummary[] lAssetSummaries = repository.assetQuerySummary(authToken,
criteria);
///////////////////////////////////////////////////////////
// Iterate through assets, pulling out the ids and adding
// to the array of longs
///////////////////////////////////////////////////////////
long[] lAssetIDs = new long[lAssetSummaries.length];
for (int i = 0; i < lAssetSummaries.length; i++) {
lAssetIDs[i] = lAssetSummaries[i].getID();
}
///////////////////////////////////////////////////////////
// Delete the subscriptions on the list of assets.
///////////////////////////////////////////////////////////
repository.subscriptionDelete(authToken, lAssetIDs);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

29.2.3 ユースケース: アセットに対するサブスクリプションの読込み

説明

- REXで認証します。

- 認証済のユーザーに対してサブスクライブされたアセットのリストを読み込みます。

サンプル・コード

例29-3 ユースケース: アセットに対するサブスクリプションの読込み

package com.flashline.sample.subscriptionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ReadSubscriptions {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
//////////////////////////////////////////////////////////
// Read all of the assets to which the user is subscribed.
//////////////////////////////////////////////////////////
long[] lSubscribedAssets =
repository.subscriptionReadSubscribedAssets(authToken);
//////////////////////////////////////////////////////////
// Print out the assets to which the user is subscribed
//////////////////////////////////////////////////////////
Asset[] lAssets = repository.assetReadArray(authToken, lSubscribedAssets);
System.out.println("Subscribed Assets for user "+pArgs[1]);
for(int i=0; i<lAssets.length; i++){
System.out.println("  -> "+lAssets[i].getLongName());
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

29.2.4 ユースケース: アセットに対してサブスクライブされたユーザーの読込み

説明

- REXで認証します。

- 特定のユーザーに対してサブスクライブされたアセットのリストを読み込みます。

サンプル・コード

例29-4 ユースケース: アセットに対してサブスクライブされたユーザーの読込み

package com.flashline.sample.subscriptionapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AssetSummary;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.query.AssetCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class ReadSubscribersToAsset {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
///////////////////////////////////////////////////////////
// Login to OER
///////////////////////////////////////////////////////////
AuthToken authToken = repository.authTokenCreate(
pArgs[1],pArgs[2]);
//////////////////////////////////////////////////////////
// Assume that this query returns some number of assets...
//////////////////////////////////////////////////////////
AssetCriteria lCriteria = new AssetCriteria();
lCriteria.setNameCriteria("%");
AssetSummary[] lAssetSummaries = repository.assetQuerySummary(authToken,
lCriteria);
//////////////////////////////////////////////////////////
// Read the users that are subscribed to the first asset
//////////////////////////////////////////////////////////
RegistryUser[] lSubscribedUsers =
repository.subscriptionReadUsersSubscribedToAsset(authToken,
lAssetSummaries[0].getID());
for (int i=0; i<lSubscribedUsers.length; i++){
System.out.println("Subscribed Users:
"+lSubscribedUsers[i].getUserName());
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

30 システム設定API

この章では、システム設定APIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryのシステム設定について問合せを行う方法について解説します。

この章では、次の項目について説明します。

- 30.1項「概要」

- 30.2項「ユースケース」

30.1 概要

Oracle Enterprise Repositoryのシステム設定セクションで、管理者は基本的な操作を構成して、特定の機能を有効または無効にできます。システム設定APIでは、これらのシステム設定を問い合せるメカニズムを提供します。

注意:

ユーザーは、システム設定の値を問い合せることのみを許可されています。REXでは、システム設定を設定または変更することはできません。

システム設定を問い合せるには、次のパッケージ・インポートが必要です。

import com.flashline.registry.openapi.entity.SettingValue;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.query.SystemSettingsCriteria;

予約済メソッド

systemSettingsAddBundleメソッドは、今後の使用のために予約されています。一般的な用途向けではありません。

30.2 ユースケース

この項では、システム設定APIを使用するユースケースについて説明します。内容は次のとおりです。

- 30.2.1項「ユースケース: システム設定の問合せ」

30.2.1 ユースケース: システム設定の問合せ

説明

REXでシステム設定を問い合せます。

サンプル・コード

例30-1 ユースケース: システム設定の問合せ

package com.flashline.sample.systemsettingsapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.SettingValue;
import com.flashline.registry.openapi.query.SystemSettingsCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class SystemSettings {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
// //////////////////////////////
// Set Application Token on AuthToken object.  This is supplied by OER
//authToken.setApplicationToken("TokenString");
// //////////////////////////////////////
//Read all available system settings
//Create an empty Criteria object.  No criteria returns all settings.
SystemSettingsCriteria lCriteria = new SystemSettingsCriteria();
lCriteria.setNameCriteria("enterprise.defaults.displayname.field");
SettingValue[] lValues = repository.systemSettingsQuery(authToken,
lCriteria);
for (int i=0;i<lValues.length;i++) {
SettingValue lValue = lValues[i];
System.out.println("Setting Name: " + lValue.getDescriptor().getName());
System.out.println("Setting Value: " + lValue.getValue());
}
// /////////////////////////////////////
//Read a specific setting
lCriteria.setNameCriteria("cmee.server.companyname");
lValues = repository.systemSettingsQuery(authToken, lCriteria);
for (int i=0;i<lValues.length;i++) {
SettingValue lValue = lValues[i];
System.out.println("Setting Name: " + lValue.getDescriptor().getName());
System.out.println("Setting Value: " + lValue.getValue());
}
// /////////////////////////////////////
//Read a specific section
lCriteria.setSectionCriteria("general");
lValues = repository.systemSettingsQuery(authToken, lCriteria);
for (int i=0;i<lValues.length;i++) {
SettingValue lValue = lValues[i];
System.out.println("Setting Name: " + lValue.getDescriptor().getName());
System.out.println("Setting Value: " + lValue.getValue());
}
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

31 ユーザーAPI

この章では、ユーザーAPIのユースケースについて説明します。このユースケースで、ユーザーの作成、取得、更新および非アクティブ化を行う方法、またはユーザーについて問い合せる方法について解説します。

この章では、次の項目について説明します。

- 31.1項「概要」

- 31.2項「ユースケース」

31.1 概要

ユーザー・サブシステムは、Oracle Enterprise Repositoryのユーザー・アカウントの作成、読込み、更新、問合せまたは操作に使用する、Webサービス・ベースのメカニズムを提供します。

関連するサブシステム

詳細は、第28章「ロールAPI」を参照してください。

追加で必要なインポート

import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.query.UserCriteria;

31.2 ユースケース

この項では、ユーザーAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 31.2.1項「ユースケース: ユーザーの操作」

31.2.1 ユースケース: ユーザーの操作

説明

- 新規ユーザーを作成します。

- 既存のユーザーを取得します。

- ユーザーを更新します。

- ユーザーを非アクティブ化します。

- ユーザーについて問い合せます。

サンプル・コード

例31-1 ユースケース: ユーザーの操作

package com.flashline.sample.userapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.RegistryUser;
import com.flashline.registry.openapi.query.UserCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class Users {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new FlashlineRegistryServiceLocator()
.getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],
pArgs[2]);
// -----------------------------------------
// Create a new user
String lUserName = "testUserCreate
_"+Calendar.getInstance().getTimeInMillis();
String lFirstName = "testUserCreate_FirstName";
String lLastName = "testUserCreate_LastName";
String lEmail = lUserName+"@example.com";
String lPassword = "testUserCreate_Password";
boolean lMustChangePassword = false;
boolean lPasswordNeverExpires = false;
boolean lAssignDefafultRoles = true;
RegistryUser RbacRegistrySecUser = repository.userCreate(
authToken, lUserName, lFirstName, lLastName, lEmail, lPassword,
lMustChangePassword, lPasswordNeverExpires, lAssignDefafultRoles);
// -----------------------------------------
// Read a User
long lId = 50000; // user id must exist in OER
RegistryUser lUser1 = repository.userRead(authToken,
lId);
// -----------------------------------------
// Update a User
lUser1.setActiveStatus(10);
lUser1.setUserName("xxx");
lUser1.setPhoneNumber("412-521-4914");
lUser1.setMustChangePassword(true);
lUser1.setPasswordNeverExpires(false);
lUser1.setPassword("changed_password");
lUser1.setEmail("newaddress@bea.com");
try {
lUser1 = repository.userUpdate(authToken,
lUser1);
} catch (OpenAPIException e) {
e.printStackTrace();
}
// -----------------------------------------
// Deactivate a User
RegistryUser lUser2 = null;
try {
lUser2 = repository.userDeactivate(authToken, lId);
} catch (OpenAPIException e) {
e.printStackTrace();
}
// -----------------------------------------
// Query for Users
RegistryUser lUsers[] = null;
UserCriteria lUserCriteria = null;
lUserCriteria = new UserCriteria();
lUserCriteria.setNameCriteria("testname");
lUsers = repository.userQuery(authToken,
lUserCriteria);
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

32 ベンダーAPI

この章では、ベンダーAPIのユースケースについて説明します。このユースケースで、Oracle Enterprise Repositoryにおいてベンダーの追加または割当てを行う方法について解説します。

この章では、次の項目について説明します。

- 32.1項「概要」

- 32.2項「ユースケース」

32.1 概要

ベンダーはアセットの元のソースであり、アセットをサポートします。ベンダーは、単一の名前の文字列で識別されます。

検証: ベンダーを保存する場合、Oracle Enterprise Repositoryは、現在、次の内容を検証します。

- ベンダー名は、250文字未満にする必要があります。

- ベンダー名は一意です。

関連するサブシステム

アセットとベンダー間には1対多の関係があります(たとえば、複数のアセットは同じベンダーにリンクできますが、1つのアセットは1つのベンダーしか持つことができません)。アセットを作成または編集する場合、ベンダーをアセットに関連付けるベンダーIDメタデータ要素を変更できます。

追加で必要なインポート

import com.flashline.registry.openapi.entity.Vendor;
import com.flashline.registry.openapi.query.VendorCriteria;

32.2 ユースケース

この項では、ベンダーAPIを使用するユースケースについて説明します。内容は次のとおりです。

- 32.2.1項「ユースケース: ベンダーの操作」

32.2.1 ユースケース: ベンダーの操作

説明

- 新しいベンダーをOracle Enterprise Repositoryに追加します。

- 既存のベンダーをアセットに割り当てます。

サンプル・コード

例32-1 ユースケース: ベンダーの追加または割当て

package com.flashline.sample.vendorapi;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.flashline.registry.openapi.base.OpenAPIException;
import com.flashline.registry.openapi.entity.Asset;
import com.flashline.registry.openapi.entity.AuthToken;
import com.flashline.registry.openapi.entity.Vendor;
import com.flashline.registry.openapi.query.VendorCriteria;
import com.flashline.registry.openapi.service.v300.FlashlineRegistry;
import
com.flashline.registry.openapi.service.v300.FlashlineRegistryServiceLocator;
public class Vendors {
public static void main(String pArgs[]) throws OpenAPIException,
RemoteException,
ServiceException {
try {
///////////////////////////////////////////////////////////
// Connect to Oracle Enterprise Repository
///////////////////////////////////////////////////////////
URL lURL = null;
lURL = new URL(pArgs[0]);
FlashlineRegistry repository = new
FlashlineRegistryServiceLocator().getFlashlineRegistry(lURL);
// //////////////////////////////
// Authenticate with OER
// //////////////////////////////
AuthToken authToken = repository.authTokenCreate(pArgs[1],pArgs[2]);
// -----------------------------------------
// Create a new vendor
String newVendorName = "My Vendor";
Vendor newVendor = repository.vendorCreate(authToken, newVendorName);
System.out.println("The new vendor id =\"" + newVendor.getID() + "\"");
// -----------------------------------------
// Find a vendor and update an asset to use it
VendorCriteria criteria = new VendorCriteria();
criteria.setNameCriteria(newVendorName);
Vendor[] vendors = repository.vendorQuery(authToken, criteria);
long myVendorID = vendors[0].getID();
long MY_ASSET_ID = 569;
Asset myAsset = repository.assetRead(authToken, MY_ASSET_ID);
// MY_ASSET_ID must be the asset id of an asset in the repository
myAsset.setVendorID(myVendorID);
repository.assetUpdate(authToken, myAsset);
// ----------------------------------------
// clean up
myAsset.setVendorID(0);
repository.vendorDelete(authToken, newVendor.getID());
} catch (OpenAPIException lEx) {
System.out.println("ServerCode = " + lEx.getServerErrorCode());
System.out.println("Message    = " + lEx.getMessage());
System.out.println("StackTrace:");
lEx.printStackTrace();
} catch (RemoteException lEx) {
lEx.printStackTrace();
} catch (ServiceException lEx) {
lEx.printStackTrace();
} catch (MalformedURLException lEx) {
lEx.printStackTrace();
}
}
}

索引

A  B  C  D  E  F  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X

A

許容値リストAPI, 15

「概要」を参照

「ユースケース」を参照

リポジトリ・アセット・ペインへのアクセス, 11.3.4.1 リポジトリ・アセット・ビューへのアクセス, 11.3.4.1.2 PVCSリポジトリによるアセットへのファイルの追加, 4.4 アセットへのHarvestアーティファクト・ストアの追加, 3.4 ClearQuestのアーティファクト・ストアによるアセットへのファイルの追加, 2.3.3 ファイル・ストアのアーティファクト・ストアによるアセットへのファイルの追加, 2.2.5 ClearQuestの追加, 2.3.1 Serena Changemanプラグインの追加, 4.1 Oracle Enterprise Repositoryへのファイル・ストア機能の追加, 2.2.2 拡張構成, 6.3.2 Amberpoint, 7 アーティファクト・ストア, 1.2

「概要」を参照

アーティファクトの作成, 6.2.3.5 アーティファクト・ストアAPI, 14

「概要」を参照

「ユースケース」を参照

アセットAPI, 16

「概要」を参照

「サンプル・コード」を参照

「ユースケース」を参照

アセットの使用プロセス, 8.2.2 アセットの作成プロセス, 8.2.1 アセット・タイプAPI, 17

「概要」を参照

「ユースケース」を参照

.NETソリューションへのOracle Enterprise Repositoryプロジェクトの割当て, 10.3.4 Oracle Enterprise RepositoryプロジェクトへのIDEユーザーの割当て, 9.2 Oracle Enterprise Repositoryプロジェクトへのユーザーの割当て, 10.2.2.2.1 JDeveloperアプリケーションとOracle Enterprise Repositoryとの関連付け, 11.1.4.1 メソッド呼出しの原子性, 13.2.2.1 認証と認可, 13.3.2 使用状況の自動検出, 8.2.2.3 使用状況の自動検出, 8.3.7, 11.2.7, 11.3.6

B

基本概念, 13.3

ベスト・プラクティス, 8.2

BPEL PM, 6.2.3.2

C

カテゴリ分けタイプとカテゴリ分けAPI, 18

「概要」を参照

「ユースケース」を参照

ClearCase統合, 2 ClearCase Webインタフェース, 2.1

「概要」を参照

「前提条件」を参照

ClearQuest統合, 2.3 CMFエントリ・タイプAPI, 19

「概要」を参照

「ユースケース」を参照

EM統合のコマンドライン・オプション, 6.2.1 アーティファクト・ストアの構成, 2.1.3, 3.3 Oracle Enterprise Repositoryへの接続の構成, 10.3.3 Oracle Enterprise Repositoryプラグインの構成, 10.2.2, 10.3.2

「インストール」を参照

「前提条件」を参照

Oracle Enterprise Repositoryプリファレンスの構成, 10.2.3 ClearQuestアーティファクト・ストアの構成, 2.3.2 PVCSアーティファクト・ストアの構成, 4.3 アーティファクト・ストアの構成, 1 ファイル・ストアのためのアーティファクト・ストアの構成, 2.2.4 使用状況の自動検出の構成, 10.3.5.2 Eclipseの構成, 10.2 Oracle Enterprise Repositoryの構成, 9 Oracle JDeveloperの構成, 10.1 Enterprise Manager統合ユーティリティの構成, 6.3 VS .NETの構成, 10.3 IDEの構成, 10 Oracle Enterprise RepositoryからのWSDLまたはサービスの使用, 11.1.4.2 ClearCaseファイルのアセットの作成, 2.1.3 ファイル・ストアの作成, 2.2.3 アーティファクト・ストアの作成および構成

次を参照

リポジトリとアセットの作成および構成, 2.1.3 CRUD-Qネーミング規則, 13.2.2 カスタム・アクセス設定API, 20

「概要」を参照

「ユースケース」を参照

D

部門API, 21

「概要」を参照

「ユースケース」を参照

開発者主導の検出, 8.2.2.2 アーティファクトのダウンロード, 8.3.5, 11.1.4, 11.2.5, 11.3.5

E

使用状況の自動検出の有効化, 10.2.4, 10.3.5

Eclipseでの収集の有効化, 10.2.1

VS .NETでの収集の有効化, 10.3.1

Assets-in-Progressプロパティの有効化, 10.2.2.2.2

UTF-8サポートの有効化, 2.1.2

構成ファイルのパスワードの暗号化, 6.4

エンドポイントの作成, 6.2.3.6

Enterprise Manager統合ユーティリティ, 6

「高レベルなユースケース」を参照

「概要」を参照

「前提条件」を参照

コンプライアンス・テンプレートの設定, 9.3 例外処理, 13.3.2 アセットおよびClearCaseファイルの抽出, 2.1.3 抽出API, 22

「概要」を参照

「ユースケース」を参照

F

ファイル・ストア, 2.2

「Oracle Enterprise Repositoryへのファイル・ストア機能の追加」を参照

「ファイル・ストアの作成」を参照

「概要」を参照

基本的なWSDLのデータ型, 13.2.3

H

アーティファクトの収集, 11.1.1, 11.2.2, 11.3.2

ファイルの収集, 8.3.2

Harvest-HTTP Repository Host Integration

「インストール」を参照

「概要」を参照

Harvest-HTTP Repository Host Integration, 3 ANTによるEclipse環境での収集, 10.2.1.2 高レベルなユースケース, 6.1.3, 8.3

I

ハーベスタのインストール, 9.1

インストール, 3.2, 10.3.2.2

Oracle JDeveloper 10gとの統合, 10.1.3

Oracle JDeveloper 11g R1との統合, 10.1.2

Oracle JDeveloper 11g R2との統合, 10.1.1

Amberpointとの統合, 7

開発環境との統合, 8

「ベスト・プラクティス」を参照

「高レベルなユースケース」を参照

「概要」を参照

REXの概要, 13.1

J

Java JDK, 10.2.2.2.4

K

既知の問題, 6.5

L

ClearCaseファイルのアセットへのリンク, 2.1.3

REXクライアントのローカライズ, 23

REXクライアントAPIのローカライズ

「概要」を参照

「ユースケース」を参照

ロギング, 6.3.2.3

M

メトリックのマッピング, 6.3.2.1, 6.3.2.1

メトリックの発行, 6.2.3

更新するメトリック, 6.2.3.7

N

呼出し間のトランザクションの未サポート, 13.2.2.2

通知API, 24

「概要」を参照

「ユースケース」を参照

O

Enterprise Manager統合ユーティリティの取得, 6.1.2

Oracle Enterprise Repositoryコネクタ, 0

Oracle Enterprise Repositoryプロジェクト, 11.3.4.1.1

Oracle Service Bus, 6.2.3.1

概要, 1.1, 2.1.1, 2.2.1, 3.1, 6.1, 8.1, 14.1, 15.1, 16.1, 17.1, 18.1, 19.1, 20.1, 21.1, 22.1, 23.1, 24.1, 25.1, 26.1, 27.1, 28.1, 29.1, 30.1, 31.1, 32.1

SFIDの概要, 10.3.5.1

P

ポリシー, 8.2.1.1

ポリシーAPI, 25

「概要」を参照

「ユースケース」を参照

前提条件, 2.1.2, 6.1.1 前提条件, 10.3.2.1 プリスクリプティブな再利用, 8.2.2.1 プリスクリプティブな再利用, 8.3.6, 11.1.5, 11.2.6 プロジェクトAPI, 26

「概要」を参照

「ユースケース」を参照

アセットの提案または発行, 8.2.1.2

Q

REXにおける問合せの考慮事項, 13.3.2

R

リレーションシップ・タイプAPI, 27

「概要」を参照

「ユースケース」を参照

リポジトリ拡張性フレームワーク, 13 REX, 13 REXのアーキテクチャ, 13.2 ロールAPI, 28 コマンドラインからの実行, 6.2.1

S

サンプル・コード, 16.1.2

Enterprise Managerからのスケジュール, 6.2.2

Oracle Enterprise Repositoryの検索, 8.3.3, 11.1.2, 11.2.3, 11.3.3

セキュリティに関する考慮事項, 4.5

新しいアーティファクト・ストアの選択, 1.3

Serena ChangeMan統合, 4

ファイルの抽出元のアーティファクト・ストアの設定, 2.1.3

使用状況の自動検出の設定, 9.4

コマンドライン・ユーティリティのリポジトリおよびEnterprise Manager接続情報の設定, 6.3.1

ANTによるハーベスタを使用するEclipse環境の設定, 10.2.1.1

SiteMinder, 10.2.2.2.3

ファイルの発行, 8.3.1, 11.2.1, 11.3.1

サブスクリプションAPI, 29

「概要」を参照

「ユースケース」を参照

サブシステムの概要, 13.2.1 サブシステムとCRUD-Q規則の関係, 13.2.2 IDEにサポートされるバージョン, 8.3.7 システム設定API, 30

「概要」を参照

「ユースケース」を参照

T

ターゲット・ファインダ, 6.3.2.2

U

UDDIMappings.xml, 7

ユースケース, 14.2, 15.2, 16.2, 17.2, 18.2, 19.2, 20.2, 21.2, 22.2, 23.2, 24.2, 25.2, 26.2, 27.2, 28.2, 29.2, 30.2, 31.2, 32.2

ユースケースおよびサポートされている開発環境, 8.3.7

ユーザーAPI, 31

「概要」を参照

「ユースケース」を参照

.NETとMicrosoft Web Services Enhancement(WSE)キットでのDIME添付ファイルの使用, 13.3.2 Eclipseの使用, 11.2

「使用状況の自動検出」を参照

「アーティファクトのダウンロード」を参照

「アーティファクトの収集」を参照

「プリスクリプティブな再利用」を参照

「Oracle Enterprise Repositoryの検索」を参照

「ファイルの発行」を参照

「アセット詳細の表示」を参照

ファイル・ストアの使用, 2.2.6 Oracle JDeveloperの使用, 11.1 添付ファイルとJava AXISクライアントでのSOAPの使用, 13.3.2 Enterprise Manager統合ユーティリティの使用, 6.2 IDEによるOracle Enterprise Repositoryとの相互作用, 11 JDeveloperの使用

「アーティファクトのダウンロード」を参照

「アーティファクトの収集」を参照

「プリスクリプティブな再利用」を参照

「Oracle Enterprise Repositoryの検索」を参照

「アセット詳細の表示」を参照

VS .NETの使用, 11.3

「使用状況の自動検出」を参照

「アーティファクトのダウンロード」を参照

「アーティファクトの収集」を参照

「Oracle Enterprise Repositoryの検索」を参照

「ファイルの発行」を参照

「アセット詳細の表示」を参照

V

ベンダーAPI, 32

「ユースケース」を参照

Oracle Enterprise Repository REXのバージョンの考慮事項, 13.2.4 アセット詳細の表示, 8.3.4, 11.1.3, 11.2.4, 11.3.4

W

Webサービス, 6.2.3.3

WebLogic 8.1 Tuxedoプラグイン, 2.1.1

Webshpere 5.x Apacheプラグイン, 2.1.1

X

XML解析, 10.2.2.2.5

Copyright © 2001, 2013, Oracle and/or its affiliates. All rights reserved.