Trevor Johnston, Software Engineer, IBM
レベル:初級
原文の掲載:2006年03月14日
更新日:2006年12月01日更新
原文はこちら (US)
 |
既存のポートレット・ベースのWorkplaceアプリケーションをIBM Workplace Managed
Client内で表示する方法について理解しましょう。これによって、ネイティブWorkplace
Managed Client UIを作成する代替手法、またはWorkplace Managed Client UIが完成するまでの一時的な方法が得られます。 |
IBM Workplace Managed Clientは、IBM Workplace Collaboration Servicesへの比較的新しいインターフェースです。IBM
Workplace Managed Clientは、オリジナルのブラウザー・インターフェースの置き換えではなく、補完するものであり、ブラウザー・アプリケーションの大きな弱点を解決するよう設計されています。ブラウザー・アプリケーションは、デスクトップ・アプリケーションが持つ統合されたリッチ・エクスペリエンスを提供できません。また、ブラウザー・アプリケーションの最大の長所であるクロスプラットフォームの互換性と中央管理型のデプロイ・モデルを維持している点も、Workplace
Managed Clientの特長です。
このように、Workplace Managed Clientは両者の最大の利点を兼ね備えており、Workplace
Collaborations Servicesユーザーと管理者にとってたいへん魅力的な提案となっています(図1参照)。
図1.IBM Workplace Managed Client

Webアプリケーションは数多くの進化したツール・テクノロジーを享受できるのに対し、Workplace
Managed Client用のツール・テクノロジーはまだ発展途上にあります。現在、ポータル・ベースまたはWebベースのWorkplaceアプリケーションは、変更なしにWorkplace
Managed Client内で実行することはできません。完全なネイティブWorkplace Managed
Clientアプリケーションに必要な変更のために、Eclipse、SWT、XML、RCPML、およびSyncMLなどの数多くのテクノロジーが取り入れられています。将来的には、ツールによってブラウザーからWorkplace
Managed Clientにシームレスに移行できるようになるでしょう。しかし、現在は、適切なWorkplace
Managed Clientインターフェースを開発するための時間的な制約から、いくつかのツールは得られていません。
この記事では、Workplace Managed Client用のツールを使用して、既存のポートレット・ベースのWorkplace
Collaboration ServicesアプリケーションをWorkplace Managed Client内で実行する、再利用可能な手法について説明します。
この記事に従って操作を進めると、Workplace Managed Client内でWebベースのWorkplace
Collaboration Servicesアプリケーションを表示できます。他のWorkplace Managed
Clientアプリケーションと同様に、Workplace Managed Clientのページ切り替え機能を使用して、このアプリケーションにアクセスできます。これを実現する方法は、次のとおりです。
- アプリケーションを構成するポートレットを含む新しいWorkplaceポータル・ページを作成します。このページがWorkplace
Managed Client内に表示されます。
- Workplace Managed Clientの埋め込み(内部)ブラウザーをアプリケーションのページで開くEclipseプラグインを開発します。
- プラグインとサポート・ファイルを実際のWorkplace Collaboration Servicesサーバーにデプロイします。
最後に、Workplace Managed Clientの未接続のオフライン・モードへの対応方法やブラウザー・コントロールの操作方法(たとえば、アドレス・フィールドを非表示にする)など、より高度な機能について説明します。これを図2に示します。
図2.高度な機能をすべて持つ完成したアプリケーション

ポータル・ページの非表示化
アプリケーションのポートレットを含む新しいポータル・ページを作成する必要があります。既存のアプリケーションは、そのポートレットを含む専用のポータル・ページを持っているため、これは奇妙に感じるかもしれません。しかし、次の2つの理由によってWorkplaceポータルページに含まれるブランディングを非表示にしなければならないので、残念ながらこのページを再利用することはできません。
- 表示上の理由として、Workplaceポータル・ページはデフォルトでナビゲーション要素とブランディング要素を持っています。たとえば、Workplaceのロゴとアプリケーションのリストです。これらはクライアントにすでに表示されているので、ブラウザーに表示しない方がよいでしょう。表示しないことにより、画面の空き領域も広がります。
- より重要なのは、Workplace Managed Clientの埋め込みブラウザーに、Javaアプレットに関する欠陥があることです。この欠陥は、埋め込みブラウザーがJavaアプレット(Javaバージョン2以降)を含むページを表示するときに明らかになります。これは、プラットフォームとJVMのすべての組み合わせに影響するとは限りませんが、ほとんどのWindows
XPマシンはこの点が問題となります。
明らかに、2番目の点が重要です。しかし、ブランディングを非表示にすることはそれ自体望ましいことなので、アプレットの欠陥とは関係なくこの手順を実行します。
新しい非表示のアプリケーション・ページの作成
この記事では、Workplace Managed Clientに移行するアプリケーションとしてIBM
Workplace Collaborative Learningを選択しました。この記事で説明した方法と同様の方法でWorkplace
Collaborative LearningをWorkplace Managed Clientで利用可能にするリリース情報がありますが、このアプリケーションはまだWorkplace
Managed Clientにネイティブに移行しなければならないアプリケーションです。
- Webブラウザーを使用し、管理者ユーザーとしてWorkplace Collaboration Servicesにログインします。ページの一番上にある[管理]リンクをクリックします。WebSphere
Portalの管理コンソールが表示されます。
- [ページの管理]リンクをクリックし、[新規ページ]をクリックします。[ページ・プロパティー]が表示されます。
- ページの名前(タイトル)として、アプリケーションに最もふさわしいもの(たとえば、「Learning
in Client」)を入力します。[OK]をクリックします。このページは通常のWebSphere
Portalインターフェースからアクセスできないことを示すメッセージが表示されます。この問題については、後で解決できます。
- [OK]をクリックし、[ページの管理]画面に戻ります。
- 次の手順として、ポートレットを非表示ページに追加します。ポータル・ページの数が多すぎて新しいページを簡単に見つけられないため、「client」を検索してページを探します。検索フィルターによって、新しい非表示ページを素早く見つけられます。これで、図3に示すように、リストに表示されるページ数がかなり少なくなります。
図3.フィルターを設定して表示した新しいページ

- 表内で、新しいページのエントリーに対応する鉛筆アイコンをクリックします。ポートレットをページに追加できる[レイアウトの編集]画面が表示されます。この記事では、この画面の使い方の説明はしませんが、たいへん簡単に操作できます。目的のポートレットを追加し、[完了]をクリックします。サンプル・ページの最終的な構成を図4に示します。
図4.マイ・アプリケーションのポータル・ページのレイアウト

これで、非表示ページの作成が完了しました。
バナーの非表示化
非表示ページでバナーを非表示にするこの手法は少し難しいかもしれませんが、最も合理的な方法であり、効果があります。
バナーがどのように追加されるのかを知ると役に立ちます。WebSphere Portalでは、ページのレイアウトを決定するHTMLフラグメント(および、それをサポートするCSS、翻訳、イメージ・ファイル)にテーマという名称が与えられています。テーマは、スキンと呼ばれるものと組み合わせて、ページ上のすべてのポートレットから出力されたHTMLフラグメントを包み込みます。ポートレットの出力を照合し、ユーザーに提供する最終的なページとしてまとめ上げる役割を持つのがテーマです。理論的には、テーマはポートレットをすべて無視して、静的なページを出力することもできます(これはあまり実用的ではありませんが、バナーがテーマによってどのように生成されるのかを示しています)。
テーマの改造
実際には、テーマを改造する必要はなく、既存のテーマをコピーします。各テーマは、Default.jspとPlain.jspという2つの主要JSPファイル(最上位のファイル)を持っています。ユーザーが非ソロ・モードのときは前者のDefault.jspがページを構成し、ソロ・モードのときは後者のPlain.jspがページを構成します。ソロ・モードのときに、すべてのナビゲーション要素とバナー要素は非表示になります。デフォルトのWorkplaceテーマをコピーし、このコピーのDefault.jspをPlain.jspで置き換えます。この新しいテーマに関連するすべてのページは、ナビゲーション要素とバナー要素を持たない状態で常に描画されます。(99%のテーマでは、デフォルトのWorkplaceテーマが含まれていて、たとえそれが望まれていない場合でも、Plain.jspは複数のポートレットをレンダリングします。)
以下の手順では、WebSphereはc:\websphereにインストールされているものとします。この例では、サーバーのノード名はtrevj-unixです。ご使用になるサイトに応じて手順を調整してください。
- デフォルトのWorkplaceテーマはc:
\websphere/AppServer/installedApps/trevj-unix/wps.ear/wps.war/themes/html/workplaceにあります。plainという名前で、このディレクトリーのコピーを作成します。(このディレクトリーへの絶対パスはc:\websphere/AppServer/installedApps/trevj-unix/wps.ear/wps.war/themes/html/plainとなります。)
- このディレクトリーには、Default.jspとPlain.jspがあります。Plain.jspのコピーでDefault.jspを置き換えます。
- ポータル管理コンソールに戻り、[ポータル・ユーザー・インターフェース]にある[テーマとスキン]を開きます。
- [新規テーマの追加]をクリックします。テーマに「Plain Theme for Client」という名前を付け、ディレクトリー名を「plain」にします。サポートするスキンとして「Mist」を追加し、これをデフォルトのスキンにします。このスキンによって、外観がWorkplaceアプリケーションに正確に一致します。
メモ:ポータルのデフォルト・テーマを変更した場合は、それに応じてスキンを変更してください。
- 完了したら[OK]をクリックします。
これで、最小限のポータル・テーマが完成しました。
メモ:Workplace Collaboration Services 2.6サーバーにデプロイする場合は、テーマのDefault.jspにもう1つ変更を加える必要があります。先頭付近に次のような要素があります。
<script type="text/javascript" src='<wps:urlFindInTheme
file="regSessionPartition.js"/>'></script>
Default.jspからこれらの行を削除します。これにより、ページをロードする際に、ブラウザーが無限ループに入らなくなります。(Plain.jspは、複数のポートレットをロードする用途には向きませんが、プログラミングによっては、そのように作成される場合もあります。)
必要なページへのこのテーマの適用
このプロジェクトにとって都合の良いことに、WebSphere Portalでは各ポータル・ページが異なるテーマを持つことができます。これまでの説明からわかるように、前に作成した非表示ページにはplainテーマを適用します。
また、これからつくる他のページにもPlainテーマを適用しますorkplaceのURL生成機能を使用するときに、問題となるページが出現します。実際のページ・アドレスにリダイレクトする前に、このページが一瞬表示されます。非表示ページの真のURLはWebSphere
Portalだけが認識しているので、Workplace Managed ClientはこのURLを計算できません。しかし、暗黙的にこのURLにリダイレクトすることにより、計算した場合と同じ効果が得られます。このページはほんの一瞬しか表示されませんが、デフォルト・テーマを適用したときは、いずれにせよバナーとそのアプレットが表示されます。
- 管理コンソールの[ページの管理]画面を開きます(前に非表示ページを作成するときに表示した画面です)。再び、非表示ページを検索します。ページが見つかったら、[ページ・プロパティーの編集]
アイコン(ノートパッド・アイコン)をクリックします。[ページ・プロパティー]画面が表示されます。
- ドロップダウン・メニューから新しいテーマを選択し、[OK]をクリックします。
- ページを検索します。今回の検索語は「workplaceurl」です。このフィルターにより、lotus.workplace.hiddenpage.WorkplaceUrlが見つけられるはずです。このページにもテーマを適用します。
ビューのプロトタイプの作成
ポータル・ページを表示用に調整した後は、焦点をWorkplace Managed Clientに移しましょう。これ以降は、IBM
Workplace Managed Client Toolkitを主に使用します。このツールキット(この記事では、このように呼びます)は、IBM
Workplace Clientプラットフォーム用に登場した最初の専用ツールです。Workplace
Collaboration Services 2.6以降、これはIBM Workplace Software Development Kit (US)に含まれています。
このツールキットは、誤りが起きやすい次の作業を支援します。
- アプリケーションのレイアウトの指定とプラグイン・コードでのプレースホルダーの作成
- 稼働中のWorkplace Collaboration Servicesサーバーへのデプロイ
Workplace Software Development Kitのインストール
最初の作業として、IBM Workplace Software Development Kit (SDK) (US)をダウンロードします。IBM Workplace Managed Client Toolkitは、Eclipse更新サイトとしてSDKに含まれています。SDKにはツールのインストール方法が含まれていますが、ここではその手順の概要を説明します。
- ご使用になるマシンの適切な場所にIBM Workplace SDKを解凍します。
- IDE (EclipseまたはRational Application Developer)内で、[Help]-[Software
Updates]-[Find and Install]を選択します。
- [Search for new features to install]を選択し、[Next]をクリックします。
- [New Local Site]をクリックし、SDKを解凍したディレクトリー内のwcsapi26/wmc/tools/WMCToolにあるツールキットの更新サイトに移動します。
- [Sites to include in search]のリストでツールキットのローカル・サイトが選択されていることを確認し、[Next]をクリックします。
- [IBM Workplace Managed Client Toolkit]を選択し、画面に表示される説明に従って残りの作業を完了させます。
新しいツールキット・プロジェクトの作成
このセクションでは、Eclipseを使用して新しいツールキット・プロジェクトを作成します。次の手順に従って、プロジェクトを作成してください。
- [File]-[New]-[Other]を選択します。[New Project]ウィザードが表示されます。
- [IBM Workplace]を選択し、[Workplace Managed Client Application Project]を選択します。[IBM
Workplace Application]ウィザードが開かれます。
- プロジェクト名として「PortletsInWmc」を入力します。このウィザード・パネルでは、デフォルト値を受け入れることができます。必要であれば、アイコン・フィールドでビューのアイコンを選択します。ツールキットには、このような5つのアイコンが用意されています。[Next]をクリックし、[Page
Layout Project]ダイアログ・ボックスを開きます(図5参照)。
図5.[Page Layout Project]ダイアログ

- デフォルトのプロパティーを受け入れることはできますが、レイアウトは選択しなければなりません。アプリケーションのレイアウト候補を示すボタンが、ウィンドウの下半分に並んでいます。埋め込みブラウザーを含めるために、1つのビューが必要です。レイアウトを選択してください(図5参照)。[Automatically
create default views]オプションが選択されていることを確認し、[Finish]をクリックします。すぐに、3つの新しいプロジェクトがワークスペースに表示されます(図6参照)。
図6.新しいプロジェクト

開発環境のテスト
ツールキットはXMLファイルを扱えるだけでなく、新しいクライアント・アプリケーションのテストにも役立ちます。ツールキットはクライアントを起動するEclipseランタイム構成を作成し、現在のワークスペースからアプリケーションを完成させることができます。アプリケーションのデバッグという利点以外にも(今回のアプリケーションはデバッグが必要なほど複雑ではありませんが)、ツールキットによって、テスト時に必要なアプリケーションのデプロイ作業を省略できます。
最初に行う作業は、プラグインの開発環境(PDE)のターゲット・プラットフォームを設定することです。これは、プラグインが開発されているEclipseプラットフォームです。
- [Window]-[Preferences]を選択します。
- [Preferences]ダイアログ・ボックスで、[Plug-in Development]-[Target Platform]を選択します。
- [Location]フィールドで、c:
\wct26\eclipse (または、クライアントをインストールした場所)を参照します。少し経つと、この場所にある約200個のプラグインがEclipseによって表示されます(図7参照)。
図7.ターゲット・プラットフォームの設定

2番目の作業として、クライアントで提供されるJVMを使用します。
- [Window]-[Preferences]を選択します。
- [Preferences]ダイアログ・ボックスで、[Java]-[Installed JREs]を選択します。
- [Add]をクリックします。正確なパスはWorkplace Collaboration Services 2.5と2.6、およびオペレーティング・システムによって異なりますが、Workplace
Managed Client 2.6 Windowsクライアントでは、C:
\wct26\rcp\eclipse\features\com.ibm.rcp.jre.win32.feature_1.3.0\jreに移動し、[OK]をクリックします。
いずれの場合も、JREは、クライアントをインストールしたrcp\eclipse\featuresディレクトリー内にあります(たとえば、c:\wct26\rcp\eclipse\features\com.ibm.rcp.jre.win32.feature_1.3.0)。
- [OK]をクリックし、JVMのリストに戻ります。
- 設定した新しいJVMを選択し、これをJavaプロジェクトのデフォルトのVMにします。
セットアップが完了し、安全にランタイム構成を作成できるようになりました。
- IDEに戻ります。Package ExplorerでPortletsInWmcプロジェクトを選択します。
- メニューで[Run]-[Run]を選択します。
- [Configurations]リストで、[IBM Workplace Managed Client]を選択し、[New]をクリックします。正しく設定されると、図8に示すようなランタイム構成が表示されます。
図8.クライアントのランタイム構成

完了後、すべてが正しく設定されていると、PortletsInWmcランタイム構成を実行したときに、図9に示すようなウィンドウが表示されます。
図9."Hello planet"クライアント・アプリケーション

これで、開発環境が準備できました。
埋め込みブラウザー・ビューの作成
前述のように、埋め込みブラウザー・ビューはたいへんシンプルです。ツールキットによって、独自のコードを追加できるプレースホルダー・ビューが用意されています。
必要なプラグインの指定
Javaの領域に入る前に、いくつかの依存ファイルをportletsinwmc.pane1プラグインに追加します。プロジェクトのplugin.xmlを開いてください(Project
Explorerでダブルクリックします)。org.eclipse.uiとorg.eclipse.core.runtimeに加えて、次のプラグインのリストが表示されています。
- com.ibm.rcp.ui.browser
- com.ibm.workplace.cdo
- com.ibm.workplace.security
- com.ibm.workplace.rcp.credentialstore
- com.ibm.rcp.ui.browser.core
- com.ibm.rcp.offline
プラグインのコーディング
ツールキットによって、Pane1Viewと呼ばれるプラグイン・クラスがあらかじめ作成されています。これは、Javaプロジェクトportletsinwmc.pane1内にあります。createPartControl()をカスタマイズし、さらに2つのメソッドを追加します。最初のメソッドはとてもシンプルなもので、埋め込みブラウザー用の初期URLを返します。2番目のメソッドはLTPAトークンを処理し、ブラウザーの自動認証を行うために必要です。
メモ:ここで説明するプラグインは、ドキュメントに記されていないWorkplace APIを使用しています。このAPIはWorkplace
Collaboration Services 2.5、2.5.1、および2.6で機能しますが、埋め込みブラウザーとURL生成のコードは次のリリースで変更される可能性もあります。また、埋め込みブラウザーを作成する安定したパブリックAPIも存在します。しかし、このAPIではブラウザー・コントロールを非表示にできません。
埋め込みブラウザー
ビューのコンテンツを作成するとき、EclipseはcreatePartControl()を呼び出します。このサンプルでは、createPartControl()は埋め込みブラウザー・コントロールのインスタンスを生成し、これを適切に設定する役割を持ちます。
次のサンプル・コードは、可能な1つの手法を示します。最初に、ブラウザーのさまざまな構成要素を表すハッシュマップを作成します。この構成要素には、ブラウザーの初期URL、ホームURL、および表示するコントロールなどが含まれています。最後に、現在のページのタイトルとしてビューのタイトルを設定します。これは、静的な値として設定するほうがよいでしょう。
このコードを記述するだけで、クライアントを実行したときに、フル機能のWebブラウザーが得られます。
public void createPartControl(Composite parent)
{
// browser configuration.
Map configMap = new HashMap();
// browser control.
BrowserConfig config = new BrowserConfig(configMap);
browser = new BrowserControl(config);
browser.createPartControl(parent);
// title.
browser.addTitleListener(new TitleListener()
{
public void changed(TitleEvent event)
{
setPartName(event.title);
}
});
}
|
URLの計算
前述のように、非表示のページは、WebSphere Portalによって提供される通常のナビゲーション・リンクではアクセスできません。非表示のページであるのはそのためです。
なぜアクセスできないのかを理解するには、WebSphere Portal上のページがどのように構成されているのかを考慮するとよいでしょう。ポータル・ページは、ファイル・システムと非常によく似た階層構造で編成されています。ルート・フォルダー(コンテンツ・ルート)があり、これが最上位の親となり、その下にすべてのページが位置します。Workplaceアプリケーション・ページの親(1つ上位の階層)はマイ・ワークで、マイ・ワークの親はマイ・ポータルです。マイ・ポータルの親は最上位のフォルダー、つまりコンテンツ・ルートです。ここで使用する非表示ページは、コンテンツ・ルートと同じ階層として作成しました。これはマイ・ワークの子ではないため、アプリケーション・ページの横にあるナビゲーション・リストには表示されません。この理由により、ページを作成するときに、URL生成を使用してページへのリンクを作成するよう指示されたのです。
URL生成は、ポータル・ページへのリンクを作成するWebSphere Portalの機能です。この機能は非表示ページ専用ではありませんが、非表示ページに対して非常によく用いられます。Workplace
Collaboration Servicesはこのサービス上にラッパーを提供し、ブラウザーを目的のポータル・ページにリダイレクトする特殊なポートレットが含まれるページに、ブラウザーを最初に導きます。
次のコード・スニペットは、URL生成サービスの使用方法を示します。
メモ:簡潔にするために、ページのコンテンツIDはハード・コーディングされています。コンテンツIDを明示的に指定しない場合、WebSphere
Portalは固有な値を生成します。いずれの場合でも、コンテンツIDをデプロイ時のページの値に一致させる必要があります。デプロイに用いるその値は、WebSphere
Portalの管理コンソールで見つけられます(これが固有ID値です)。正しいコンテンツIDを見つけたら、このメソッドをPane1View.javaに追加します。
このコードをセットしてクライアントを実行すると、ブラウザーで非表示のページが開かれます。現時点では、手動で認証しなければなりません。
private String getUrl()
{
try
{
WorkplaceUrl url = WorkplaceUrlDataInternalFactory.INSTANCE
.createWorkplaceUrl();
url.setContentId("6_0_IQ");
url.setNewWindow(false);
WorkplaceUrlServiceInternalDelegate delegate =
_WorkplaceUrlServiceInternalDelegateFactory.INSTANCE.create();
return delegate.workplaceUrlGenerate(url);
}
catch (Exception e) {}
}
|
認証の処理
ソリューションの完成までの最後の手順として、認証を自動的に処理します。ユーザーはすでにWorkplace
Collaboration Servicesサーバーにログインし、ユーザー名とパスワードを再入力する必要がないため、自動で処理することが適切です。Workplace
Managed Clientが認証用に提供した認証トークンを再利用できます。
埋め込みブラウザーはWorkplace Collaboration ServicesサーバーにLTPAトークンを渡し、このトークンはログイン用に受け取られます。トークンを渡すには、ILTPATokenManagerインターフェースをインプリメントします。
この記事では、このクラスについて詳しく説明しません。次のコード・スニペットでは、Workplace
Collaboration Servicesサーバーのドメイン名のサポートを宣言する方法と、LWPCredentialFactory
(LTPAトークンを取得するため)およびgetURLList() (サーバーのホスト名のサポートを宣言する)を呼び出す方法が示されています。残りの部分では、LTPAトークンを慎重に加工しています。この記事では、このクラスについて詳しく説明しません。次のコード・スニペットでは、Workplace
Collaboration Servicesサーバーのドメイン名のサポートを宣言する方法と、LWPCredentialFactory
(LTPAトークンを取得するため)およびgetURLList() (サーバーのホスト名のサポートを宣言する)を呼び出す方法が示されています。残りの部分では、LTPAトークンを慎重に加工しています。
private ILTPATokenManager getLtpaTokenManager()
{
final String ltpaToken;
try
{
ltpaToken = LWPCredentialFactory.getInstance().getLtpaCookie(true);
return new ILTPATokenManager()
{
public String[] getURLList()
{
return new String[] { getUrl() };
}
public String getLTPAToken(String url)
{
return ltpaToken;
}
public boolean setLTPATokenIE(String url)
{
// strip the URL of everything except the http://host:port portion.
int i = url.indexOf('/', "https://".length() + 1);
if (i != -1)
url = url.substring(0, i);
return RCPOS.SetCookie(url, "LtpaToken=" + ltpaToken);
}
public boolean isLTPATokenValid(String url)
{
return false;
}
};
}
catch (CredentialStoreException e)
{
throw new RuntimeException("could not create ltpa token", e);
}
}
|
動作のテスト
新しい機能を組み込むために、createPartControl()は次のコード・スニペットのようになっています。
public void createPartControl(Composite parent)
{
// browser configuration.
Map configMap = new HashMap();
configMap.put("initialURL", getUrl());
configMap.put("LTPATokenManager", getLtpaTokenManager());
// browser control.
BrowserConfig config = new BrowserConfig(configMap);
browser = new BrowserControl(config);
browser.createPartControl(parent);
// title.
browser.addTitleListener(new TitleListener()
{
public void changed(TitleEvent event)
{
setPartName(event.title);
}
});
}
|
アプリケーションを実行し、パスワードの入力を求められることなく、非表示ページに自動的に移動することを確認してください。正しく実行された場合は、開発フェーズの完了です。
アプリケーションのデプロイ
アプリケーションを実動Workplace Collaboration Servicesサーバーにデプロイするときは、ツールキットのエクスポート機能がたいへん役に立ちます。
- IDEのメニューで、[File]-[Export]を選択します。[IBM Workplace Managed Client
Deployable Set]を選択します。
- アプリケーションとして、[PortletsInWmc](または、前に選択したアプリケーション名)を選択します。ここでは、エクスポート先として「H:
\」を指定しましたが、ご使用になるシステムに適した場所を選択してください。[Finish]をクリックします。
- PortletsInWmcというディレクトリーが作成されます。このディレクトリーには、必要なすべてのファイルと、DeployInstructions.txtというプレーン・テキストの説明ファイルが含まれています。この説明に従って、アプリケーションをデプロイします。
これで、アプリケーションが完成しました。次のセクションでは、オプションの高度な機能の実装方法について説明します。
高度な機能の使用
Workplace Managed Clientの最も魅力的な機能の1つにオフライン・モードがあります。この機能は、切断モード(disconnected)、ローカル・モード、複製モード(replicated)など、さまざまな名前で呼ばれています。後者の呼び方は、データベースのローカル・コピーをクライアントのワークステーションに作成するLotus
Notesの機能(レプリカと呼ばれています)に由来します。Lotus Notes Clientは、サーバーから切断された状態でも、データベースの内容を照会および操作することができ、接続が再開したときにその内容を同期します。Workplace
Managed Clientはこの伝統を受け継ぎ、同期プロセスを処理するSyncMLというオープン・スタンダードを採用しました。さらに、Workplace
Managed Clientでは、ビジネス・ロジックもオフライン(つまり、クライアント内)で実行できます。クライアント・サイドのマイクロコンテナーEJBによってこれが可能になっています。
もちろん、WebSphere Portalをオフラインにすることはできません。可能なことは、クライアントがオフラインのときにアプリケーションは利用できないことを示す情報メッセージを表示することです。これは、「404:
Not found」エラー・メッセージよりは望ましい形です。
最初の変更として、Pane1ViewにInetworkAwareインターフェースをインプリメントします。これは、コード内に他の変更を組み込む前に行ってください。これを行うには、Pane1Viewにいくつかの新しいメソッドが必要ですが、Eclipseではこれらを自動的に追加できます。
このソリューションでは、オンライン時にはブラウザー・ウィジェットを使用し、オフライン時には情報メッセージを表示するよう切り替えます。この切り替えは、SWTのStackLayoutによって実現します。完全を期すために、オンライン・モードに切り替えるボタンをメッセージに組み込みます。切り替えにはリファクタリングが必要です。また、URL生成サービスはオンラインでのみ利用可能なので、クライアントが最初にオンラインになるまで、ブラウザー・ウィジェットの作成を遅らせることができます。StackLayoutではいつでもコントロールを追加できます。リファクタリングされたcreatePartControl()と、新しいメソッドcreateBrowserControl()を次のコード・スニペットに示します。
また、オフライン・メッセージ・コントロール用のコードを次のコード・スニペットに示します。これはCompositeを拡張する内部クラスで、他のクラスからは必要とされないカスタム・クラスを構築する一般的な手法です。このコントロールには情報ラベルがあり、その下にはWorkplace
Managed Clientをオンラインにするボタンがあります。どのような方法でWorkplaceManagerFactoryをこの機能に組み込んでいるかを確認してください。
class MyOfflineLabel extends Composite
{
MyOfflineLabel(Composite parent, int style)
{
super(parent, style);
setLayout(new RowLayout(SWT.VERTICAL));
Label l = new Label(this, SWT.NONE);
l.setText("This component not available offline!");
Button b = new Button(this, SWT.NONE);
b.setText("Go online");
b.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent arg0)
{
try
{
WorkplaceManagerFactory.getInstance().goOnline();
}
catch (OfflineException e) {}
}
public void widgetDefaultSelected(SelectionEvent arg0)
{
}
});
}
}
...
//The following snippet uses createBrowserControl() and refactored createPartControl()
// new boolean field.
private boolean browserInitialised;
public void createPartControl(Composite parent)
{
// to manipulate the display.
this.myparent = parent;
this.mydisplay = Display.getCurrent();
_offlineHelper = IOfflineServiceHelperFactory.INSTANCE.create(this);
// stack layout.
parent.setLayoutData(new GridData(GridData.FILL_BOTH));
stackLayout = new StackLayout();
parent.setLayout(stackLayout);
// offline message display.
offlineControl = new MyOfflineLabel(parent, SWT.NONE);
// defer browser creation if offline.
if (_offlineHelper.isOnline())
{
createBrowserControl(parent);
stackLayout.topControl = browser.getControl();
}
else
{
stackLayout.topControl = offlineControl;
}
}
private void createBrowserControl(Composite parent)
{
// browser config.
Map configMap = new HashMap();
configMap.put("initialURL", getUrl());
configMap.put("LTPATokenManager", getLtpaTokenManager());
BrowserConfig config = new BrowserConfig(configMap);
// browser control.
browser = new BrowserControl(config);
browser.createPartControl(parent);
browserInitialised = true;
}
|
最後の手順として、offlineStateChanged()に手を加え、アプリケーションがクライアントのオンライン/オフラインの通知メカニズムに対応できるようにします。クライアントがオンラインかオフラインかに応じて、スタックの最上位のコントロールを変更します。クライアントが初めてオンラインになる場合は、ブラウザー・コントロールを作成します。
/**
* @see com.ibm.rcp.offline.api.service.INetworkAware#offlineStateChanged()
*/
public void offlineStateChanged()
{
mydisplay.syncExec(new Runnable()
{
public void run()
{
if (_offlineHelper.isOnline())
{
// online.
if (!browserInitialised)
{
createBrowserControl(myparent);
}
stackLayout.topControl = browser.getControl();
}
else
{
// offline.
stackLayout.topControl = offlineControl;
}
myparent.layout();
}
});
}
|
オフライン・モードのときにアプリケーションがどのように表示されるのかを図10に示します。一番上に「This
component not available offline」というメッセージが表示されます。
図10.オフライン・モードでのアプリケーション

ブラウザー・コントロールの非表示化
ブラウザー・コントロールはたいへん柔軟に制御できます。ブラウザー・コントロールには多数のオプションがあり、いずれのオプションもそのコンストラクターに渡されるBrowserConfigクラスを介してアクセスできます。最後の例として、コントロールをすべて非表示にする方法を説明します。これには、多くの利点があります。
- アドレス・フィールドが不要です。アプリケーションがURLを計算し、そのURLに自動的に移動します。Workplace
Managed Client自体のブラウザーは汎用のブラウズ目的に使用すべきです。
- 「戻る」と「進む」のブラウザー・コントロールは、Webアプリケーションでのトラブル原因としてよく知られています。これらを完全に取り除くことにより、問題の可能性を回避できます。
- これらのすべてによって、ポートレットの画面スペースが広がります。
必要な作業としては、BrowserConfigにいくつかのフラグを追加するだけです。createBrowserControl()にステートメントを追加します。
configMap.put("showToolbar", "false");
configMap.put("showURLEntry", "false");
まとめ
IBM Workplace Managed Clientプラットフォームはまだ新しく、やがて先進のツール・テクノロジーを利用するようになり、この記事で説明したレンダリング手法も不要となるでしょう。しかし、現在、役に立つツールがWorkplace
Managed Client Toolkitという形で存在することは明らかです。このツールを使用すると、既存のポータル・アプリケーションをクライアント・プラットフォームに素早く簡単に移行できます。また、単純な変更を加えるだけで、真のIBM
Workplace Managed Clientアプリケーションであるかのように、アプリケーションの完成度を高められます。結果をシームレスにユーザーに公開し、プラットフォームの他の部分と統合できます。
リソース
学ぶ
製品/技術情報
議論する
筆者について(原文のまま)
Trevor Johnston is a software engineer in IBM's Dublin Software Lab. He
works on IBM Workplace Collaborative Learning where he specializes in Workplace
Client and search capabilities. He joined IBM in 2003 as an intern on the
"Extreme Blue" program before returning to complete his university
studies. He is interested in open source software, particularly Linux on
the desktop. He co-authored the "Workplace Managed Client 2.6 on Linux"
RedBook for IBM. In his spare time he is an amateur musician and particularly
enjoys combining this hobby with his other favorite pastime, travel.
|