レベル: 初級 坂巻 義彦, 情報マネジメント技術/大和ソフトウェア開発研究所 , IBM
2006年 12月 08日 アプリケーション・プログラムを開発する際に、「管理メタデータ・オブジェクト」と呼ばれるユーザー、グループ、サーバ情報、ACL情報、特権などの情報と、「データモデル・メタデータ・オブジェクト」と呼ばれる属性などの情報の定義を行います。この定義をXMLファイルで管理し、開発機から本番機へ簡単にデプロイメントできる仕組みが提供されました。この方法について解説します。
はじめに
IBM DB2 Content Manager V8.3(以下Content Managerと略す)では、システム管理データをXMLファイルへ変換するJavaのAPIを提供します。Content Managerのシステム管理データとは次の3種類を指しています。
- 管理オブジェクト
- データ・モデル・オブジェクト
- データ・インスタンス・オブジェクト
これらのシステム管理データは、Content Managerが提供するcmbxmlservice.jar(IBMCMROOT/lib以下にあります。IBMCMROOT はContent Manager導入ディレクトリーです。)のクラス群を用いてXMLに変換することが可能です。今回は管理オブジェクトおよびデータ・モデル・オブジェクトについて解説します。これらのオブジェクトは、Content Managerサーバー側で管理されるアプリケーションを定義するためのメタデータとなります。
コンテンツそのものの検索・更新・削除など、XMLサービスAPIを介して取り扱うデータ・インスタンス・オブジェクトについては、「IBM DB2 Content Manager V8.3の活用方法 ~ 新機能!XMLサービスAPIとは(その2:インスタンス関連)」をご覧ください。
システム管理データをXML形式で表現することによって、容易にオブジェクトのエクスポート、インポートが可能になります。これは次のようなビジネス・シーンで大いに効果を発揮します。
- 新規アプリケーション開発時
- 開発システムからテスト・システムへ、テスト・システムから本番システムへといった、異なるシステム間のシステム管理データの移行
- 実働アプリケーションのトラブル・シューティング
- 本番環境のトラブル・シューティングを行う際に、問題診断のためのシステム管理データの移行
- アプリケーション拡張時
Content Managerのシステム管理クライアントにはエクスポート、インポートを行うツールが含まれています。したがって個別にアプリケーションを開発することなく、システム管理データを含むXMLファイルのエクスポート、インポートを簡単に行うことが可能です。
なお、XMLサービスAPIに関しては、提供されている言語としてはJavaのみとなり、C++は提供されません。
管理オブジェクトとデータ・モデル・オブジェクト
Content Managerサーバーでアプリケーションを定義する2つのメタデータ、すなわち、管理オブジェクトおよびデータ・モデル・オブジェクトはそれぞれ以下のような内容を含みます。これはContent Managerシステム管理クライアントで定義できる項目と一致しています。言い換えると、これまでシステム管理クライアントを用いて手動で設定を行っていた部分は、XMLファイル経由でのエクスポート、インポートによる作業が可能となります。
管理オブジェクト
ライブラリー・サーバー・パラメータ、リソース・マネージャー、認証、権限付与、データのモデル化の一部、文書ルーティング、以上それぞれのメタデータを管理オブジェクトと呼びます。
cmadmin.xsdという事前定義XMLスキーマ(IBMCMROOT/config以下にあります)を使用して、以上のオブジェクトを含むXMLファイルを定義します。
リスト1では、XMLサービスAPIを通じてエクスポートしたContent Manager管理ユーザーicmadminのXMLファイルの例を示します。
リスト1. エクスポートされた管理オブジェクトの例
<?xml version="1.0" encoding="UTF-8"?>
<?icmxml version="1.0"?>
<CMSystemAdminDefinitions
xmlns="http://www.ibm.com/xmlns/db2/cm/api/1.0/schema"
xmlns:cm="http://www.ibm.com/xmlns/db2/cm/api/1.0/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<user LDAPInfo=" " adminDomainName="SuperDomain" defaultRM="rmdb"
defaultSMSColl="CBR.CLLCT001"
description="ICM Super System Administrator" name="ICMADMIN"
password="password" passwordExpiration="0"
systemPasswordEnabled="true" userACL="PublicReadACL"
userGrantPrivilegeSet="ClientUserReadOnly" userPrivilegeSet="AllPrivs"/>
</CMSystemAdminDefinitions>
|
セキュリティー上の理由から、次の管理オブジェクトのパスワードは「password」という文字列でエクスポートされます。
- ユーザーのパスワード
- リソース・マネージャーのサーバー定義内のパスワード
- リソース・マネージャー構成定義内のリソース・マネージャーのパスワード
- ライブラリー・サーバー構成のDB2 Text Information ExtenderまたはDB2 Net Search Extenderのパスワード
したがって、エクスポートしたXMLファイルをもとにインポートしたい場合、このXMLファイルのパスワード変更する必要があります。変更しないと「password」がターゲットのシステムのパスワードとしてインポートされますので気をつけてください。
データ・モデル・オブジェクト
コンテンツを管理するために必要な項目タイプ、属性、属性グループ、参照属性、以上それぞれのメタデータをデータ・モデル・オブジェクトと呼びます。データ・モデル・オブジェクトは、ストレージ・スキーマと呼ばれるXSDファイルとして保管されます。
ストレージ・スキーマはcmdatamodel.xsd(IBMCMROOT/config以下にあります)で定義されるエレメント定義やタイプ定義を参照します。
リスト2では、XMLサービスAPIを通じてエクスポートしたNOINDEX項目タイプのXSDファイルの例を示します(都合上、一部となっております)。
リスト2. エクスポートされたデータ・モデル・オブジェクトの例
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="1.0"
xmlns:cm="http://www.ibm.com/xmlns/db2/cm/api/1.0/schema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsd:import
namespace="http://www.ibm.com/xmlns/db2/cm/api/1.0/schema"
schemaLocation="cmdatamodel.xsd"/>
(中略)
<xsd:attribute name="USER_ID">
<xsd:annotation>
<xsd:appinfo>
<cm:description value="User ID" xsi:lang="ENU"/>
<cm:description value="*User ID" xsi:lang="JPN"/>
<cm:stringType value="ALPHANUMERIC_EXT"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
(中略)
<xsd:element name="NOINDEX">
<xsd:annotation>
<xsd:appinfo>
<cm:description value="NOINDEX" xsi:lang="ENU"/>
<cm:description value="*NOINDEX" xsi:lang="JPN"/>
<cm:ACL name="PublicReadACL"/>
<cm:versionPolicy value="NEVER"/>
<cm:maximumVersions value="0"/>
<cm:entityType value="DOCUMENT"/>
<cm:itemRetention unit="YEAR" value="0"/>
<cm:itemACLBinding flag="0"/>
<cm:autoLinkEnable value="true"/>
<cm:autoLinkingSMSRule value="0"/>
<cm:itemEventFlag value="0"/>
<cm:accessModule name="DUMMY " status="0" version="0"/>
<cm:previousAccessModule value="DUMMY "/>
<cm:resourceItemInfo>
<cm:textSearchable value="false"/>
</cm:resourceItemInfo>
</xsd:appinfo>
</xsd:annotation>
(後略)
|

 |
XMLサービスAPIを用いたシステム管理データのエクスポート
Content Manager V8.3では、システム管理データを扱うXMLインスタンス・サービス・クラスDKXMLSysAdminServiceが提供されるようになり、管理オブジェクトのリスト、エクスポート、インポートを行うための3つのメソッドlist(),extract(),ingest()が新規に追加されました。以下にサンプル・コードを用いて、処理の流れを説明します。アプリケーションの実行環境については「参考文献」の「アプリケーション・プログラミング・ガイド」を参照してください。
extract()メソッドは、DOMオブジェクト形式で出力します。DKXMLDOMObjectDefsクラスは、このDOMオブジェクトを出力ストリームに変換するメソッドconvertToStream()を備えており、これによりXML形式のファイルやXSD形式のストレージ・スキーマ・ファイルに出力することができます。
サンプル・コードを用いてエクスポートの手順を説明します。完全なサンプル・コードTXMLExport.javaは、この記事の「ダウンロード」セクションを参照してください。
- DKXMLSysAdminServiceインスタンスを作成します。
sysAdminUtil = new DKXMLSysAdminService(ds,rmName);
//dsはデータストア、rmNameはリソース・マネージャー名
|
- extract()メソッドを用いて定義をエクスポートします。
DKXMLDOMObjectDefs xmlObj = (DKXMLDOMObjectDefs)
sysAdminUtil.extract(exportList, options);
|
- データ・モデル・オブジェクトはDKXMLDOMObjectDefsクラスのgetDataModelDefs()メソッドを用いて取得します。管理オブジェクトはDKXMLDOMObjectDefsクラスのgetSysAdminDefs()メソッドを用いて取得します。
domObject = xmlObj.getDataModelDefs(); //データ・モデル・オブジェクトを取得
|
domObject = xmlObj.getSysAdminDefs(); //管理オブジェクトを取得
|
- ストリームに変換してファイルに書き出します。このときデータ・モデル・オブジェクトはXSDファイルに、管理オブジェクトはXMLファイルにそれぞれ書き出されます。
DKXMLDOMObjectDefs.convertToStream(domObject, fileOut);
|
XMLサービスAPIを用いたシステム管理データのインポート
ingest()メソッドは、入力ストリーム形式またはDOMオブジェクト形式を入力として受け取ることができます。
サンプル・コードを用いてインポートの手順を説明します。完全なサンプル・コードTXMLImport.javaはこの記事の「ダウンロード」セクションを参照してください。
- XMLサービス・オブジェクト・インスタンスを作成
adminService = new DKXMLSysAdminService(ds, rmName); |
- DKXMLStreamObjectもしくはDKXMLDOMObjectDefsインスタンスを作成
objDefs = new DKXMLDOMObjectDefs(); //入力ストリーム・オブジェクト
|
objDefs = new DKXMLStreamObjectDefs(); //DOMオブジェクト・オブジェクト
|
- 管理オブジェクトの場合、DKXMLDOMObjectDefsクラスのsetSysAdminDefs()メソッドを用いてパースしたXMLの内容をセットします。データ・モデル・オブジェクトの場合、setDataModelDefs()メソッドを用いてパースしたXMLの内容をセットします。
((DKXMLDOMObjectDefs)objDefs).setSysAdminDefs(fileDoc);
//パースしたXMLの内容fileDocを管理オブジェクトにセット
|
((DKXMLDOMObjectDefs)objDefs).setDataModelDefs(fileDoc);
//パースしたXMLの内容fileDocをデータ・モデル・オブジェクトにセット
|
- ingest()メソッドを用いてインポートします。
adminService.ingest(objDefs, options);
|
最後に
XMLサービスAPIによるContent Managerの管理オブジェクトおよびデータ・モデル・オブジェクトのエクスポート、インポートについて解説を行いました。XMLサービスAPIは、さらにInformation Integrator for Contentのシステム管理定義、データ・モデル定義のエクスポート、インポートも可能にします。
DKItemTypeDefICM、DKAttrDefICMクラスを用いてメタデータや項目タイプの定義を行うこれまでの手法に比べて格段に有効な手段ですので、ぜひご活用ください。
さらに詳しい情報を得るには、参考文献「アプリケーション・プログラミング・ガイド」の「第11章 XMLサービスの使用」を参照してください。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| XMLSvcAPISapmle.zip | XMLSvcAPISapmle.zip | 7KB | HTTP |
|---|
参考文献
著者について  | |  | 坂巻 義彦は大和ソフトウェア開発研究所のソフトウェア・エンジニアで、Content ManagerのLab. Based Service (LBS)に従事しています。 |
記事の評価
|