|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
カスタムJavaコードによるIBM Workplace Designerの機能拡張
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Willie Arbuckle, Senior Software Engineer, IBM レベル:中級 原文の掲載:2006年02月27日 更新日:2006年07月28日更新
編集者のメモ:この記事では、特に断りがない限り、Workplaceサーバーと表記した場合は、通常Workplace Collaboration ServicesおよびWorkplace Services Expressの両方を意味します。また、Workplaceアプリケーションという用語も同様に、Workplace Collaboration ServicesまたはWorkplace Services Expressのいずれかで実行されるアプリケーションを表します。 IBM Workplace Designerは、スクリプト機能を内蔵し、優れた機能を持つ、標準ベースのビジュアルな開発ツールです。アプリケーション開発者、設計者、ユーザーは、IBM Workplace Designerを使用することにより、IBM Workplace Collaboration ServicesまたはIBM Workplace Services Express用のコンポーネントを容易に作成し、デプロイすることができます。 Workplace Designerは、フォームをベースとした強力で使いやすい開発手法をWorkplace Collaboration ServicesおよびWorkplace Services Expressにもたらします。これは、Domino開発者が長年にわたってLotus Domino Designerで慣れ親しんできた手法です。Domino ISVは長い間Lotus Domino Designerを使用して、容易な方法でコンポーネントを作成し、Domino Serverにデプロイしてきました。Workplace Designerのリリースにより、これらの開発者はWorkplace Collaboration ServicesおよびWorkplace Services Expressアプリケーション内で、特定の業種やビジネス・ニーズに適合するコンポーネントを容易に作成およびデプロイできるようになりました。 Workplace Designerは、内蔵するJavaScript™エンジンを介して、強力なサーバー・サイド・スクリプト機能を提供します。JavaScriptコードは、各コントロール、フォーム、またはコンポーネントのイベントと関連付けることができます。また、Workplace Designerは、DocAPIおよびディレクトリー・サービスや@関数のセットなど、JavaScriptのユーティリティー・クラスによる組み込みネイティブ・ライブラリーへのアクセスも提供します。さらに、JavaScriptコードからWorkplace Collaboration Services APIへ直接アクセスすることも可能で、これによって、開発者はWorkplace Collaboration Servicesサーバーと統合されたアプリケーションを構築できます。 この記事は、Domino開発、JavaScript、または他のビジュアルなスクリプト言語とJavaの背景知識を持つWorkplace Designerコンポーネント開発者、アプリケーション開発者、およびISVを対象として書かれています。この記事では、Workplace Designerの容易なプログラミング機能を、Lotus DominoのJava APIを含む外部(非Workplace)Javaコードにまで拡張する方法を解説します。既存のJavaコードは、Workplace Designerで構築したアプリケーションに容易に組み込むことができます。この方法を示すいくつかのサンプルと、Workplace環境での開発、テスト、デプロイに関するガイドラインが用意されています。すべてのサンプルは、developerWorks Workplaceのダウンロード・サイト (US)からダウンロードして利用できます。 この記事は、Webアプリケーション開発の経験、特にJavaScriptに関する経験があることを前提として書かれています。Workplace Collaboration ServicesまたはWorkplace Services Expressサーバーに関する経験も、記事を読む上で役に立ちます。 熟練した開発者およびISVプログラマーは、以前からDominoのさまざまなツールキットを使用して、開発したコードをLotus Notes/Dominoと統合してきました。また、Javaテクノロジーに多額の投資を行って構築した製品を、Workplace Collaboration ServicesおよびWorkplace Services Expressアプリケーションと統合したいと考えている企業もあります。Workplace Software Development Kit(以前のWorkplace Collaboration Services API Toolkit)を用いることにより、ISVはWorkplace Collaboration Servicesサーバーで使用するコラボラティブなアプリケーションを構築できます。 Workplace Designerの拡張性、およびWorkplace Designerコンポーネントから外部JARファイル内の非IBM JavaクラスAPIを呼び出せる機能についてはあまり知られていませんが、これは可能です。この方法を用いて、Workplace Designerで構築した新しいWorkplaceアプリケーション内で、すでに開発済みのJava機能を再利用できます。この記事では、Workplace Designerで利用できるいくつかのプログラミング機能を紹介し、既存のJavaクラスへの投資を保持しつつ、これらを活用する方法について解説します。 Workplace Designerのプログラミング機能とその特長開発ツールは、そのイベント・ハンドリング能力で評価されます。Workplace Designerでは、実行時にWorkplaceサーバーで各設計要素が使用されたときに発生するイベントに、JavaScriptコードを関連付けることができます。Workplace Designerは、次のレベルのイベントをサポートします。
イベントとJavaScript HTMLプログラマーは、多くのWorkplace Designerコントロールと共に使用できるイベントにすでに習熟しています。これらのほとんどは、コントロール・タイプと共に使用するために、HTML仕様で記述されたイベントです。また、Workplace Designerは、フォーム設計要素で使用できるイベントのセットも提供します。これらの各イベント・タイプごとに、組み込みのSimpleActionとして(この場合は、パラメーターを受け取れます)またはJavaScriptとして記述したコードを関連付けることができます。JavaScript標準に高レベルで準拠するWorkplace DesignerのJavaScriptエンジンにより、Javaコードを使用できるだけでなく、サーバー上で実行されているJava Virtual Machine(JVM)で利用可能なJava標準ライブラリーを呼び出すことができます。 前述のように、Workplace Designerには、強力なアプリケーション開発を可能にする総合的なJavaScriptエンジンが組み込まれています。JavaScriptコードは、サーバーまたはクライアントのいずれかで実行されるように指定できます。JavaScriptエンジンには、構文の色付けやコンテンツ・アシストをサポートするJavaScriptエディター(図1 参照)が含まれています。 エディターUIの[アウトライン]パネルと[参照]パネルでは、ネイティブ・オブジェクトを使用して、ユーティリティー・コードのライブラリーにアクセスできます。また、再利用可能なスクリプト・コードを集めた独自のライブラリーを作成することもできます。JavaScriptエンジンは、JVM内のJava APIを含む任意のJavaコードを直接呼び出すことを可能にするJavaブリッジを持っています。 Workplace Designerに含まれるJavaScriptラッパー・オブジェクトを使用すると、Workplaceのビジネス・コンポーネントとのより進んだ統合が可能になります。これらのオブジェクトによってWorkplace Collaboration Services API Javaクラス全体への「入口」が提供され、APIと直接対話するコンポーネントをWorkplace DesignerのJavaScriptエディター・パネルで構築できるようになります。つまり、Workplace Designerコンポーネントを使用して、電子メールやカレンダー・エントリーを作成したり、Workplace Collaboration Servicesのさまざまなビジネス・コンポーネントと対話することが可能になります。 JavaScriptエディターでは、通常のJavaScriptコードを入力するだけでなく、特殊なグローバル・オブジェクトJavaScriptクラスを利用できます(Workplace Designerによって利用可能になります)。 これらのクラス(図1の[参照]パネル参照)はJavaで実装され、組み込みのJavaブリッジを介してアクセスできます。図1に示されているコードは、Workplace Designer URLの機能を実装するWorkplace DesignerのdocumentクラスとXSPUrlクラスを使用しています。 図1. JavaScriptエディター ![]() このJavaブリッジを使用すると、実装についてまったく知らなくてもこれらのクラスを使用できます。このJavaブリッジによって、既存の「外部」APIを呼び出すことができます。「外部」とは、非Workplaceおよび非JVMを指します。 図1に示されているコードは、Workplace Designer URLの機能を実装するWorkplace DesignerのdocumentクラスとXSPUrlクラスを使用しています。このコードは、新規文書を作成し、それをブラウザーで開く方法を示しています。 JavaScript内へのJavaコードの埋め込み 外部のクラス・ファイルに含まれる機能を使用したい場合もあります。Workplace DesignerのJavaScriptエンジンにより、標準クラス内またはプライベート・クラス内のJavaコードをシームレスに呼び出すことができます。たとえば、java.utilパッケージのDateクラスを使用するコードは次のとおりです。
ランタイムJVMがこれらのJavaクラスを提供するので、このコードは実行されます。 使用したいクラスが標準JVMセットにないときはどうすればよいでしょうか。クラス(JARファイルにパッケージすることが望ましい)をWorkplaceサーバーに配置し、クラスを認識するようサーバーを設定することで、これらの外部クラスを利用できます。簡単な例で説明しましょう。 Javaで書かれたカスタムConverterクラスがあるものとします。Workplace Designerで構築しているコンポーネントでこのクラスを使用したいのですが、Converterコード内のすべてのルーチンをJavaScriptに組み込みたくはありません。このConverterクラスは、異なる測定単位を変換する多数のメソッドを公開します。このようなメソッドの中から、摂氏と華氏を変換する2つのメソッドを次のコード・サンプルに示します。
Workplace Designerコンポーネントでこのクラスのメソッドを使用するには、選択した設計要素の目的のイベントでJavaScriptコードを記述します。説明の都合上、このコードはボタンのonClickイベントに記述し、結果は単純にサーバーのログ・ファイルに出力します。ダウンロード用サンプルでは、出力は図2に示すように画面上に表示されます。 図2. Converterのサンプル ![]() 温度の変換(摂氏/華氏)を行う簡単なJavaクラスを呼び出す例を以下に示します。
これを実行すると、Workplace SystemOut.logファイルに次のような出力が得られます。
[01/21/06 12:38:03:447 EDT] 4e718de7 SystemOut O 50 degrees F is 10 degrees C.
このコードは、この記事でダウンロードできる簡単なWorkplace Designerコンポーネントに組み込まれています。 コンポーネントをWorkplaceサーバーにデプロイしてページに挿入すると、図2のようになります。Workplace Designerで開くと、Workplaceサーバーにデプロイされるフォーム要素がプロジェクトに表示されます(図3参照)。 図3. Workplace DesignerでのformConverter ![]() コンポーネントは温度を表す入力値(/rootConverter/temperature)を受け取り、クリックされたアクション・ボタンに応じて、摂氏または華氏の温度に値を変換します。たとえば、[Convert from Fahrenheit to Celsius]ボタンがクリックされたときは、このボタンのonClickイベントの次のコードが実行されます。
結果は、フォームの結果フィールド(/rootConverter/result)に表示されます。これらのフィールドは、フォームのスキーマで記述されています(図4 参照)。 図4. Workplace DesignerでのschemaConverter ![]() メモ:/rootConverter/temperature および /rootConverter/temperature は、フォーム上のこれらのフィールドにアクセスするためのXPath表記です。このコード(JavaScriptおよびJava)は、ボタンのクリックに対する応答としてWorkplaceサーバーで実行されます。 Workplace DesignerのJavaScriptエンジンには、変数の型キャスト(たとえば、var tIn:float)を許可する拡張が装備されました。 Workplace APIへの呼び出しも、同様の方法で行うことができます。Workplace API JARファイルは、Workplaceサーバーと共にインストールされます。これにより、Workplace Designerコンポーネント内でJavaScriptコードを書くだけで、Workplaceビジネス・コンポーネントと対話することができます。Workplace APIの主なサービスは、前述した他のグローバル・オブジェクトとまったく同じ方法でWorkplace Designer JavaScript環境に直接公開されています。たとえば、図5に示すサンプルJavaScriptコードは、Workplace Calendar APIの使い方の例を示しています。 図5. scriptLibraryMailCalendar ![]() アプリケーションでのWorkplace APIクラスの使い方の説明は、この記事の範囲外です。使い方を示す例をdeveloperWorks Workplace Sampleページ (US)からダウンロードできます。また、Workplace APIクラスの使い方の詳細についてはRedpaper『IBM Workplace 2.5 Development with Workplace Designer (US)』を参照してください。
開発プロセス、手法、およびガイドライン独自の外部コードをWorkplace Designerベースのアプリケーションで利用可能にすることは、比較的簡単なプロセスです。では、どのような方法でそれを行うのでしょうか。まず、JavaコードをJARファイルに含めます。これにはいくつかの方法がありますが、すべてのクラス・ファイルを構築し、1つのJARファイル内にまとめるバッチ処理のビルド・プロセスを利用できます。次のようなコマンドを使用します。jar -cfv <JAR_FILE> com <JAR_FILE> はターゲットのJARファイルの完全修飾ファイル名(例:sample.jar)で、comはクラス・ファイルを含むパッケージのツリーのルート(例:\mycode\built\classes\com...)です。 資料ファイル『How to use Eclipse to generate a JAR file for the Converter code (US)』には、EclipseプロジェクトからJARファイルを生成する方法が記載されています。 これで、Workplace Designerコンポーネントで使用したいコードをJARファイルとして用意できました。次に、JARファイルをWorkplaceサーバーにインストールし、JARファイルが有効になるようにサーバーを設定します。
Workplace Designerコンポーネントで使用するために、Workplaceサーバーで外部JARを有効にするカスタムJARファイルのインストールには、サーバーの管理権限とサーバーのディスク・ドライブへのアクセス権の両方が必要です。このため、以下に述べる管理タスクは、サーバー管理者が実行しなければならない場合があります。Javaクラス・ファイルを作成してJARファイルにまとめた後は、次の手順に従って、カスタムJARファイルをサーバーにインストールしてください。
これで、外部のカスタムJavaコードを利用するWorkplace Designerコンポーネントを作成し、デプロイする準備が整いました。
デバッグとテスト最初の試みで誤りがあった場合は、デバッグを行うことにより、問題がどこにあるのかを特定できます。一度、JARファイルをWorkplaceサーバーにインストールし、JVMによってロードされると、これを変更または更新するには、サーバーを停止し、JVMファイルを置き換え、サーバーを再起動しなければなりません。このため、デバッグ作業はたいへん面倒です。また、時間もかかるため、頻繁に行う作業ではありません。 各作業を効率よく繰り返すために、いくつかのデバッグ手法があります。資料ファイル『How to use logging to help debug your code (US)』には、Javaコードでロギングを有効にする方法が解説されています。ロギングからの出力は、\Websphere\PortalServer\logs\trace.logにあるシステムのトレース・ログ・ファイルに送信されます。 これを行うには、WebSphere Application Server管理コンソールでこのパッケージ用のロギングを有効にします。有効にする方法については、資料ファイル『How to enable logging in WebSphere Application Server (US)』を参照してください。 この機能を使用すると、コードの開発中はロギングをオンにし、デプロイの準備ができたらロギングをオフにすることで、コードを変更せずにロギングのレベルを柔軟に制御できます。 また、Workplace DesignerまたはWorkplaceサーバーとは独立してJavaクラスをテストできます。これには、クラスのメソッドを呼び出す通常のJava mainルーチンを書くだけでかまいません。これは、Eclipse内でたいへん簡単にデバッグできます。資料ファイル『Testing your class independently of a Workplace Designer component (US)』には、このようなmainルーチンの例が示されています。 JUnitテストを使用することもできます。詳細については、資料ファイル『Testing your class with JUnit (US)』を参照してください。
DominoデータにアクセスするためのDomino Javaクラスの呼び出し例もし、外部APIがDomino Java APIの場合は、同様の手法を用いることができます。まず、Domino JARファイル(NCSO.jar)をDomino ServerからWorkplaceサーバー上のWorkplaceライブラリー・ディレクトリー(以下の場所)にコピーします。<WAS_HOME>\WorkplaceServer\lwp_libNCSO.jarファイルには、Domino Java APIと、WorkplaceサーバーからDomino Serverへのリモート通信を可能にするORBが含まれています。通常、NCSO.jarはDomino Serverの次の場所にあります。 <Domino_HOME>\Domino\data\domino\java\NCSO.jarこれが機能するためには、Domino ServerでDIIOPサーバー・タスクが実行されている必要があります(Lotus Domino 5の場合は、HTTPタスクも必要です)。 Workplace Designerコンポーネントから、Dominoクラスをどのように使用するのかを選択できます。前述と同じ手法を用いて、DominoにアクセスするコードをWorkplace Designer JavaScriptコード内で直接記述することもできます。たとえば、次のようなコードです。
別の方法として、Lotus DominoにアクセスするカスタムJavaライブラリーをすでに持っている場合は、JARファイル(およびNCSO.jar)をWorkplaceサーバーにインストールするだけでよく、Workplace Designerコンポーネント内のJavaScriptコードからこれを呼び出すことができます。この場合、すべてのDominoコード(大量になる可能性があります)をコンポーネントの外部に置くことができるので、よりクリーンな方法といえるでしょう。作成するJavaScriptコードはDominoクラスを認識する必要がなく、コンポーネントとJava コード間でDominoオブジェクトのやり取りも行われません。基本的に、ストレージ、文書管理またはDominoが公開している他の機能のために使用するバックエンド・システムと、JavaScriptコードとを分離するレイヤーをJavaライブラリー内で維持することができます。このシナリオでは、JavaScriptコンポーネントのコードを変更することなく、Lotus Dominoを置き換えられます。
どちらのシナリオも、ダウンロード用サンプルで紹介されています。 Dominoアクセス・コードはNotesAccessorクラス内に内包されており、Workplace DesignerコンポーネントのJavaScriptコードと、バックエンド・データ管理を処理するコード間の分離レイヤーを提供します。Lotus Dominoとの接続を確立し、セッション・オブジェクトを取得すると、Domino Java APIのすべてのクラスにアクセスできます。例として、getPlatformメソッドの使い方を以下に示します。
図6では、Domino ServerからOSプラットフォーム文字列を取得し、これをWorkplace Designerコンポーネントのフォームに表示する2つの方法を示します。同様の方法で、他の任意の製品のJava APIと対話することができます。 図6. Dominoのサンプル ![]()
まとめWorkplace Designerは、IBM Workplaceプラットフォーム用のアプリケーション開発に関心があるすべての人々のためのツールです。単純なタスクにはSimpleActionやJavaScriptを使用し、より強力なパワーを必要とするタスクには、Javaベースのツールを統合して使用する拡張性を持っています。IBM Workplace Designerの詳細およびサンプルのダウンロードについては、次のリソースを参照してください。 ダウンロード
リソース学習する
筆者について(原文のまま)Willie Arbuckle is a software developer currently assigned to the Workplace Collaboration Services SDK development team. Previously, he was a member of the Workplace Designer development team responsible for defining and developing programmability and extensibility, including exposing the Workplace Collaboration Services API in Workplace Designer.Willie has been at Lotus / IBM since 1987; in that time, he has worked on core functionality of Lotus 1-2-3, Lotus Notes / Domino, Domino Off-Line Services, the LSX (LotusScript eXtension) Toolkit, Discovery Server, and the Java API Toolkit for Discovery Server - development toolkit technologies that exposed extensibility of IBM / Lotus product to ISVs and other developers. He also worked on the Search API for IBM Workplace Collaboration Services. In his spare time, Willie is frequently found on the sidelines of his son's or daughter's soccer field. A life-long student of the Irish language, he teaches Irish Gaeilge classes in the greater Boston area, and one of these days hopes to get around to writing a book on Irish grammar.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||