IBM Workplace Forms V2.7 の新機能である ピュア Java ストリーミング API について説明します。ピュア Java ストリーミング API を、C 言語で記述された従来の API と比較します。サンプル・コードを示しながら、ピュア Java ストリーミング API の使用法を説明します。
IBM Workplace Forms V2.7 において、Workplace Forms ファミリーにストリーミング API が追加されました。この新しいストリーミング API は 100% ピュア Java ベースの API であるため、従来の C 言語 API とは異なります。
この記事では、このストリーミング API の機能を説明し、従来の API と比較します。ストリーミング API のインターフェースは従来の API のインターフェースと同じですが、実行できる操作が限られています。IBM Workplace Forms のストリーミング API にはさまざまな新機能が組み込まれています。
この記事では、ストリーミング API の使用例を解説します。この記事の最後のセクションには、ストリーミング API の使用法を示すサンプル・コードを収録しています。
ストリーミング API の新機能について
IBM Workplace Forms Server API は、階層型の DOM データ構造体セットに基づき、完全に機能する IBM Workplace Forms Viewer の機能要件に対応するよう設計されています。この API は不必要なサービスも提供するため、サーバー・アプリケーションの側から見ると、メモリーを大量に消費し、リアルタイム操作を多数実行するという特徴があります。また、従来の API では一部の Java アプリケーションで安定性の問題が発生する可能性があります。従来の API は C 言語で記述されており、Java C ブリッジを使用して呼び出されるため、Java 仮想マシン (JVM) の保護範囲外で稼働します。したがって、API で障害が発生すると、これが原因で JVM がクラッシュする可能性があります。さらには、この API の障害が原因となってアプリケーション・サーバーがクラッシュする可能性もあります。
Workplace Forms Server API で生じるこれらの問題に対処するため、最新バージョンの IBM Workplace Forms には、ストリーミング API と呼ばれる新たなピュア Java API が組み込まれました。ストリーミング API は、XFDL 解析を実行する Java パーサーとして SAX (Simple API for XML) を採用した 100% Java ベースの API です。
このJava 実装はサーバー環境で安全に稼働し、JVM により障害が円滑に処理され、個々のアプリケーションが相互に切り離されます。Java ベース API で障害が発生しても、アプリケーション・サーバーがクラッシュすることはありません。ストリーミング API は、完全機能ビューアーではなくサーバー・アプリケーションの要件に対応するよう調整されています。Workplace Forms Server API に比べ、ストリーミング API は実行時に使用するメモリー・フットプリントが小さく、Workplace Forms 処理のリアルタイム性が低くなります。
ストリーミング API のオブジェクト・ツリー構造は、従来の API と同一です。FormNodeP ノードによる XFDL フォームの内部表現を図 1 に示します。ストリーミング API では、XFDL ファイルを解析する際にこの構造が内部で使用されることはありませんが、ストリーミング API でノードを作成または取得する際にこの構造の概念が適用されます。
従来の API に比べ、ストリーミング API のインストールは非常に単純です。Java クラスパスに追加する必要のある JAR ファイルは 1 つだけです。ストリーミング API では、従来の API の構成ファイル (PugeEdgeAPI.ini や Prefs.config など) は無視されます。ただし、ログの印刷用に PureEdge.pel がサポートされています。
クラスパスではストリーミング API と従来の API が共存できます。この共存により、2 つの API を置き換える操作が容易になります。ストリーミング API を使用するには、クラスパスでストリーミング API JAR ファイルが pe_api.jar より前に位置していることを確認してください。クラスパスで最初に pe_api.jar が検出されると、ストリーミング API ではなく従来の API がロードされます。
ストリーミング API では、従来の API のメソッドの一部がサポートされています。ストリーミング API は一部の呼び出しをネイティブ API として使用するため、完全な後方互換性と前方互換性を備えています。ストリーミング API を使用する場合に従来の API のアプリケーションを簡単に移動できます。また、従来の API を使用する場合にストリーミング API を移動する操作も簡単です。
ストリーミング API と従来の API の両方でサポートされているメソッドのリストを表 1 に示します。
addHint(String theReference, int theReferenceType) ;
addHints(java.util.List theReferences, int theReferencesType);
ストリーミング API に対し、参照するヒントまたはパターンのセットを指示できます。これにより、API は初回パスの後にこれらのヒントとパターンをキャッシュに入れます。
clearHints();
この関数は、すべてのヒントを消去します。
ストリーミング API は、Java アプリケーションで高いパフォーマンスを実現することを目的としています。SAX パーサーの制限により、ツリー・モデル内のナビゲートなどの一部の機能がサポートされていません。ストリーミング API の機能制限から、以下に示す状況においては、従来の API ではなくストリーミング API の使用を検討してください。
アプリケーションのパフォーマンスの基準が高い。同時接続ユーザー数が多く、応答時間が重要である。フォームのサイズが非常に大きい場合に従来の DOM ベースの API を使用すると、メモリーを大量に消費する。
アプリケーションが複数のプラットフォームにデプロイされている。従来の API は各種プラットフォームに対応していますが、構成が複雑であり、対応 OS が限られています。ストリーミング API は 1 つのファイルに記述されており、任意の Java 環境に配布できるので、Web アプリケーションには最適です。
計算エンジンと XForms エンジンはストリーミング API では機能しないため、アプリケーションでこれらのエンジンを実行する場合に使用できるのは従来の API のみです。
IBM Workplace Forms のストリーミング API は、新しい Java ベースの API です。この API は、従来の API と大幅に異なります。サポートされている従来の API のインターフェースは限られていますが、Java アプリケーションでのツリー・ナビゲーション以外の操作では優れたパフォーマンスを実現します。
Gu Yi は、IBM の China Development Lab の IBM Software Services for Lotus (ISSL) Emerging Services Team に所属する上級ソフトウェア・エンジニアです。Gu Yi は 2005 年から IBM Software Services のプロジェクトに携わっており、IBM Workplace Forms に関連するさまざまなプロジェクトへの参加経験があります。また、2 年の IBM WebSphere Portal 開発経験と、業界内で 4 年の J2EE 開発経験もあります。