XPagesでLotus Notes/Dominoアプリ開発入門(1)
サーバサイドJavaScriptやJavaでWebアプリが作れる
XPagesとは
日本アイ・ビー・エム株式会社 ソフトウェア開発研究所
Lotusテクノロジー開発 ソフトウェアエンジニア 佐藤 淳
2012/5/11
クライアント/サーバサイドJavaScriptをサポート
アプリを作るときには、ユーザーの操作に応じて処理をするなどのさまざまなロジックの実装が必要になります。
XPagesでは、そのロジックの実装にスクリプト言語として広く普及しているJavaScriptを使用できます。JavaScriptで実装されたロジックはLotus NotesやWebブラウザといったクライアントか、Lotus Domino(サーバ)で実行されます。
■ クライアントサイドJavaScript
クライアントで実行されるクライアントサイドJavaScriptは、JavaScriptのコードがそのままWebブラウザに送られ、Webブラウザが搭載しているJavaScriptのインタプリタで実行されます。クライアントサイドJavaScriptでは、Webブラウザがサポートしているすべてのクラスやメソッドを使えます。
■ サーバサイドJavaScript
サーバで実行されるサーバサイドJavaScriptは、Lotus Dominoに搭載されているインタプリタで実行されます。このインタプリタはECMA 262に準拠していますので、一般的なJavaScriptのクラスやメソッドを使用できます。
● Lotus Notes/Dominoアプリにアクセス
また、Lotus Notes/Dominoアプリにアクセスするためのメソッドやクラスも用意されています。サーバサイドJavaScriptを用いることでLotus Notes/Dominoアプリに格納されているデータを取得したり、逆にデータを格納したりすることができます。
例えば、リストボックスコントロールを使うときの例を考えましょう。リストボックスに表示する選択肢は、あらかじめ複数の固定値を設定することもできますし、Lotus Notes/Dominoアプリに格納されているデータを使用することもできます。サーバサイドJavaScriptを用いることで、Lotus Notes/Dominoアプリから必要なデータを動的に取得して、リストボックスの選択肢にすることができます。
● グローバル変数・スコープ変数
またサーバサイドJavaScriptには、いくつかのグローバル変数が用意されています。それによって、XPages内でWebブラウザの言語情報やWebブラウザの種類を示すエージェント情報などのさまざまな環境変数を取得できます。データソースが定義されていれば、そのデータソースにアクセスするためのグローバル変数も用意されています。
その他には、スコープ変数も用意しており、アプリ単位、セッション単位、ビュー単位、リクエスト単位で変数を使用できます。ページが切り替わった際に前のページで入力した値を遷移先のページでも使用したい場合などに使用できます。
● Javaクラスへのアクセス
もう1つ、サーバサイドJavaScriptで紹介したい機能が、Javaクラスへのアクセスです。Lotus Notes/Dominoアプリの設計要素の1つとして、Javaクラスを組み込めます。組み込まれたJavaクラスや、製品がもともと持っているJavaクラスにJavaScriptから直接アクセスできます。
例えば、外部アプリとの連携モジュールがJavaで作られていた場合、XPagesのサーバサイドJavaScriptを利用して、その外部アプリとXPagesとを連携できます。
■ ロジックはクライアント/サーバを柔軟に実装できる
JavaScriptによるロジックの実装によって、XPages全体や配置したコントロールのイベントに紐付けられます。
例えば、ページが読み込まれる前にロジックを実行する、配置したボタンコントロールのボタンが押された際にロジックを実行するなどが可能です。また、入力された値の妥当性チェックにも、ロジックを実装して必要とするチェック機能を実現できます。このようなロジックをクライアントサイドJavaScriptとサーバサイドJavaScriptのいずれか、または両方を組み合わせて柔軟に実装できます。
XPagesのアーキテクチャ
XPagesは、コントロールを組み合わせて画面を構成し、JavaScriptでロジックを実装することで作られます。作られたXPagesのソースはXMLで構成されますが、それがどのような仕組みでHTMLに変換されてWebブラウザやLotus Notes上で実行可能になるのか、またどのような仕組みでサーバサイドJavaScriptが実行されるのかを紹介しましょう。
■ 基盤技術はJava Server Faces(JSF)
XPagesはJava Server Faces(JSF)を基盤技術として採用しています。JSFはJava EEアプリ・フレームワークの1つで、WebアプリのUIを構築するフレームワークです。詳細は、以下の記事を参照してください。
[特別企画]JavaServer
Facesを理解する JSFはWeb開発を飛躍的に向上させるフレームワークだ。Javaの標準仕様となる予定のJSFを2回にわたり詳細に解説する |
XPagesでは、JSFとの互換性を保ちながら、以下のような簡略化を目的としたカスタマイズを行っています。
- JSP/サーブレットコンテナとの依存性の除去
- Javaの隠ぺい
- スクリプト言語のサポート(サーバサイドJavaScript)
- データソースのサポート機能の追加
- デプロイ作業無しで実行可能にする仕組み
Lotus Notes/Dominoアプリの設計要素としてXPagesが作成されると、内部的にはJavaのクラスファイルに自動変換されてアプリ内に格納されます。そのXPagesにWebブラウザからアクセス要求があると、XPagesの実行環境がアプリ内に格納されているJavaのクラスファイルを読み取ります。そして、インスタンス化し、Javaクラスが処理を実行して、Webブラウザへレスポンスを返します。
内部で行われる処理はJSFと同様のライフサイクルを持っており、それぞれのフェイズにおいてXPagesで実装されたロジックが実行されます。
その際に、Lotus Notes/DominoアプリのオブジェクトにアクセスするようなサーバサイドJavaScriptの実装があると、内部的にNotes Java APIを呼び出し、Lotus Notes/Dominoアプリのオブジェクトにアクセスします。
■ XPagesの実行環境は Dominoサーバ上のOSGiコンテナ
上記のような動作を実現するXPagesの実行環境はLotus Dominoに搭載されているOSGiコンテナ上に展開されています。そして、そのOSGiコンテナはLotus Dominoが保持するHTTPサービスと連携するように配置されています。
OSGiはEclipseなどでも採用されている、モジュール化されたJavaクラスをダイナミックにロードし実行させるための標準化された仕様です。XPagesから変換されたJavaクラスは、このOSGiの手法に従って実装されており(OSGiバンドル)、Lotus Notesが保持しているOSGiコンテナにも展開されています。詳細は、以下の記事を参照してください。
EclipseやSpringで使われている基盤技術OSGiとは Java本来の実力を引出すOSGi徹底解説 EclipseやSpring、JBoss、GlassFishなどに使われているオープンソースの基盤技術について概要や特徴、ツールなどを解説 「Java
Solution」フォーラム 2009/5/12 |
Lotus Notes上でXPagesアプリを使用する際にはサーバではなくLotus Notes上のXPagesの実行環境で動作します。このとき、先に説明したXPagesのJavaクラスの変換やインスタンスのロードはLotus Notesで行われます。従って、レプリカ機能を利用してアプリをローカルPCに複製することで、XPagesアプリをオフラインでも利用できます。
図5 XPagesのアーキテクチャ図 |
XPagesの開発環境はEclipseベース
最後に、XPagesを含めたLotus Notes/Dominoアプリの開発環境であるLotus Domino Designerを紹介します。XPagesが登場する前のLotus Domino DesignerはWindowsネイティブアプリとして実装されており、拡張性はありませんでした。しかし、XPagesが登場したLotus Notes/Domino 8.5からはLotus Domino Designerも大きな進化を遂げています。
一番の大きな変更点は、基盤技術に統合開発環境として広く普及しているEclipseを採用したことです。それによって、Eclipseが提供しているコードアシスト機能付きのエディタなど、開発生産性を向上するさまざま機能がLotus Domino Designerでも使用できるようになりました。
その一方で、従来のLotus Domino Designerの機能はEclipseプラグイン化されてEclipseに統合され、新しい開発環境でも従来の操作感とほぼ同様に使えるようになっています。
Eclipseの最大の特徴は高い拡張性です。Lotus Domino DesignerにEclipseを採用したことで、Eclipseの高い拡張性を利用した新機能も搭載されています。その新機能での目玉がXPages用のデザイナツール機能です。Eclipseにおけるアプリ開発と同じ感覚で操作ができるため、従来のLotus Domino Designerを使用したことがない開発者の方でも、直感的に使えるようになっています。
図6 Lotus Domino Designer |
Eclipseのプラグイン技術を利用して、Lotus Domino Designerを拡張するための拡張ポイントも公開されています。Lotus Domino Designerに不足している機能があっても、プラグインを作成して新たに機能が追加できます。
次回以降は、XPagesアプリの作り方
今回は、連載初回ということでXPagesの概要を簡単に紹介しました。次回以降は、XPagesアプリの作り方を紹介しますので、お楽しみに。
■ @IT関連記事
ラムダ式、JAR脱獄、JavaScript/Node.jsへの接近 JavaOne Tokyo 2012まとめレポート(後編) JDK 8の新機能のうち、Lambda、Jigsaw、Nashornについて解説した講演を詳細にレポートする。そしてJava SE 9はどうなる? 「Java
Solution」フォーラム 2012/4/19 |
JavaとJavaScriptの親しい関係 小山博史のJavaを楽しむ(1) 教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた 筆者が、独自の視点からJavaの面白さを掘り下げていく 「Java Solution」フォーラム 2006/8/18 |
1-2 |
Index | ||||||
|
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|