Oracle® Fusion Middleware

Content Integration Suite開発者ガイド

11g リリース1(11.1.1)

E64851-01(原本部品番号:E10608-01)

2010年5月

Oracle Fusion Middleware Content Integration Suite開発者ガイド 11g リリース1 (11.1.1)

E64851-01

Copyright © 1996, 2010, Oracle and/or its affiliates.All rights reserved.

原本著者:  Will Harris

原本協力者:  Adam Stuenkel、David Wyman、Ron van de Crommert

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

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

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

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

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

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

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

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

1 概要

- 1.1 CISのアーキテクチャ

- 1.2 国際化/文字エンコーディング

- 1.3 非推奨となったFixedAPI

2 UCPM APIの理解

- 2.1 UCPM APIへのアクセス

- 2.2 UCPM APIの方法

- 2.3 CISの初期化

- 2.3.1 初期化

- 2.3.2 SCSInitializeServlet

- 2.4 Web環境での統合

- 2.5 クラスのロード

- 2.5.1 カスタム・クラス・ローダー

- 2.5.2 クラス・ローダーの使用方法

- 2.6 オブジェクトの作成

- 2.7 UCPM APIとの対話

- 2.8 インタフェースIContext

- 2.9 インタフェースICISObject

- 2.9.1 プロパティのアクセサ

- 2.9.2 プロパティのオブジェクト型

- 2.9.3 プロパティのコレクション

- 2.10 アダプタ構成ファイル

- 2.10.1 adapter要素

- 2.10.2 config要素

3 SCS APIの理解

- 3.1 SCS APIへのアクセス

- 3.2 SCS APIオブジェクトの理解

- 3.2.1 インタフェースISCSObject

- 3.2.2 インタフェースICISTransferStream

- 3.2.3 インタフェースISCSServerBinder

- 3.2.4 インタフェースISCSServerResponse

- 3.2.5 インタフェースISCSRequestModifier

- 3.3 SCS APIサーブレットの理解

- 3.3.1 サーブレットの説明

- 3.3.2 SCSサーブレットのパラメータ

- 3.3.2.1 SCSFileDownloadServlet

- 3.3.2.2 SCSDynamicConverterServlet

- 3.3.2.3 SCSDynamicURLServlet

- 3.3.3 サーブレットのセキュリティ

- 3.3.4 サーブレットとAPIの対話

- 3.4 SCS APIの使用

- 3.4.1 SCS検索API

- 3.4.2 SCSファイルAPI

- 3.4.3 SCSドキュメントAPI

- 3.4.3.1 ISCSDocumentCheckinAPI

- 3.4.3.2 ISCSDocumentCheckoutAPI

- 3.4.4 SCSワークフローAPI

索引

はじめに

このOracle Fusion Middleware Content Integration Suite (CIS)開発者ガイドでは、CISについての一般的な情報、Universal Content and Process Management API (UCPM API)の詳細、様々なサービスAPI (SCS、SIS、Common)の説明、コマンドの拡張についての情報、および前のバージョンからの移行手順について説明します。

対象読者

このガイドは、アプリケーション開発者およびプログラマを対象としています。UCPM APIの概念やその他の情報が含まれており、コマンドの起動と実行、およびコマンドを拡張する方法について説明しています。

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

オラクル社は、障害のあるお客様にもオラクル社の製品、サービスおよびサポート・ドキュメントを簡単にご利用いただけることを目標としています。オラクル社のドキュメントには、ユーザーが障害支援技術を使用して情報を利用できる機能が組み込まれています。HTML形式のドキュメントで用意されており、障害のあるお客様が簡単にアクセスできるようにマークアップされています。標準規格は改善されつつあります。オラクル社はドキュメントをすべてのお客様がご利用できるように、市場をリードする他の技術ベンダーと積極的に連携して技術的な問題に対応しています。オラクル社のアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/accessibility/を参照してください。

ドキュメント内のサンプル・コードのアクセシビリティについて

スクリーン・リーダーは、ドキュメント内のサンプル・コードを正確に読めない場合があります。コード表記規則では閉じ括弧のみを行に記述する必要があります。しかし、一部のスクリーン・リーダーは括弧のみの行を読まない場合があります。

外部Webサイトのドキュメントのアクセシビリティについて

このドキュメントにはオラクル社およびその関連会社が所有または管理しないWebサイトへのリンクが含まれている場合があります。オラクル社およびその関連会社は、それらのWebサイトのアクセシビリティに関しての評価や言及は行っておりません。

Oracle Supportへのアクセス

Oracleカスタマは、My Oracle Supportから電子サポートにアクセスできます。詳細は、http://www.oracle.com/support/contact.htmlまたはhttp://www.oracle.com/accessibility/support.html(聴覚障害者向け)を参照してください。

関連ドキュメント

Oracle Enterprise Content Management Suite開発者の情報は、Oracle ECMドキュメント・セットの次のドキュメントを参照してください。

- Oracle Fusion Middleware Content Integration Suite (CIS) Java APIリファレンス

- Oracle Fusion Middleware Remote Intradoc Client (RIDC)開発者ガイド

- Oracle Fusion Middleware Remote Intradoc Client (RIDC) Java APIリファレンス

- Oracle Fusion Middleware Content Server JCRアダプタ・ガイド

- Oracle Fusion Middleware JCR Adapter Java APIリファレンス

表記規則

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

規則

意味

太字

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

イタリック体

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

固定幅フォント

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

/

このガイドでは、ディレクトリを区切るためにフォワード・スラッシュ(/)を使用しています。お使いのオペレーティング・システムによっては、ディレクトリを定義するときの区切りマーカーを変更する必要があります。

1 概要

Content Integration Suite (CIS) APIにより、コンテンツ・サーバーのサービスおよびデータが統一されたオブジェクト・モデルで公開され、Oracle Content Serverにアクセスできるようになります。Universal Content and Process Management (UCPM) APIは、サービスAPIのセットにモデル化され、それはターゲット・サーバーと通信するAPI呼出しおよびサーバーから戻される値オブジェクトです。

この章の構成は、次のとおりです。

- 「CISのアーキテクチャ」

- 「国際化/文字エンコーディング」

- 「非推奨となったFixedAPI」

1.1 CISのアーキテクチャ

CISでは、様々な構成によるデプロイメントを可能にするレイヤー・アーキテクチャが採用されています。このアーキテクチャの核となる部分は、標準的なJ2EEのCommandデザイン・パターンに基づいています。コマンドの上位レイヤーでは、エンド・ユーザーに対して公開されるAPIが提供されます。

CISでは、Universal Content and Process Management (UCPM) APIが使用され、それはOracle Content Serverとの通信にSCS APIを使用します。SCS APIでは、コンテンツ・サーバーからの通信がオブジェクト・モデルにラップされ、それを使用して個別のオブジェクト・メタデータにアクセスできます。

UCPM APIにより、アプリケーションの開発者は、コンテンツ・サーバーのサービス(IdcCommandサービス)へのアクセス方法に気をつかうことなく、プレゼンテーションの問題に集中できます。UCPM APIは個別のアクションをカプセル化したコマンド・オブジェクトのセットで構成されており、これらは、UCPM APIに渡されてコンテンツ・サーバーにマップされます。これらのコマンドには、検索、チェックアウト、ワークフロー承認などの共通のコンテンツ管理機能が含まれます。各コマンドは、1つ以上のサービス・コールに結び付けられています。UCPM APIのコマンド・オブジェクトは、J2EEのCommandデザイン・パターンに従って開発されています。

このインフラストラクチャは、J2EEに準拠する任意のアプリケーション・サーバーまたはスタンドアロンのJVMアプリケーションにデプロイできます。UCPM APIをデプロイすると、その環境がJ2EEアプリケーション・サーバーまたは非J2EEサーバーのいずれであっても、環境の機能が強化されます。

UCPM APIは、コンテンツ・サーバーのビジネス・ロジックをカプセル化し、受信した呼出しのパラメータを検証します。また、それはコンテンツ・サーバーとの通信を処理し、ソケット通信のロジック(オープン、検証およびソケットを介したビットのストリーミング)をカプセル化し、強く型指定されたAPIを使用可能なサービスに提供します。

1.2 国際化/文字エンコーディング

CISのエンコーディングを、Oracle Content Serverを実行するJava仮想マシンと同じエンコーディングに設定することをお薦めします。ただし、CISが言語の異なる複数のOracle Content Serverインスタンスと通信する場合は、ISCSContext.setEncodingメソッドを使用して、CISを実行するJVMと一致するエンコーディングを設定できます。

1.3 非推奨となったFixedAPI

Image Serverとの通信のためにCISの11gより前のリリースで使用可能だったFixedAPIは、非推奨となりました。getFixedAPI()を呼び出すとエラーがスローされます。

2 UCPM APIの理解

Universal Content and Process Management (UCPM) APIにより、Oracle Content Serverインスタンスのサービスおよびデータが統一されたオブジェクト・モデルで公開され、それにアクセスできるようになります。UCPM APIは、ターゲット・サーバーと通信するサービスAPIのセットにモデル化されます。

この章の構成は、次のとおりです。

- 「UCPM APIへのアクセス」

- 「UCPM APIの方法」

- 「CISの初期化」

- 「Web環境での統合」

- 「クラスのロード」

- 「オブジェクトの作成」

- 「UCPM APIとの対話」

- 「インタフェースIContext」

- 「インタフェースICISObject」

- 「アダプタ構成ファイル」

注意:
クラス/インタフェース、フィールドおよびメソッドの詳細は、Oracle Fusion Middleware Content Integration Suite (CIS) Java APIリファレンスを参照してください。

2.1 UCPM APIへのアクセス

UCPM APIにより、Oracle Content Serverインスタンスのサービスおよびデータが統一されたオブジェクト・モデルで公開され、それにアクセスできるようになります。UCPM APIは、ターゲット・サーバーと通信するサービスAPIのセットにモデル化され、サーバーから戻される値オブジェクトであるICISObjectオブジェクトにモデル化されます。

UCPM APIは、getUCPMAPI()メソッドを介してICISApplicationクラスで使用できます。getUCPMAPI()メソッドは、IUCPMAPIオブジェクトへの参照を戻し、すべてのUCPM APIオブジェクトにアクセスできます。パブリックなインタフェースであるIUCPMAPIは、getActiveAPIオブジェクトのロケータです。getActiveAPI()は、SCSActiveAPIオブジェクトへの参照を戻します。SCS APIクラスは、コンテンツ・サーバーと通信し、そこに保存されているコンテンツを処理します。

2.2 UCPM APIの方法

UCPM APIはステートレスです。すべてのメソッド呼出しは、必要な状態をメソッドに渡します。これは、スレッド間でCISApplicationクラスへの参照を共有できることを意味します。

- SCS APIのためのISCSContext。ISCSContextインタフェースは、コンテンツ・サーバーと通信する際に使用されるコンテキスト・オブジェクトです。

- いくつかのCIS APIを呼び出すためのICISCommonContext。ICISCommonContextインタフェースでは、どのアダプタに問合せ、どのユーザー情報を使用するのかを指定します。

すべてのメソッドの最初のパラメータはIContext Beanです。IContext Beanは、ユーザー名およびセッションIDなどのコンテキスト情報を保持しており、指定されたコマンドを起動するユーザーを識別するために、基礎となるサービスAPIで使用されます。

UCPM APIは、値オブジェクトを戻すサービス指向のAPIで、ICISObjectオブジェクト(7.6 APIから名前変更)として実装されます。しかし、値オブジェクトのメソッド呼出し自体は、サーバー上のコンテンツを変更しません。変更を適用する前に、UCPM APIを呼び出してパラメータとして値オブジェクトを渡す必要があります。

例:

SCSActiveAPI activeAPI = m_cisApplication.getUCPMAPI ().getActiveAPI ();
ISCSDocumentID documentID = (ISCSDocumentID) m_cisApplication.getUCPMAPI ().
createObject(ISCSDocumentID.class);
documentID.setDocumentID("10");
ISCSDocumentInformationResponse docResponse =
activeAPI.getDocumentInformationAPI ().
getDocumentInformationByID(m_context, documentID);
ISCSContent content = docResponse.getDocNode();

// call does not change object on server
content.setTitle ("New Title");

// now item is updated on server after this call
activeAPI.getDocumentUpdateAPI ().updateInfo (m_context, content);

2.3 CISの初期化

Content Integration Suite (CIS)は、com.stellent.cis.implパッケージにあるCISApplicationFactoryクラスにアクセスすることによって初期化されます。

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

- 「初期化」

- 「SCSInitializeServlet」

2.3.1 初期化

CISの初期化は、アプリケーションごとに1回発生します。CIS APIはステートレスであるため、初期化されたCISApplicationインスタンスは安全にスレッド間で共有できます。

CISを初期化するには、いくつかのプロパティを定義する必要があります。cis.config.typeはserverに、cis.config.server.typeはstandaloneにする必要があります。アダプタ構成ファイルには、コンテンツ・サーバーと通信するためのXML形式の構成情報が含まれています。

初期化の例

システムを初期化し、クラスパスからadapterconfig.xmlファイルを読み取ります。

cis.config.type=server
cis.config.server.type=standalone
cis.config.server.adapterconfig=classpath:/adapterconfig.xml

サンプル・コード:

ICISApplication application;
URL xmlRes = new File ("adapterconfig.xml").toURL()
Properties properties = new Properties();
properties.setProperty(ICISApplication.PROPERTY_CONFIG_TYPE, "server");
properties.setProperty(ICISApplication.PROPERTY_CONFIG_SERVER_ADAPTER_CONFIG,
xmlRes.toExternalForm());

properties.setProperty(ICISApplication.PROPERTY_CONFIG_SERVER_TYPE, "standalone");
application = CISApplicationFactory.initialize(properties);

プロパティ定義

次の表に、プロパティの定義を示します。

プロパティ

説明

cis.config.type

serverに設定する必要があります。

cis.config.server.type

standaloneに設定する必要があります。

cis.config.server.adapterconfig

アダプタ構成ファイルを指すURLです。標準的なURLに加え、クラスパスの形式(classpath:/)またはファイル形式(file:/)も可能です。

cis.config.server.temporarydirectory

ファイル転送、ストリーミングおよびファイル・キャッシュに使用される一時ディレクトリの場所です。

2.3.2 SCSInitializeServlet

SCSInitializeServletは、Webアプリケーション内からCISApplicationインスタンスを初期化するための便利な方法です。ここで説明するプロパティは、いずれもSCSInitializeServletで使用できます。SCSInitializeServletは、プロパティ・ファイルを使用して外部から設定できます。cis.initialization.fileプロパティは、初期化プロパティを含むプロパティ・ファイルへのパス(Web相対パスまたはクラスパス参照のいずれか)を設定できます。これにより、初期化を簡単にプロパティ・ファイルへ外部化できます。

デフォルトでは、SCSInitializeServletがweb.xmlファイル内でプロパティを検索できない場合、WARからのプロパティ・ファイルのロードを試行し、その次に、デフォルト値の/cis-initialization.propertiesを使用してクラスパスからのロードを試行します。このように、cis-initialization.propertiesというファイルをクラスパス(つまり、adapterconfig.xmlファイルと同じディレクトリ)に置く場合は、そのファイルが起動時に読み込まれます。

CISApplicationクラスで定義されているように、このプロパティ・ファイルにはすべての標準的な初期化プロパティを保持できます。これにより、CISをどのように初期化するかの構成をEAR/WARファイルの範囲外に移動できます。

サーバー・プロパティ定義

サーバー・プロパティの定義を次に示します。cis-initialization.propertiesという名前のファイルを作成し、そのファイルをアンバンドルのCIS配布ファイルのserver-earディレクトリ(これはadapterconfig.xmlファイルを含むディレクトリです)に保存することで、デフォルトをオーバーライドできます。

プロパティ

説明

cis.config.type

serverに設定する必要があります(デフォルト)。

cis.config.server.adapterconfig

adapterconfig.xmlファイルを指すURLです。標準的なURLに加え、クラスパスの形式(つまり、classpath:/)も可能です。

cis.config.server.type.options.ejb=true

デフォルトはtrue(EJBが有効)です。

cis.config.server.type.options.rmi=true

デフォルトはtrue(MIが有効)です。

初期化処理

起動時、SCSInitializeServletサーブレットはCISサーバーの初期化処理を開始します。これは、web.xmlファイルおよびクラスパスから様々なプロパティのロードを試行します(つまり、cis-initialization.properties)。そして、これらのプロパティをstaticメソッドのCISApplicationFactory.initialize(…)に渡します。この項では、この操作の順序について説明します。

SCSIntitialize init(ServletConfig)

Webアプリケーションの初期化中にWebアプリケーションのコンテナによって呼び出されます。

1. web.xmlからプロパティをロードします。

2. クラスパスの/cis-initialization.propertiesからプロパティをロードします。

3. CISApplicationFactory.initialize(properties)を呼び出します。

4. CISWebHelperクラスを介して、サーブレット・コンテキストの属性としてCISApplicationおよびコマンド・アプリケーション・インスタンスを設定します。

CISApplicationFactory initialize(properties)

SCSInitializeのオブジェクト・インスタンスのinit(…)メソッドから呼び出されます。CISApplicationFactory.initializeCisApplication(properties)を呼び出します。

CISApplicationFactory initializeCisApplication(properties)

CISをクライアント・モードで起動するか、またはサーバー・モードで起動するか決定します。CISApplicationFactory.initializeServer(properties)を呼び出します。

CISApplicationFactory initializeServer(properties)

CISApplicationFactory.initialize(properties)から呼び出されます。

1. アダプタの構成URLを作成します(最終的にadapterconfigをロードするために使用されます)。

2. IsolatedJarClassloaderをロードします。

3. CISApplication.initialize(properties)を呼び出します。

2.4 Web環境での統合

SCSInitializeServletを起動してCISアプリケーションを登録する場合は、次の設定をweb.xmlに追加します。

<servlet id="scsInitialize">
<servlet-name>scsInitialize</servlet-name>
<display-name>SCS Initialize Servlet</display-name>
<servlet-class>com.stellent.cis.web.servlets.SCSInitializeServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

search.jspと呼ばれる新規のJavaServerページを追加する場合は、次のようになります。

<%-- JSTL tag library --%>
<%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c" %>

<%--  CIS Application object placed in servlet context by the SCSInitialize servlet. Get the CIS Application and make a query --%>

<%
ICISApplication cisApplication =
(ICISApplication) request.getSession().getServletContext().
getAttribute ("CISApplication");
ISCSSearchAPI searchAPI =
cisApplication.getUCPMAPI ().getActiveAPI ().getSearchAPI ();

// create a context
ISCSContext context =
cisApplication.getUCPMAPI ().getActiveAPI ()._createSCSContext ();
context.setUser ("sysadmin");

// execute the search
ISCSSearchResponse response =
searchAPI.search (context, "dDocAuthor <substring> 'sysadmin'", 20);
%>
<!-- model the search results as desired -->

SCSInitializeServletにより、javax.servlet.ServletContext内のCISApplicationという名前の属性として、初期化済のCISApplicationクラスが配置されます。このCISApplicationインスタンスはWebアプリケーション全体で使用でき、スレッド・セーフです。1つのインスタンスをアプリケーション間で共有できます。

2.5 クラスのロード

UCPM 8.0.0 APIでは、CIS APIを使用するすべてのアプリケーションから特定のライブラリの依存関係を分離するため、カスタム・クラス・ローダーが使用されます。詳細は、Java 2プラットフォームAPI仕様を参照してください。

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html

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

- 「カスタム・クラス・ローダー」

- 「クラス・ローダーの使用方法」

2.5.1 カスタム・クラス・ローダー

このパラダイムでの実装は、com.stellent.cis.impl.IsolatedJarClassLoaderオブジェクトに含まれています。このカスタム・クラス・ローダーにより、jarは、ライブラリとして機能するネストされたjarファイルのセットを持つことができます。ネストされたjarファイルの構造を次に示します。

+ cis-application-8.0.0.jar
+-- com/stellent/cis/...
+-- META-INF
+-- lib/
+-- spring-1.1.5.jar
+-- log4j-1.0.3.jar
+-- ...

/libディレクトリにあるすべてのライブラリは、CISオブジェクトのクラスパスとなります。クラス・ローダーは、親クラス・ローダーからファイルをロードする前に、最初にこのローカル・ディレクトリを問い合せます。

しかし、使用するクライアントはいくつかのAPIクラスへのアクセスを必要とし、それらをクライアントのアプリケーション空間にインポートすることがあり、jarファイルのすべてを分離することはできません。このため、インタフェースのみがアプリケーション空間に公開され、実装は保持されて、依存関係が分離されます。依存関係および実装のためのクラス・ローダーは親ローダーへアクセスできるため、APIを使用するアプリケーションと同じバージョンのインタフェースにアクセスできます。これはまた、クライアントはUCPM APIのインタフェースにのみアクセスできることを意味します。newキーワードを使用して実装クラスを作成しようとすると、その結果はClassNotFoundExceptionになります。

2.5.2 クラス・ローダーの使用方法

このクラス・ローダーを使用するには、システムの初期化に新規のcom.stellent.cis.impl.CISApplicationFactoryオブジェクトを使用します。このオブジェクトは、IsolatedJarClassLoaderを自動的に検出し、必要に応じてこれを使用します。これは、必要ならば、元の形式(すべてのクラス・ファイルおよびライブラリをアプリケーション・レベルに置く形式)でもCISをデプロイできることを意味します。

現在のバージョンでは、CISはクラスパスにcis-client-8.0.0.jarファイルのみを必要とし、その他のライブラリは必要としません。cis-client-8.0.0.jarがアプリケーションのクラスパスにあるなら、次のコードを使用してCISを初期化します。

// the initialization properties (as defined in ICISApplication)
Properties properties = new Properties ();
ICISApplication cisApplication = CISApplicationFactory.initialize(properties);

com.stellent.cis.ICISApplicationへの参照を取得したら、APIと対話できます。以前との違いは、インタフェース・オブジェクト(com.stellent.cis.client内のすべて)へのアクセスのみができ、実装オブジェクトへのアクセスはできないということです。

カスタム・コマンドを実装する場合は、そのpublicインタフェースもクラスパスに置く必要があり、実装クラスはcis-client-8.0.0.jarにパッケージ化します。

2.6 オブジェクトの作成

UCPM 8.0.0 APIでは、ライブラリの依存関係および実装クラスを隠すため、カスタマイズされたクラス・ローダーが使用されます。クライアントのインタフェース・クラスのみがユーザーに公開されます。しかし、これはUCPM APIオブジェクトをインスタンス化するためにnewキーワードを使用しないことを意味します。このため、UCPM APIフレームワークでは、IUCPMAPIオブジェクト汎用の_createメソッドを使用して、特定のオブジェクト・インスタンスのインスタンス化をシステムに通知します。

オブジェクトは変更可能で、インタフェースのみが公開されるため、createObjectメソッドを使用して次のように必要なプロパティを設定します。

ISCSDocumentID docID =
(ISCSDocumentID)ucpmAPI.createObject(ISCSDocumentID.class);
docID.setDocumentID("20");

2.7 UCPM APIとの対話

初期化済CISApplicationインスタンスでは、getUCPMAPI ()メソッド(CISApplicationオブジェクト)は、IUCPMAPIオブジェクトへの参照を戻し、すべてのUCPM APIオブジェクトにアクセスできます。IUCPMAPIインタフェースは、UCPM APIの様々なAPIオブジェクトのロケータです。IUCPMAPIオブジェクトには、Active APIへの参照を取得するためのメソッドがあります。getActiveAPI ()は、コンテンツ・サーバーと通信するためのSCSActiveAPIオブジェクトへの参照を戻します。これにより、必要なAPIにアクセスし、UCPM APIを介したターゲット・サーバーへの呼出しを開始できます。

新規にインスタンス化されたICISObjectオブジェクトを使用したAPIオブジェクトの呼出し

多くのUCPM API呼出しは、ICISObjectまたはICISObjectから継承されたインタフェースを受け取ります。たとえば、ISCSDocumentInformationAPI (SCS API)では、getDocumentInformationByID ()メソッドはパラメータとしてISCSDocumentIDオブジェクトを受け取ります。

完全修飾メソッド名は次のようになります。

ICISApplication.getUCPMAPI ().getActiveAPI ().getDocumentInformationAPI ()

このような場合、パラメータとして渡す有効なオブジェクトへの参照を取得するため、別のICISObjectからオブジェクト参照を取得するか、またはUCPM APIで使用可能な汎用のcreateObjectメソッドを使用してICISObjectの新規インスタンスを作成できます。CIS 11gR1では、ライブラリの依存関係および実装クラスを隠すため、カスタマイズされたクラス・ローダーが使用されます。クライアントのインタフェース・クラスのみがユーザーに公開されます。しかし、これはUCPM APIオブジェクトをインスタンス化するためにnewキーワードを使用しないことを意味します。このため、CIS APIフレームワークでは、IUCPMAPIオブジェクト汎用の作成メソッドを使用して、特定のオブジェクト・インスタンスのインスタンス化をシステムに通知します。createObjectメソッドにより、任意のICISObjectの新規インスタンスを作成できます。

たとえば、ドキュメント情報を問い合せるためにドキュメントIDしかない場合は、次のようにします。

ISCSDocumentInformationAPI documentInfoAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI ().getDocumentInformationAPI ();

// create the document ID
ISCSDocumentID documentID =
(ISCSDocumentID) m_cisApplication.getUCPMAPI ().
createObject (ISCSDocumentID.class);
documentID.setDocumentID("12345");

ISCSDocumentInformationResponse docResponse =
documentInfoAPI.getDocumentInformationByID(m_context, documentID);

ICISObjectを必要とする任意のAPIで、createObjectメソッドを使用してAPIオブジェクトの新規インスタンスを作成できます。createObjectメソッドはクライアント側のメソッドであり、ターゲット・サーバーへの呼び出しを行いません。それはICISObject実装のコンストラクタとして扱われます。

コンテンツ・サーバーにチェックインされる新規のコンテンツ・アイテムなど、より複雑なオブジェクトを構築する必要がある場合は、次のように、いくつかのオブジェクトを作成してデータを移入する必要があります。

// Create an empty content object
ISCSContent content =
(ISCSContent) m_cisApplication.getUCPMAPI ().createObject(ISCSContent.class);

// Create an empty content ID object, and then give it a content ID
ISCSContentID contentID = (ISCSContentID) m_cisApplication.getUCPMAPI ().
createObject(ISCSContentID.class);
contentID.setContentID("my_document");

// Set all of the properties of the content item required for check in
content.setContentID(contentID);
content.setAuthor (context.getUser ());
content.setTitle ("Document Title");
content.setSecurityGroup ("Public");
content.setType ("ADACCT");
content.setProperty ("xCustomProperty", "Value for custom property");

2.8 インタフェースIContext

インタフェースIContextは、コマンドAPIとの通信に使用する汎用コンテキストです。このインタフェースは、現在の呼出し元のID、ターゲット・アダプタなどを決定するためのコンテキスト情報を処理します。

このコンテキストには、ユーザー名、アダプタ名を移入する必要があります。アダプタ名はadapterconfig.xmlファイルによって決定され、ユーザー名はターゲット・サーバーの有効なユーザーIDです。

IContextにはサブインタフェースのISCSContextがあります(ISCSContextはIContextインタフェースを拡張します)。ISCSContextは、SCS APIのために使用されるコンテキスト・オブジェクトであり、コンテンツ・サーバーとの通信時にはユーザーのオペレーティング・コンテキストを表します。

コンテキスト・オブジェクトは、_createメソッドを使用して作成できます。このため、ISCSContextはSCSActiveAPIから作成できます。

// create an ISCSContext
ISCSContext context =
m_cisApplication.getUCPMAPI ().getActiveAPI ()._createSCSContext ();

コンテキストを作成したら、ユーザー名、アダプタ名を移入する必要があります。これは、IContext Beanのアクセサ・メソッドを使用して実行できます。

context.setUser ("sysadmin");
context.setAdapterName ("myadapter");

CIS APIは、ICISCommonContextまたはIContext objectのいずれかを受け取ります。ICISCommonContextは特別な種類のコンテキストで、ISCSContextおよびISISContextのコンテナとして使用されます。これは、いくつかの異なるアダプタ間で情報をフェデレートするAPIで必要とされ、どのアダプタに問合せ、どのユーザー情報を使用するのかを指定します。呼出しが一度に1つのアダプタに対してのみ行われるインスタンスでは、1つのIContextが必要です。

// create an ICommonContext
ICISCommonContext m_commonContext =
m_cisApplication.getUCPMAPI ().getCommonAPI ()._createCommonContext ();

ICISCommonContextアダプタを作成したら、それに複数のアダプタを追加できます。この処理には、ICISCommonContext.addContext()メソッドを使用します。任意の数のアダプタを追加できます。ICISCommonContextに追加されたすべてのアダプタは、共通API呼出しの際に個別に使用されます。

同じISCSContextオブジェクトは、複数の問合せ用に、複数スレッドに渡って使用できます。Webアプリケーションのコンテキストでは、最も簡単な方法は、IContextオブジェクトをセッションに追加して、問合せごとにそれをセッションから取得することです。

最初にコンテンツ・サーバーに対してユーザー名を検証するログイン・メソッドがあり、成功したらHttpSessionオブジェクトにIContextオブジェクトを追加するサンプルのWebアプリケーションが提供されています(/SDK/Samples/WebSampleにあります)。詳細は、src/com/stellent/sdk/web/sampleapp/handlers/loginディレクトリにあるLoginActionHandlerクラスを参照してください。

2.9 インタフェースICISObject

インタフェースICISObjectは、UCPM APIのメタデータを持つすべてのオブジェクトのベース・インタフェースです。このため、すべてのUCPM APIオブジェクトはICISObjectから継承されます。インタフェースICISObjectでは、オブジェクト・プロパティの取得および設定が可能です。UCPM APIの呼出しで戻されるオブジェクトは、Bean(再利用可能なソフトウェア・コンポーネント)形式の値オブジェクトで、それはライブ・オブジェクトではなく、サーバー呼出しからのデータをカプセル化したものです。どのような方法であれ、オブジェクトの更新または変更はサーバーのデータには影響を与えません。サーバーのデータは、直接、任意のUCPM APIのメソッドを呼び出すことによってのみ変更できます。

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

- 「プロパティのアクセサ」

- 「プロパティのオブジェクト型」

- 「プロパティのコレクション」

2.9.1 プロパティのアクセサ

ICISObjectのほとんどの実装には、それ独自の特定のプロパティのアクセサ・メソッドがあります。しかし、すべてのプロパティはICISObjectのgetProperty ()メソッドを呼び出すことで取得できます。ICISObject.getProperty ()メソッドはICISPropertyオブジェクトを戻します。次のメソッドを使用して、このオブジェクトからプロパティの値またはプロパティの情報を取得できます。

- getValue()はプロパティの値を戻します。プロパティの値がnullの場合、getValue ()の呼出しの結果はnull参照になります。

- getDescriptor()は、プロパティの値の内容を説明するプロパティ・ディスクリプタを戻します。

// use the response object from the previous example - retrieve the content object
ISCSContent content = docResponse.getDocNode ();

// get the title property
String title = content.getTitle ();

// get the title by using the ICISObject getProperty method
title = content.getProperty ("title").getValue ().getStringValue ();

指定されたプロパティの参照中にエラーが発生した場合、ICISObjectのプロパティ・メソッドはPropertyRetrievalExceptionをスローします。PropertyRetrievalExceptionはRuntimeExceptionなので、コードで直接キャッチする必要はありません。例外がスローされるよくある例は、要求されたプロパティが存在しない場合、またはプロパティの値に無効なデータが含まれている場合です。この例外をキャッチして、エラーの具体的な理由の詳細を例外クラスに問い合せることができます。

ISCSPropertyもプロパティ・オブジェクトに戻すプロパティ値を設定できます。これを実行するには、適切なsetメソッドを使用するか、またはsetProperty ()を呼び出してBeanのプロパティ名を渡します(両方とも有効で、両方ともターゲット・オブジェクトのプロパティ値を設定します)。

// set the title - using the content object from the previous example
content.setTitle ("My New Title");

// set using the setProperty method
content.setProperty ("title", "My New Title");

2.9.2 プロパティのオブジェクト型

プロパティのオブジェクト型は、ICISObjectのプロパティ・メソッドの戻り値によって決定されます。汎用のgetProperty()メソッドを使用する場合、ISCSPropertyValueには、プロパティの値および特定のオブジェクト型(たとえば、boolean、float、longなど)としての値の両方を取得するメソッドがあります。

ISCSPropertyValueは、戻されるISCSPropertyオブジェクトのgetValue()メソッドにより取得します。

汎用のsetProperty()メソッドを使用してプロパティを設定する場合、メソッドに渡されるプロパティ値が正しい型であるか、または単純なBeanUtilsのプロパティ変換を介して適切な型に変換できることが重要です。

Apache BeanUtilは、org.apache.commonsプロジェクトのBeanのプロパティを移入するためのユーティリティです。

ISCSContentオブジェクトを見ると、readOnlyプロパティはブール型です。このため、次の例では、最初の3つのメソッドではプロパティ値の設定に成功し、最後のメソッドでは失敗します。

// correct
content.setReadOnly (true);
content.setProperty ("readOnly", Boolean.TRUE);
content.setProperty ("readOnly", "true");

// incorrect
content.setProperty ("readOnly", "not a boolean");

setProperty ()メソッドは第2パラメータとしてオブジェクトを受け取るため、booleanのカプセル化が必要です。また、前述したように、このメソッドではBeanUtilsのプロパティ変換が使用されるため、文字列のtrueはbooleanのTRUEに変換されます。前述の例のように、変換できないプロパティの値(たとえば、「not a boolean」)を渡すと例外が発生します。

2.9.3 プロパティのコレクション

使用可能なプロパティのリストは、ICISObjectインタフェースのgetProperties()メソッドを使用して取得できます。これにより、指定したオブジェクトの使用可能なすべてのプロパティが戻されます。

// using the content item from the previous example
Collection properties = content.getProperties ();

// iterate through the collection
for (Iterator it = properties.iterator (); it.hasNext (); ) {
ISCSProperty property = (ISCSProperty)it.next ();
String name = property.getDescriptor ().getName ();
ICISPropertyValue value = property.getValue ();
if (value != null) {
System.out.println (name + " = " + value.getStringValue ());
}
}

2.10 アダプタ構成ファイル

アダプタ構成ファイル(adapterconfig.xml)には、Oracle Content Serverインスタンスと通信するためのXML形式の構成情報が含まれています。これは、CISレイヤー用にどのサーバーとの通信を開くかを指定します。

1つのサーバーへの1つの接続がアダプタと呼ばれます。adapterconfig.xmlファイルで任意の数のアダプタを構成できます。adapterconfig.xmlファイルは、CISApplicationインスタンスを初期化するために必要です。

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

- 「adapter要素」

- 「config要素」

2.10.1 adapter要素

各アダプタの構成は、XMLマークアップ内の別々の要素です。adapter要素には次の表に示す4つの属性があります。

adapterの属性

説明

type

Oracle Content Serverとの接続ではscsに設定する必要があります。

default

trueの場合、このタイプのデフォルトのアダプタになります。タイプごとに、デフォルトのアダプタは1つのみが許可されます。

name

アダプタの名前。

サンプルのadapter要素を次に示します。

<adapter type="scs" default="true" name="myadapter">

2.10.2 config要素

config要素には、そのアダプタ固有のプロパティを定義するプロパティ要素のセットが含まれています。次に、これらの構成要素について説明します。

SCSアダプタの構成要素

SCSアダプタは、コンテンツ・サーバーと通信します。SCSアダプタの構成要素には、次の表に示す4つの一般的な属性があります。

プロパティ名

説明

post

コンテンツ・サーバーのポート。

host

コンテンツ・サーバーのホスト名またはIPアドレス。

type

次の値が使用できます。
socket: コンテンツ・サーバーのソケット通信レイヤーを使用します。

mapped: ファイル・アップロードおよびダウンロードのファイル転送に共有ディレクトリを使用します。

web: ファイル転送にHTTPリクエストを使用します。HTTPのBasic認証のため、コンテンツ・サーバーのユーザー名とパスワードが必要です(ファイルのダウンロードのみ)。

サンプルのSCSの構成要素を次に示します。

<adapter name="myadapter" type="scs" default="true">
<config>
<property name="host">localhost</property>
<property name="port">4444</property>
<property name="type">socket</property>
<property name="version">75</property>
</config>
<beans template=
"classpath:/META-INF/resources/adapter/adapter-services-scs.jxml"/>
</adapter>

デフォルトでは、コンテンツ・サーバーとのファイルのストリーミングにはコンテンツ・サーバーのソケット通信レイヤーが使用されます。しかし、大容量のチェックインまたはファイル取得では、最適化されたファイル転送オプションであるmappedまたはwebを設定できます。

mapped転送では、コンテンツ・サーバー上の共有ディレクトリからファイルがロードされます。これにより、はるかに高速にファイルを転送でき、その他のリクエストのために使用できるソケットを解放します。mapped転送を使用するには、次のプロパティを定義する必要があります。

プロパティ名

説明

contentServerMappedVault

アプリケーション・サーバーから見えるコンテンツ・サーバーのボールト・ディレクトリ。

appServerMappedVault

コンテンツ・サーバーから見えるアプリケーション・サーバーのボールト・ディレクトリ。

web転送では、ファイルのダウンロードにコンテンツ・サーバーのWebサーバーへのHTTPリクエストを使用します。web転送を使用するには、次のプロパティを定義する必要があります。

プロパティ名

説明

contentServerAdminID

コンテンツ・サーバーに対する認証に使用するコンテンツ・サーバー管理者のID。

contentServerAdminPassword

コンテンツ・サーバーに対する認証に使用するコンテンツ・サーバー管理者のパスワード。このパスワードは暗号化されます。

サンプルのweb転送を使用するSCSの構成要素を次に示します。

<adapter type="scs" default="true" name="myadapter">
<config>
<property name="port">4444</property>
<property name="host">localhost</property>
<property name="type">web</property>
<property name="contentServerAdminID">sysadmin</property>
<property name="contentServerAdminPassword">idc</property>
</config>
</adapter>

3 SCS APIの理解

UCPM APIは、コンテンツ・サーバーと通信するAPIの呼出しであるサービスAPIのセットにモデル化されます。

この章の構成は、次のとおりです。

- 「SCS APIへのアクセス」

- 「SCS APIオブジェクトの理解」

- 「SCS APIサーブレットの理解」

- 「SCS APIの使用」

注意:
クラス/インタフェース、フィールドおよびメソッドの詳細は、Oracle Fusion Middleware Content Integration Suite (CIS) Java APIリファレンスを参照してください。

3.1 SCS APIへのアクセス

UCPM APIは、getUCPMAPI ()メソッドを介してCISApplicationクラスで使用できます。getUCPMAPI ()メソッドは、IUCPMAPIオブジェクトへの参照を戻し、すべてのUCPM APIオブジェクトにアクセスできます。パブリックなインタフェースであるIUCPMAPIは、SCS、SISおよびCISのAPIオブジェクトのロケータです。SCS APIは、SCSActiveAPIオブジェクトへの参照を戻すgetActiveAPI ()を介して使用できます。

完全修飾メソッド名は次のようになります。

CISApplication.getUCPMAPI ().getActiveAPI ()

SCS APIには、次のものが含まれます。

- ISCSSearchAPI: これは、検索コマンドのコマンドAPI実装です。

- ISCSFileAPI: コンテンツ・サーバーからのファイルの取得、およびファイルの動的変換を処理します。

- ISCSWorkflowAPI: ユーザーのワークフロー・キューを表示し、コンテンツ・サーバーのワークフロー・エンジンと対話しながら、承認および拒否などのワークフロー・コマンドを処理します。

- SCSドキュメントAPI (ISCSDocumentCheckinAPIおよびISCSDocumentCheckoutAPI)は、コンテンツのチェックインとチェックアウト、コンテンツ情報、コンテンツの削除など、コンテンツ・サーバー内のアクティブ・コンテンツを処理します。

- 管理コマンド、コンポーネント・コマンドなどの実装のための様々なAPI。

ICommandFacadeインタフェースは、コマンド・インタフェースへのエントリ・ポイントです。これは、コマンドの取得、登録、実行などのコマンド・レイヤーとの対話を可能にします。コマンドは名前で参照され、名前は任意の文字列です。ドット文字(.)で構成される名前は、最初のセグメントは最上位レベルのカテゴリ、次のセグメントは第2レベルのカテゴリというように、階層として処理されます。コマンドは、その完全なコマンド名で取得するか、または使用可能なすべてのコマンドを参照できます。

完全修飾クラス名は次のようになります。

com.stellent.command.ICommandFacade

ISCSDocumentCheckinCommandAPIを使用する例:

ISCSDocumentCheckinCommandAPI commandAPI =
(ISCSDocumentCheckinCommandAPI)m_commandFacade.
getCommandAPI ("document.checkin");

3.2 SCS APIオブジェクトの理解

SCS APIは、コンテンツ・サーバーへのリクエストの組立てを担当します。SCS APIの呼出しは、1つ以上のIDCサービス(Content Serverサービス)の呼出しに変換されます。

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

- 「インタフェースISCSObject」

- 「インタフェースICISTransferStream」

- 「インタフェースISCSServerBinder」

- 「インタフェースISCSServerResponse」

- 「インタフェースISCSRequestModifier」

3.2.1 インタフェースISCSObject

ISCSObjectは、SCS APIのすべてのオブジェクトのベース・インタフェースです。ICISObjectを継承し、コンテンツ・サーバー・オブジェクトに関連する特定の機能を追加します。それは、オブジェクトを作成したISCSServerResponseオブジェクトへのアクセスを可能にし、また、getModifiedProperties ()メソッドを使用してオブジェクトが初期化された以降に変更されたプロパティのコレクションへのアクセスを可能にします。

ICISObjectというクラス名はUCPM 8.0.0 APIで新規のものです。

ISCSObjectオブジェクトには、ネイティブなプロパティ名というコンセプトがあります。具体的には、ISCSObjectで使用可能なプロパティは、Javaのプロパティ名とコンテンツ・サーバーのネイティブ名の異なる2つの名前で使用可能です。たとえば、ISCSContentアイテムのタイトルを取得する次の3つの方法は同等です。

String title = content.getTitle ();
title = content.getProperty ("title").getValue ().getStringValue ();
title = content.getProperty ("dDocTitle").getValue ().getStringValue ();

コンテンツ・サーバーでは、拡張可能なメタデータ・モデルがサポートされています。ISCSObjectオブジェクトは、getProperty ()メソッドを介して公開されるものよりも多くのプロパティを持つことができます。ISCSObjectの実装では、最も一般的なプロパティは公開されていますが、拡張メタデータなどのその他のプロパティはgetProperty ()メソッドを介してのみ使用可能です。また、getProperties ()メソッドは、対応するゲッターまたはセッター・メソッドのないプロパティを含め、オブジェクトのすべてのプロパティをリスト表示します。

for (Iterator it = content.getProperties ().iterator (); it.hasNext (); ) {
ISCSProperty property = (ISCSProperty)it.next ();
ISCSPropertyDescriptor descriptor = property.getActiveDescriptor ();
if (descriptor.isBeanProperty ()) {
System.out.println ("Property is available via get or set: " +
property.getDescriptor().getName ());
} else {
System.out.println ("Property is a hidden or extended property: " +
property.getDescriptor().getName ());
}
System.out.println ("Native property name: " + descriptor.getNativeName ());
}

ISCSObjectから戻されるプロパティはISCSPropertyインタフェースを実装し、このインタフェースはgetActiveDescriptor ()メソッドを追加します。ISCSPropertyDescriptorにより、アイテムの使用可能なプロパティにbeanPropertyおよびnativeNameプロパティが追加されます。

beanPropertyプロパティにより、現在のプロパティ・オブジェクトでゲッターまたはセッター・メソッドが使用可能かどうかが決定されます。このプロパティがfalseの場合、このプロパティ・オブジェクトはgetProperty ()メソッドを介してのみ使用できます。

nativeNameプロパティは、特定のプロパティのコンテンツ・サーバー・プロパティ名を戻します。

Dateオブジェクト

SCS APIのDateフィールドは、JavaのDateオブジェクトとして協定世界時(UTC時間)で処理されます。ISCSObjectの様々なプロパティに渡されるすべての日付は、UTC時間にする必要があります。SCS APIから戻されるすべての日付オブジェクトはUTC時間であり、個々のアプリケーション用に適切なタイムゾーンに変換する必要があります。

Date releaseDate = content.getReleaseDate ();

// convert from UTC time to Pacific Time Zone
Calendar calendar = Calendar.getInstance ();
calendar.setTime (releaseDate);
calendar.setTimeZone (TimeZone.getTimeZone ("America/Los_Angeles"));
// use calendar to display date...

3.2.2 インタフェースICISTransferStream

コンテンツ・サーバーとの送受信ファイル・ストリームが変更されました。CIS APIに対するインタフェースのみというアプローチを維持するため、すべてのストリームはICISTransferStreamインタフェースを介して送信されます。このインタフェースは、実際の物理的なストリーム・オブジェクトおよび付加的なメタデータ(ファイル名、コンテンツ長およびMIMEタイプを含む)を表します。ICISTransferStreamはインタフェースなので、InputStreamを直接拡張できません。このため、このオブジェクトを使用する場合は、まずICISTransferStream.getStream()を呼び出してストリームを取得し、それから適切にストリームを操作する必要があります。

以前のバージョンでInputStreamを戻していたいくつかのコマンドは、現在ではICISTransferStreamオブジェクトを戻します。たとえば、コンテンツ・サーバーからのストリームにアクセスするためにFileAPIでgetFile()を呼び出す場合、コードは次のようになります。

ICISTransferStream transferStream = fileAPI.getFile (context, documentID);
InputStream inputStream = transferStream.getInputStream();

ICISTransferStreamの実装には、コマンド・クライアントとコマンド・サーバー間の送受信のストリーム転送に必要なすべての配管が含まれています。InputStreamオブジェクトは直接シリアライズできないため、いくつかの追加作業を行って、サーバーがアクセスできる場所にストリームが置かれます。そのロジックはすべて、APIのユーザーには隠されています。

ストリーム・インスタンスは、createTransferStreamメソッドを使用してルートのIUCPMAPIインタフェースから取得できます。それは、ストリーム・コンテナの空のインスタンスを戻し、そのアクセサ・メソッドを使用してストリームのプロパティを設定できます。たとえば、次の例では、転送ストリームを作成してローカル・ファイルに振り向けます。

// create the stream implementation
ICISTransferStream transferStream = ucpmAPI.createTransferStream ();

// point it at a file
transferStream.setFile (new File ("mytestdoc.doc"));

ファイル・ハンドルではなく、メモリーにすでにストリームがあり、そのストリーム内のコンテンツをコンテンツ・サーバーにチェックインする場合は、ファイル名、コンテンツ・タイプ、ストリームの長さなど、ストリームの属性をすべて指定する必要があります。

ICISTransferStream transferStream = ucpmAPI.createTransferStream ();
transferStream.setFileName ("sample.txt");
transferStream.setInputStream (inputStream);
transferStream.setContentType ("text/plain");
transferStream.setContentLength (length);
checkinAPI.checkinFileStream (context, content, transferStream);

3.2.3 インタフェースISCSServerBinder

CIS 8.0.0 APIでは、新規オブジェクトのISCSServerBinderが提供され、これはコンテンツ・サーバーとのすべての通信に使用されるルート・オブジェクトです。ISCSServerBinderオブジェクトにより、コンテンツ・サーバーとの双方向のメッセージがカプセル化されます。それは、プロパティ、結果セット、ファイル、オプション・リスト、およびコンテンツ・サーバーが必要とするその他の特定のタイプの情報のコレクションです。

コンテンツ・サーバーへのすべてのAPI呼出しで、ISCSServerBinderのインスタンスが作成されます。各API呼出し(たとえば、ISCSSearchAPI.search())では、提供されるISCSObjectパラメータを使用してバインダを移入し、おそらく、その他の特定の情報を追加します。同様に、コンテンツ・サーバーからのストリームではないすべてのレスポンスは、ISCSServerBinderを拡張したISCSServerResponseオブジェクトです。

すべてのISCSObjectsは任意のメタデータのコレクションであるため、ISCSServerBinderはいくつかのオブジェクトのそれぞれに含まれるメタデータのコレクションです。特定のISCSServerBinderには、コンテンツ・サーバー問合せのメタデータ(ISCSSearchQueryを参照)、コンテンツの一部に関連するメタデータ、およびユーザー・データを扱うオブジェクトのリストが含まれている可能性があります。各ISCSObjectにはそのオブジェクトに特有のメタデータが含まれているため、ISCSServerBinderは多くのオブジェクトのメタデータを担当します。

プロパティ

ISCSServerBinderは、コアとなるISCSObjectインタフェースを拡張しているため、getPropertyメソッドおよびsetPropertyメソッドを介して任意のプロパティを取得および設定する機能を備えています。これらの任意のプロパティは、通常、特定のコンテンツ・サーバー用の引数が置かれる場所です。これは、次のサンプル・コードに示すように、setPropertyメソッドを使用して直接追加できます。

// create an empty binder
ISCSServerBinder binder =
(ISCSServerBinder)getUCPMAPI ().createObject (ISCSServerBinder.class);

// set some properties
binder.setProperty ("dDocTitle", "test");
binder.setProperty ("dSecurityGroup", "Public");

また、ISCSObjectインタフェースで使用可能なmergeObject機能を使用してプロパティを設定することもできます。次の例では、別のオブジェクトを作成し、そのオブジェクトにいくつかのプロパティを設定し、マージを使用してそのプロパティをサーバー・バインダに配置します。

// create an empty content item
ISCSContent content = (ISCSContent)getUCPMAPI ().createObject (ISCSContent.class);

// set some properties
content.setTitle ("test");
content.setSecurityGroup ("Public");

// merge into binder; this copies all the properties from content into the binder
binder.mergeObject (content);

前述の2つの例は同一であり、どちらも、ISCSServerBinderオブジェクト内にコンテンツ・アイテムのタイトル(dDocTitle)およびセキュリティ・グループ(dSecurityGroup)を設定するという結果になります。しかし、第2の方法を使用すると、コンテンツ・サーバーのネーミングの詳細を扱う必要がありません。ISCSContentオブジェクトにより、標準のJavaプロパティからコンテンツ・サーバーのメタデータへのマッピングが処理されます。

結果セット

結果セットは、コンテンツ・サーバー問合せから戻される行のコレクションです。これは、getResultSetおよびsetResultSetメソッドを介してISCSServerBinderに公開されます。そして、SCS APIの結果セットは、結果セットの各1行を表すオブジェクト型が含まれる、一様の項目からなるリストとして公開されます。コンテンツ・サーバー問合せから戻される多くの項目は、結果セットとして戻ります。すべての結果セットはISCSObjectオブジェクトのリストであるため、結果セットのアイテムは別の呼出しに使用できます。例として、検索を実行し、その中の最初のアイテムを更新する次のコードを確認してください。

// create an simple query
ISCSSearchQuery query =
(ISCSSearchQuery)getUCPMAPI ().createObject (ISCSSearchQuery.class):
query.setQueryText ("dDocName <substring> 'test' ");

// execute a search
ISCSSearchResponse response =
getUCPMAPI ().getActiveAPI ().getSearchAPI ().search (context, query);

// search results come back as a result set of ISCSSearchResult items
ISCSSearchResult result = (ISCSSearchResult)response.getResults ().get (0);

// change the title and check it in
result.setTitle ("new title");
getUCPMAPI ().getActiveAPI ().getDocumentUpdateAPI ().
updateInfo (context, result);

ファイル・オブジェクト

ISCSServerBinderにより、addFileメソッドを使用してファイルをコンテンツ・サーバーに送信できます。このメソッドはICISTransferStreamを受け取ります。作成されたファイルは、リクエスト中にバインダとともにコンテンツ・サーバーに送信されます。ファイルの追加は、プロパティの追加に似ています。

// create an empty stream
ICISTransferStream stream = getUCPMAPI ().createTransferStream ();

// point the stream at a local file
stream.setFile (new File ("testfile.txt"));

// add the stream to the binder
serverBinder.addStream ("myFile", stream);

前述のバインダがコンテンツ・サーバーに送信されるとき、ストリームがバインダとともに転送されます。コンテンツ・サーバー内では、このストリームをバインダにストリームを追加するときに指定した「myFile」というキーで使用できるようになります。

オブジェクトのコピーおよびキャスト

SCS API内の各ISCSObjectには、Oracle Content Serverと互換性のある低レベルのフォーマットでデータを保持するオブジェクトがあります。データ・オブジェクトと呼ばれるこのオブジェクトは、すべてのISCSObjectの実装で使用されます。これは、任意のISCSObjectを別の型のISCSObjectに変えられることを意味します。この機能を公開する2つのメソッドとして、ISCSObjectインタフェースで使用可能なcastObjectおよびcopyObjectメソッドがあります。

両方のメソッドは、単一のパラメータとして、作成するオブジェクトの型を表すクラス型を受け取ります。castObjectの呼出しは、それが呼び出されたオブジェクトと同じバッキング・データを指し示す新規オブジェクトの作成という結果になります。これは、元のオブジェクトへの変更がcastObjectの呼出しから戻されるオブジェクトにも同様に反映されることを意味します。copyObjectの呼出しは、バッキング・データのコピーが実行され、新規に作成されたオブジェクトは元のオブジェクトから独立して動作できる、という結果になります。

たとえば、「MY_DOC_INFO」と呼ばれるカスタム・コンテンツ・サーバー・サービスがあり、標準の「DOC_INFO」と似ていますが、それに加えていくつかのビジネス・ロジックを処理するものとします。しかし、「MY_DOC_INFO」の呼出しから戻されるバインダは、「DOC_INFO」の呼出しから戻されるものとほとんど同じです。SCS APIにはこの「MY_DOC_INFO」サービスに対する明示的なAPI呼出しがないため、汎用のexecuteIDCServiceの呼出しを使用する必要があります。しかし、castObjectメソッドを使用して、戻り値の型をよりユーザー・フレンドリなものに変更できます。

// build our custom call
ISCSServerBinder binder =
(ISCSServerBinder)getUCPMAPI ().createObject (ISCSServerBinder.class);
binder.setService ("MY_DOC_INFO");

// create a document ID and add it to the binder
ISCSDocumentID documentID =
(ISCSDocumentID)getUCPMAPI ().createObject (ISCSDocumentID.class);
documentID.setDocumentID ("12345");
binder.mergeObject (documentID);

// execute the call
ISCSServerResponse response =
(ISCSServerResponse)getUCPMAPI ().getAdministrativeAPI ().
executeIDCService (context, binder);

// use the cast to change it to a ISCSDocumentInformationResponse
ISCSDocumentInformationResponse infoResponse =
(ISCSDocumentInformationResponse)response.
castObject (ISCSDocumentInformationResponse.class);

// use the info response as usual
System.out.println ("Title: " + infoResponse.getDocNode ().getTitle ());

前述したように、castObject呼出しは、同じバッキング・データを共有することにより2つのオブジェクトをリンクします。前述の例では、responseオブジェクトに加えた変更は、同様にinfoResponseオブジェクトにも反映されます。

// set a property on the response
response.setProperty ("customProperty", "customValue");

// value is then available in the infoResponse object
String value = infoResponse.getPropertyAsString ("customProperty");

copyObjectがかわりに呼び出されていた場合は、responseとinfoResponseは互いに独立です。castObject呼出しでは新規のバッキング・データ・オブジェクトが作成されないため、castObjectはcopyObjectよりも小さなメモリー領域が作成されます。

3.2.4 インタフェースISCSServerResponse

SCS API呼出しの結果は、通常、ISCSServerResponseオブジェクトです。ISCSServerReponseは、すべてのレスポンス・オブジェクトのベース・インタフェースです。これは、最後のリクエストに対するコンテンツ・サーバーからのレスポンスをカプセル化します。ほとんどのメソッドは、レスポンスに固有のプロパティを提供する、このインタフェース固有の実装を持っています。特定のレスポンス・オブジェクトおよびそれぞれに使用可能なプロパティの詳細は、Javadocを参照してください。

現在のリリースでは、以前はInputStreamへの参照を戻していたいくつかの呼出しは、現在はそのかわりにICISTransferStreamオブジェクトを戻します。新しい転送ストリーム・インタフェースの使用方法は、インタフェースISCSRequestModifierを参照してください。

3.2.5 インタフェースISCSRequestModifier

SCS APIを使用したコンテンツ・サーバーへのすべてのリクエストでは、その結果としてISCSServerBinderオブジェクトが作成されます。特定の状況では、特定のコンテンツ・サーバーの要件に一致するように、指定されたAPI呼出しのバインダ・コンテンツの変更が必要になります。ISCSRequestModifierインタフェースは、まさにこの目的のために設計されており、カスタムの変更を加えてコンテンツ・サーバーへの呼出しを拡張します。

SCS APIのすべてのAPIには対応するメソッドがあり、そのメソッドは最初のパラメータとしてISCSRequestModifierオブジェクトを受け取ります。ISCSSearchAPIのAPIを次に示します。

/**
* Command the implements searching against the content server.
* @param SCSContext the context object representing the current user
* @param searchQuery the content server query object
*/

public com.stellent.cis.client.api.scs.search.
ISCSSearchResponse search (com.stellent.cis.client.api.scs.context.
ISCSContext SCSContext,
com.stellent.cis.client.api.scs.search.ISCSSearchQuery searchQuery)
throws com.stellent.cis.client.command.CommandException;

/**
* Command the implements searching against the content server.
* @param requestModifier modify the request
* @param SCSContext the context object representing the current user
* @param searchQuery the content server query object
* @see com.stellent.cis.server.api.scs.commands.search.SearchCommand
*/

public com.stellent.cis.client.api.scs.search.
ISCSSearchResponse search (com.stellent.cis.client.api.scs.
ISCSRequestModifier requestModifier, com.stellent.cis.client.api.scs.context.
ISCSContext SCSContext, com.stellent.cis.client.api.scs.search.I
SCSSearchQuery searchQuery)
throws com.stellent.cis.client.command.CommandException;

第2のAPIは、追加のISCSRequestModifier引数とともに、第1のAPIのパラメータをすべて受け取ります。標準の検索API、およびそのすべてのロジックは、カスタム・ロジックを追加して使用できます。たとえば、カスタム・コンポーネントがコンテンツ・サーバーにインストールされており、検索問合せ中、「myCustomProperty」プロパティが設定されていることを検出したら、何か追加の処理を行うものとします。CISでこれを行うには、次のように、バインダを変更するISCSRequestModifierを使用できます。

// build a search query
ISCSSearchQuery query =
(ISCSSearchQuery)getUCPMAPI ().createObject (ISCSSearchQuery.class);
query.setQueryText ("dDocName <substring> `test`");

// build a request modifier
ISCSRequestModifier modifier =
(ISCSRequestModifier)getUCPMAPI ().createObject (ISCSRequestModifier.class);

// access the binder off the modifier and add in our custom data
modifer.getServerBinder().setProperty ("myCustomProperty", "customValue");

// execute the search as normal
getUCPMAPI ().getActiveAPI ().getSearchAPI ().search (modifier, context, query);

これで、検索呼出しの間、変更されたバインダが使用されます。カスタム・プロパティの値は、標準の検索呼出しと一緒に送信されます。この同じメソッドを、任意のプロパティの設定、ファイルの追加、結果セットの設定に使用でき、またコンテンツ・サーバーで実行されるサービス・コールのオーバーライドにさえも使用できます。

3.3 SCS APIサーブレットの理解

J2EE/Web環境で運用され、サーバー・モードで実行されている場合、SCS APIは、いくつかのサーブレットがシステムで利用可能であることを必要とします。

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

- 「サーブレットの説明」

- 「SCSサーブレットのパラメータ」

- 「サーブレットのセキュリティ」

- 「サーブレットとAPIの対話」

3.3.1 サーブレットの説明

この表は、特定のWebアプリケーションのweb.xmlファイルで必要となる、サーブレットの名前および適切な構成情報をリストしています。

完全修飾名

マッピング

説明

SCSFileDownloadServlet
com.stellent.web.servlets.SCSFileDownloadServlet

/getfile

クライアントはコンテンツ・サーバーからファイルを取得できます。

SCSCommandClientServlet
com.stellent.web.servlets.SCSCommandClientServlet

/scscommandclient

CISクライアント用にCISサーバーの設定情報を公開します。

SCSFileTransferServlet
com.stellent.web.servlets.SCSFileTransferServlet

/scsfiletransfer

UCPM APIは、CISクライアントにファイルを転送できます。

SCSInitialize
com.stellent.web.servlets.SCSInitialize

N/A

CISアプリケーション・インスタンスを初期化します。LoadOnStartupサーブレットとして設定する必要があります。

SCSDynamicConverterServlet
com.stellent.web.servlets.SCSDynamicConverterServlet

/getdynamicconversion/*

動的変換を実行し、結果をクライアントにストリーミングします。

SCSDynamicURLServlet
com.stellent.web.servlets.SCSDynamicURLServlet

/scsdynamic/*

コンテンツ・サーバーから動的なファイルを取得します。動的に変換されたドキュメントのURLを書き換えるときに使用されます。

3.3.2 SCSサーブレットのパラメータ

この項では、次のサーブレットのパラメータについて説明します。

- 「SCSFileDownloadServlet」

- 「SCSDynamicConverterServlet」

- 「SCSDynamicURLServlet」

この項では、使用可能なセキュリティ・パラメータは何も指定していません(セキュリティ・パラメータは「サーブレットのセキュリティ」で詳しく説明しています)。サーブレットのセキュリティの項で示されているコンテンツ・サーバーに対して行うすべての呼出しは、IDを使用しています。

3.3.2.1 SCSFileDownloadServlet

プロパティ

必須

説明

adapterName

true

ドキュメントの問合せを行うアダプタ名。

dDocName

該当なし

取得するドキュメントのコンテンツID。

rendition

false

コンテンツのレンディション。dDocNameを指定するときのみ有効。

revisionSelection

false

コンテンツを選択するときに使用するrevisionSelection。dDocNameを指定するときのみ有効。

forceStream

false

trueの場合、アダプタの最適化されたファイル転送の設定には関係なく、コンテンツはGET_FILEの呼出しを介してコンテンツ・サーバーからストリーミングされます。デフォルトはfalse。

3.3.2.2 SCSDynamicConverterServlet

プロパティ

必須

説明

adapterName

true

ドキュメントの問合せを行うアダプタ名。

contentID

contentIDまたはdocumentIDのいずれかが必須。

取得するドキュメントのコンテンツID(dDocName)。

documentID

該当なし

取得するドキュメントのドキュメントID(dID)。

rendition

false

取得するドキュメントのレンディション。contentIDが指定されている場合のみ有効。

revisionSelectionMethod

false

ドキュメントの選択に使用するrevisionSelectionMethod。contentIDが指定されている場合のみ有効。

viewFormat

false

変換の表示形式(つまり、NativeまたはWebViewable)。

useAlternate

false

trueの場合、変換に代替ファイルを使用します。デフォルトはfalse。

3.3.2.3 SCSDynamicURLServlet

プロパティ

必須

説明

adapterName

true

ドキュメントを問い合せるアダプタ名。パラメータとして渡されるのではなく、次のようにURLの最後のセグメントとして指定されます。
/cis-server/scsdynamic/ <adaptername>?...

fileUrl

true

取得するコンテンツ・サーバーのファイルへの相対パス。

3.3.3 サーブレットのセキュリティ

SISFileDownloadServletおよびSCSInitializeServletを除くすべてのサーブレットは、UCPM APIの呼出しを行うため、ユーザー・コンテキストを持つ必要があります。デフォルトでは、HttpServletRequest.getUserPrincipal()メソッドを使用してユーザーIDを決定し、ISCSContextオブジェクトを介してUCPM API呼出しにそのIDを渡します。この動作は、サーブレットに次のような初期化パラメータをいくつか指定することでオーバーライドできます。

- principalLookupAllowed: TRUEに設定すると、サーブレットは構成されたスコープ内でユーザーIDを検索します。デフォルトのスコープはsessionです。

- principalLookupScope: 検索のスコープ。principalLookupAllowedがTRUEの場合に有効です。定義されたスコープは、getAttribute ()メソッドを呼び出して現在のユーザーの名前を検出するために使用されます。request、sessionまたはapplicationのいずれかを指定できます。デフォルトはsessionです。

- principalLookupName: ユーザーIDを保持するスコープ・パラメータの名前。principalLookupAllowedがTRUEの場合に有効です。デフォルトはprincipalです。

- getUserPrincipalEnabled: FALSEに設定すると、ユーザーIDを決定するためのHttpServletRequest.getUserPrincipal ()メソッドの呼出しは実行されません。デフォルトはTRUEです。

- principal: ユーザーIDを決定できない場合のデフォルトのユーザーID。デフォルトは、guestです。

現在のユーザーIDを決定するため、サーブレットは最初にprincipalLookupAllowedフラグのステータスをチェックします。TRUEの場合、principalLookupScopeパラメータの設定によりスコープを決定し、ユーザーの名前を検索します。現在のスコープで、パラメータとしてprincipalLookupNameを使用してgetAttribute ()メソッドが呼び出されます。principalを検出できない場合は、次にgetUserPrincipalEnabledフラグのステータスをチェックします。このフラグがTRUEの場合、HttpServletRequest.getUserPrincipal ()メソッドを呼び出します。それがnullを返す場合、デフォルトのprincipalを使用してリクエストを実行します。

サーブレットに何も変更を加えなくても、デフォルトの動作により、HttpServletRequest.getUserPrincipal ()メソッドがチェックされ、それから必要に応じてデフォルトが使用されます。もう一方のrequest、sessionおよびapplicationのチェックは、web.xmlファイル内のサーブレット定義のinit-paramで指定されている場合にのみ実行されます。

3.3.4 サーブレットとAPIの対話

ISCSFileAPI.getDynamicConversion()メソッドは、指定されたドキュメントの動的な変換を行います(Dynamic Converterコンポーネントはコンテンツ・サーバーにインストールされているものと想定します)。getDynamicConversion()の呼出しでも、CISサーブレットへの戻り先を指すように(直接コンテンツ・サーバーを指すのではなく)戻されるURLがリライトされ、Web/Portal環境でレンダリングされたときに正しく表示されます。

リライトされたURLはSCSDynamicURLServletを指し示し、そして、それはSCS APIを介してコンテンツ・サーバーからアイテムを取得し、クライアントにストリーミングを戻します。サーブレットは、「サーブレットのセキュリティ」で説明する方法でコンテキストのユーザーIDを決定します。

サーブレットがユーザーIDを決定するため、getDynamicConversion()の呼出しを実行したユーザーは、レンダリングされたHTMLのリンクをクリックしたユーザーと同じユーザーIDを持っていない可能性があります。HttpServletRequest.getUserPrincipal()のユーザーIDがISCSContextのユーザーIDと一致しない場合がこのケースになります。

その場合は、「サーブレットのセキュリティ」で説明する方法を使用してSCSDynamicURLServletをカスタマイズし、セッションでユーザー・パラメータを探すように指示できます。または、SCSDynamicURLServletでgetDynamicConversion()を呼び出し、ユーザーがURLにパラメータを追加することを可能にするオプションでISCSConvertedUrlInfoオブジェクトを渡すことができ、このパラメータをアプリケーションがコンテキストを識別するために使用できます。

たとえば、アプリケーションでstellentPrincipalという名前のセッション属性に現在のユーザーIDを保存している場合、SCSDynamicURLServletのweb.xmlを次のように変更します(必要に応じて、その他のサーブレットについても)。

<servlet>
<servlet-name>scsdynamic</servlet-name>
<servlet-class>com.stellent.web.servlets.SCSDynamicURLServlet</servlet-class>
<init-param>
<param-name>sessionPrincipalAllowed</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>sessionPrincipalName</param-name>
<param-value>stellentPrincipal</param-value>
</init-param>
</servlet>

3.4 SCS APIの使用

SCS検索、SCSファイル、SCSドキュメントおよびSCSワークフローの各APIについて説明し、サンプル・コードを提供します。これらのAPIにより、検索、コンテンツのチェックインとチェックアウト、およびワークフローの承認と拒否などのタスクが実行できます。

CISApplicationインスタンス(m_cisApplicationという名前)は初期化済で、コンテキスト・オブジェクト(m_contextという名前)は作成済であるものとします。追加のサンプルは、SDK/Samples/CodeSamples/ディレクトリにあります。

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

- 「SCS検索API」

- 「SCSファイルAPI」

- 「SCSドキュメントAPI」

- 「SCSワークフローAPI」

3.4.1 SCS検索API

ISCSSearchAPIは、検索コマンドのコマンドAPI実装です。ISCSSearchAPIを使用し、次のコードを使用してコンテンツ・サーバーを検索できます。

// get a handle to the SCS Search API
ISCSSearchAPI searchAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI ().getSearchAPI ();
ISCSSearchResponse searchResponse =
searchAPI.search (m_context, "dDocTitle <substring> 'HR'",  25);

// iterate all results
for (Iterator it = searchResponse.getResults ().iterator (); it.hasNext (); ) {
ISCSSearchResult searchResult = (ISCSSearchResult)it.next ();

// print out the title and author
System.out.println ("Found result: " + searchResult.getTitle () + " by " +
searchResult.getAuthor ());
}

3.4.2 SCSファイルAPI

ISCSFileAPIは、コンテンツ・サーバーからのファイルの取得、およびファイルの動的変換を処理します。コンテンツのIDを渡すことで、簡単にファイルを取得できます。または、ファイルのWebおよびAlternateバージョンへの参照を取得するオプションのISCSFileInfoオブジェクトを使用して、異なるバージョンのファイルを取得できます。

// get the SCS File API
ISCSFileAPI fileAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI ().getFileAPI ();

ICISTransferStream transferStream =
fileAPI.getFile (m_context, content.getDocumentID ());

InputStream stream = transferStream.getInputStream();
// do something with the stream...

ISCSFileInfoオブジェクトを取得する_createFileInfo()メソッドも使用できます。このオブジェクトにはいくつかのプロパティがあり、それにより、取得するファイルのレンディションをさらに選択できます。次のサンプルでは、fileInfoオブジェクトを使用してファイルのWeb表示可能レンディションを取得しています。同様の処理を使用して、Alternateレンディションを取得できます。

// get the web viewable version of the file
ISCSFileInfo fileInfo =
(ISCSFileInfo) m_cisApplication.getUCPMAPI ().createObject(ISCSFileInfo.class);
fileInfo.setRendition ("Web");

// get the file
ICISTransferStream transferStream =
fileAPI.getFile (m_context, content.getDocumentID (), fileInfo);
InputStream stream = transferStream.getInputStream();
// do something with the stream...

SCSファイルAPIは、コンテンツ・サーバーのDynamic Converterコンポーネントを介してコンテンツのHTMLレンディションを生成するために使用できます(Dynamic Converterコンポーネントがインストールされている必要があります)。

getFile ()の呼出しも同様で、IDとともにgetDynamicConversion ()を呼び出してHTML変換を取得するか、またはISCSFileInfoおよびISCSConvertedFileInfoオブジェクトを使用して、処理する変換ルールと適用する明示的なテンプレートの情報をAPIに渡すことができます。

ICISTransferStream transferStream =
fileAPI.getDynamicConversion (m_context, content.getDocumentID ());
// process the stream...

次のサンプルは前述の機能を1つのメソッドに組み合せたもので、カスタム変換テンプレートを使用して、指定されたコンテンツ・オブジェクトの代替レンディションを動的に変換します。

// create the converted file bean and set our properties
ISCSConvertedFileInfo convertedInfo = fileAPI.__createConvertedFileInfo ();
convertedInfo.setConversionLayout ("custom_layout");
convertedInfo.setRendition ("Alternate");

// execute the dynamic conversion
ICISTransferStream transferStream =
fileAPI.getDynamicConversion (m_context, content.getDocumentID (),
convertedInfo);
// do something with the stream...

3.4.3 SCSドキュメントAPI

SCSドキュメントAPIは、コンテンツのチェックインとチェックアウト、コンテンツ情報、コンテンツの削除など、コンテンツ・サーバー内のアクティブ・コンテンツを処理します。

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

- 「ISCSDocumentCheckinAPI」

- 「ISCSDocumentCheckoutAPI」

3.4.3.1 ISCSDocumentCheckinAPI

このAPIは、すべてのコンテンツのコンテンツ・サーバーへのチェックインを処理します。ディスクからのファイルのシンプルなチェックインでは、次のコードが使用できます。

// get the checkin api
ISCSDocumentCheckinAPI checkinAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI ().getDocumentCheckinAPI ();

// create an empty content object with the specified content ID
ISCSContent content =
(ISCSContent) m_cisApplication.getUCPMAPI ().createObject(ISCSContent.class);

ISCSContentID contentID =
(ISCSContentID) m_cisApplication.getUCPMAPI ().createObject(ISCSContentID.class);
contentID.setContentID("my_test_file");
content.setContentID(contentID);
content.setAuthor (m_context.getUser ());
content.setTitle ("Custom Title");
content.setSecurityGroup ("Public");
content.setType ("ADACCT");

// get the file stream
File myFile = new File ("c:/test/testcheckin.txt");
ICISTransferStream transferStream =
m_cisApplication.getUCPMAPI ().createTransferStream();
transferStream.setFile(myFile);

// execute the checkin
checkinAPI.checkinFileStream (m_context, content, transferStream);

コンテンツ・サーバーの多くのデプロイメントでは、新しいコンテンツのために設定を必要とする必須の拡張プロパティがあります。これらのプロパティは、すべてのICISObjectオブジェクトで使用可能なsetProperty()呼出しを使用してコンテンツ・オブジェクトに設定できます。たとえば、いくつかのカスタム・プロパティを次のように設定できます。

// set an extended property
content.setProperty ("xCustomProperty", "Custom Value");

セッター・メソッドを呼び出すのではなく、すべてのプロパティを設定するsetProperty()メソッドを使用できます。JavaBeanの名前(たとえば、title)またはJavaBeanプロパティと対応するネイティブのコンテンツ・サーバーのプロパティ名(つまり、dDocTitle)のいずれかを使用できます。次のサンプルでは、すべて同等の3つの方法でtitleプロパティを設定します。

// set via a standard property setter
content.setTitle ("My Title");

// set a standard property using the JavaBean property name
content.setProperty ("title", "My Title");

// set a property using the native content server property name
content.setProperty ("dDocTitle", "My Title");

3.4.3.2 ISCSDocumentCheckoutAPI

このAPIは、すべてのコンテンツのコンテンツ・サーバーからのチェックアウトを処理します。コンテンツ・アイテムは、そのIDによって識別されます。

// get the checkout api
ISCSDocumentCheckoutAPI checkoutAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI ().getDocumentCheckoutAPI ();

// checkout the file
checkoutAPI.checkout (m_context, content.getDocumentID ());

3.4.4 SCSワークフローAPI

ISCSWorkflowAPIは、ユーザーのワークフロー・キューを表示し、コンテンツ・サーバーのワークフロー・エンジンと対話しながら、承認および拒否などのワークフロー・コマンドを処理します。次のサンプル・コードは、ワークフロー・エンジンにシステムで現在アクティブなワークフローを問い合せる例を示します。

// get the workflow API
ISCSWorkflowAPI workflowAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI().getWorkflowAPI ();
ISCSWorkflowResponse workflowResponse =
workflowAPI.getActiveWorkflows (m_context);

// iterate through the workflows
for (Iterator it = workflowResponse.getActiveWorkflows().iterator();
it.hasNext (); ) {
ISCSWorkflow workflow = (ISCSWorkflow)it.next ();
String name = workflow.getName ();
String status = workflow.getWorkflowStatus ();
System.out.println ("SCS workflow: " + name + "; status = " + status);
}

ワークフローとの最も一般的な対話は、ワークフローを拒否または承認し、ワークフローの次のステップに進めることです。次のコードは、ユーザーの個人的なワークフロー・キューを取得し、保留中のすべてのワークフローを承認する方法を示しています。

// get the workflow API
ISCSWorkflowAPI workflowAPI =
m_cisApplication.getUCPMAPI ().getActiveAPI().getWorkflowAPI ();

// get the workflow queue
ISCSWorkflowQueueResponse queueResponse =
workflowAPI.getWorkflowQueueForUser (m_context);
for (Iterator it = queueResponse.getWorkflowInQueue().iterator(); it.hasNext();) {
ISCSWorkflowQueueItem queueItem =
(ISCSWorkflowQueueItem)it.next();

// approve the workflow
workflowAPI.approveWorkflow(m_context, queueItem.getDocumentID ());
}

索引
A  C  D  G  I  J  O  P  S  U  V

A

アクセッサ・メソッド, 2.9.1

adapter要素, 2.10.1

APIオブジェクト

ISCSObject, 3.2.1

ISCSServerResponse, 3.2.1

APIオブジェクト, 呼出し, 2.7

C

文字エンコーディング, 1.2

CIS API

メソッドの呼出し, 2.2

コマンド・オブジェクト, 1.1

ICISCommonContext Bean, 2.2

IContext Bean, 2.2

オブジェクトのメタデータ, 1.1

オブジェクト・モデル, 1.1

クラス

com.stellent.web.servlets.SCSCommandClientServlet, 3.3.1

com.stellent.web.servlets.SCSDynamicConverterServlet, 3.3.1

com.stellent.web.servlets.SCSDynamicURLServlet, 3.3.1

com.stellent.web.servlets.SCSFileDownloadServlet, 3.3.1

com.stellent.web.servlets.SCSFileTransferServlet, 3.3.1

com.stellent.web.servlets.SCSInitialize, 3.3.1

Commandデザイン・パターン, 1.1, 1.1 config要素, 2.10.2 Content Integration Suite

階層化アーキテクチャ, 1.1

D

DocumentCheckin, 3.4.3.1

DocumentCheckout, 3.4.3.2

G

getProperty()メソッド, 2.9.2, 3.2.1

getUCPMAPI ()メソッド, 2.1, 2.1, 3.1, 3.1

getUserPrincipalEnabled, 3.3.3

getValue()メソッド, 2.9.2

I

ICISCommonContext, 2.8

ICISCommonContext Bean, 2.2

ICISObject, 2.7, 2.9

プロパティ・メソッド, 2.9.1

ICISObjects, 2.2 IContext, 2.8 IContext Bean, 2.2 初期化パラメータ

getUserPrincipalEnabled, 3.3.3

principal, 3.3.3

principalLookupAllowed, 3.3.3

principalLookupName, 3.3.3

principalLookupScope, 3.3.3

国際化(文字エンコーディング), 1.2 ISCSFileAPI, 3.4.2 ISCSObjectオブジェクト, 3.2.1 ISCSSearchAPI, 3.4.1 ISCSServerResponse, 3.2.1 ISCSWorkflowAPI, 3.4.4

J

J2EE

Commandデザイン・パターン, 1.1, 1.1

準拠アプリケーション・サーバー, 1.1

Java仮想マシン。「JVM」を参照 JVM

アプリケーション, 1.1

O

オブジェクト, 2.8, 2.9

P

principal, 3.3.3

principalLookupAllowed, 3.3.3

principalLookupName, 3.3.3

principalLookupScope, 3.3.3

プロパティのアクセサ, 2.9.1

プロパティのコレクション, 2.9.3

プロパティのオブジェクト型, 2.9.2

PropertyRetrievalException, 2.9.1

S

SCS API

日付書式, 3.2.1

DocumentCheckin, 3.4.3.1

DocumentCheckout, 3.4.3.2

説明, 3.1

サーブレットとの対話, 3.3.4

ISCSFileAPI, 3.4.2

ISCSSearchAPI, 3.4.1

ISCSWorkflowAPI, 3.4.4

サーブレットのセキュリティ, 3.3.3 サーブレットとAPIの対話, 3.3.4 setProperty ()メソッド, 2.9.2

U

UCPM API

呼出し, 2.7

説明, 1, 2, 2, 2.1, 3

ICISObject, 2.7

方法, 2.2

SCS API, 3.1

UTC時間, 3.2.1

V

値オブジェクト, 2.9

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

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の登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利

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

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）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

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

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。