SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Cyber Luxeonで学ぶXMLDB入門

XMLDBとJavaAPI、JAXB2.0を活用したWebアプリケーション開発(APIチュートリアル編)

Cyber Luxeonで学ぶXMLDB入門 第5回

Cyber Luxeon Java API

 Cyber Luxeonで使用するJava APIは大きく3つに分類されます。「DB接続系API」「物理構造アクセス系API」「XMLデータ操作系API」の3つです。物理構造アクセス系APIは、Cyber Luxeonの物理構成上に存在するパーティション・XMLストア・ディレクトリ・XMLドキュメントなどのことです。物理構造についての詳細は、「XMLDBとCyber Luxeonの基本」を参照してください。

 以下では、サンプルアプリケーションで主に使用するクラス・インターフェイスについて説明します。

DB接続系API

 DB接続系APIは、Cyber Luxeonへの接続機能を提供するAPI群です。以下の表に主なクラス、インターフェイスをまとめます。

DB接続系API
パッケージクラス・インターフェイス名説明
com.exln.dxe.clientXlnClientSessionFactoryCyberLuxeon接続時に認証を使用しないクライアントセッションを生成するファクトリクラス。
XlnSecureClientSessionFactoryCyberLuxeon接続時に認証を使用するクライアントセッションを生成するファクトリクラス。
com.exln.dxeSessionCyber Luxeonへの接続を表す。JDBCのjava.sql.Connectionインターフェイスに該当する。

 クライアントセッションは以下のソースのようにXlnClientSessionFactorygetSessionメソッドを使用して取得し、releaseメソッドで解放します。

クライアントセッションの取得・解放
// セッションの取得
Session clientSession = XlnClientSessionFactory.getSession();
// 何らかの処理~省略
// セッションの解放
clientSession.release();

物理構造アクセス系API

 物理構造アクセス系APIは、「XMLDBとCyber Luxeonの基本」で説明した、Cyber Luxeonの物理構成にアクセスすることを目的としたAPIです。主なクラス、インターフェイスを以下の表にまとめます。

物理構造アクセス系API
パッケージクラス名説明
com.exln.dxePartitionパーティションにアクセスし、操作するためのインターフェイス。
XMLStoreXMLStoreにアクセスし、操作するためのインターフェイス。
com.exln.dxe.filesystemDirectoryディレクトリにアクセスし、操作するためのインターフェイス。
XMLDocumentXML文書にアクセスし、操作するためのインターフェイス。
BinderXMLバインダドキュメントにアクセスし、操作するためのインターフェイス。XMLDocumentインターフェイスを継承している。

 以下に物理構造アクセス系APIのサンプルを示します。

物理構造アクセス系APIのサンプル
// セッションの取得
Session clientSession = XlnClientSessionFactory.getSession();
// パーティションの取得
Partition partition = clientSession.getPartition( "ec_item" );
// XMLストアの取得
XMLStore xmlStore = clientSession.getXMLStore( XML_STORE_NAME );
// ルートディレクトリの取得
Directory dir = xmlStore.getRootDirectory();
// XMLドキュメントの取得
XMLDocument xml = (XMLDocument)xmlStore.getFile( "items/001.xml" );

 getXXXXメソッドで、下位にあるエンティティ(XMLストアの場合、ディレクトリ、XMLファイル)を取得することができます。また、既存のエンティティにgetXXXXメソッドでアクセスするだけでなくcreateXXXXメソッドで新規に作成することもできます。詳細は参考資料の「Cyber Luxeonハンドブック」を参照してください。

XMLDocumentインターフェイスの継承構造
 XMLDocumentインターフェイスは、Luxeon APIの中でも重要なインターフェイスに位置づけられます。XMLDocumentインターフェイスはCyber Luxeon上のXMLドキュメントへのアクセス機能を提供するために用意されていますが、そのアクセス方法としては、Documentノード、ストリーム(InputStream、OutputStream)形式、ファイルアクセス(delete、copy、move)を用意しています。XMLDocumentインターフェイスは、これらの機能を提供するために4つのインターフェイスを継承しています。継承している各インターフェイスとの関係を以下のクラス図に示します。
XMLDocumentインターフェイスの継承関係
XMLDocumentインターフェイスの継承関係

XMLデータ操作系API

 XMLデータ操作系APIは、XML上のデータを操作する際に使用するAPIです。主なクラス、インターフェイスを以下の表にまとめました。

XMLデータ操作系API
パッケージクラス名説明
com.exln.dxeXQueryXQuery実行文を表現したインターフェイス。
XQueryItemXQueryの実行結果として抽出される「アイテム」を表現したインターフェイス。「アイテム」とは、XML文書のノード、あるいはアトミック値のこと。
XQuerySequenceインターフェイスXQueryの実行結果として抽出される「シーケンス」を表現したインターフェイス。シーケンスは、さまざまな異なる「アイテム」の集合を順番に並べたもの。
UpdateXUGを表現したインターフェイス。
XPathXPathの実行文を表現したインターフェイス。
XPathValueXPathの実行結果値を表現したインターフェイス。
XQueryの実行

 XQueryの実行には、com.exln.dxe.XQueryインターフェイスを使用します。以下にXQuery実行のサンプルソースを示します。

XQueryの実行
String xquery
    = "for $item in /MultiDoc_Container/item"
    + "    where $item/@item_code='0000001'"
    + "    return $item";
// XQueryの取得
XQuery xQuery = xmlDbSession.createXQuery( xquery );

// 検索対象のXMLファイルを取得
XMLDocument xmlDoc = (XMLDocument)xmlStore
                         .getFile( "items/item_container.bnd" );
// XQuery実行
xQuery.execute(xmlDoc);
// 実行結果の取得
XQuerySequence results = xQuery.getResults();
// 検索結果の項目にアクセス
XQuerySequenceIterator iter = results.getIterator();
List<Object> list = new ArrayList<Object>();
while( iter.hasNext() ){
    XQueryItem item = iter.nextItem();
    Node node = (Node)item.getValue();
    list.add( node );
}
XPathの実行

 XPathの実行には、com.exln.dxe.XPathインターフェイスを使用します。以下にXPath実行のサンプルソースを示します。

XPathの実行
Session clientSession = XlnClientSessionFactory.getSession();

XMLStore xmlStore = clientSession.getXMLStore( XML_STORE_NAME );
// 検索対象のXMLファイルを取得
XMLDocument xml = (XMLDocument)xmlStore
                  .getFile( "items/item_container.bnd" );
// XPathの取得
XPath xPath = clientSession.createXPath(
    "/MultiDoc_Container/item[@item_code='001']" );
// XPathの実行
xPath.execute( (DOMDocumentProvider)xml );
// 検索結果にアクセス
XPathValue xPathValue = xPath.getResult();
XlnInputStream inputStream = xPathValue.export( true );
String resultStr = inputStream.getStringContents( "Shift_JIS" );
System.out.println( resultStr );
XUGの実行

 XUGの実行には、com.exln.dxe.Updateインターフェイスを使用します。以下にXUG実行のサンプルソースを示します。

XUG(xmlupdategramの実行
// セッションの取得
Session clientSession = XlnClientSessionFactory.getSession();
// XMLストアの取得
XMLStore xmlStore = clientSession.getXMLStore( "ec_item_xmlstore" );
//Update(XUG)オブジェクトの取得
Update xug = xmlDbSession.createUpdate( xugStr );
// XUGの実行
xug.execute( "items/001.xml" , xmlStore );

まとめ

 本稿では、JAXB 2.0のAPI・アノテーション、Cyber Luxeon Java APIについて説明しました。Cyber Luxeon APIには本稿で説明した以外にも多くのAPIが用意されています。Cyber Luxeon Java APIの全体像を把握しておくことで、XMLDBアプリケーションの開発にあたって適切なAPIを使用することができるようになり、開発スピードの向上・開発の効率化をはかることができます。

 興味のある方は、参考資料の「Cyber Luxeon ハンドブック」を参照してみてください。次回は、本稿で説明したAPIを主に使用して、XMLDBのCRUD(作成・抽出・更新・削除)処理を中心としたサンプルアプリケーション実装し、説明します。

参考資料

  1. Cyber Luxeonハンドブック』 サイバーテック社
  2. JDK 6 ドキュメント

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Cyber Luxeonで学ぶXMLDB入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1401 2007/06/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー