はじめに
世間ではWeb 2.0やRIA(Rich Internet Application)が大流行していますが、投資家向けに機能豊富なWebフロントエンドを構築したとしても、本当に必要なものがシッククライアント(thick-client)の機能である場合には役に立ちません。私の以前の投稿『シッククライアントを配備するためのJavaアプリケーションサーバー基盤の構築』では、従来のJava Webサーバーアーキテクチャを活用してシッククライアントを簡単に配備する方法を紹介しました。
しかし、RIAの流行を避けて実用的なシッククライアントソリューションを構築するためには、実際にどうしたらよいでしょうか。その答えとなるのがRCP(Rich Client Platform)です。RCPは、Javaデスクトップアプリケーションの世界にフレームワークの概念を持ち込むものです。J2EE/Java EEの世界には以前から数多くのフレームワークが存在し、そこでベストプラクティスの標準化が行われてきました(Spring、Struts、WebWorkなどが良い例です)。今ようやく、Javaデスクトップの世界でもその経験が生かされようとしています。
RCPは、アプリケーションのスケルトン/シェルと、このシェルに基づいて独自のアプリケーションを構築する際に利用できるモジュールベースのAPIを提供します。メニュー、ツールバー、各種ビューの作成など、基本的な部分はすべてRCPが処理してくれるので、一から作成する必要はありません。自動的に処理してくれる環境があるならば、わざわざ自分でフレームワークを動かす理由はないでしょう。
本稿では、前回の記事で構築したサーバーに接続するシッククライアントインターフェイスを構築する方法を解説します。Eclipse RCPベースのシッククライアントを構築し、その後でEclipse RCPとSpringを統合します。
必要な環境
- Eclipse 3.1.2
- MyEclipse 4.1.1
- Java SE 5(およびその実用的な知識)
- サーブレットコンテナまたはJ2EEサーバー(このチュートリアルではTomcat 5.5+を使用)
- Spring 1.2+(およびその実用的な知識)
- サンプルコード
Eclipse RCPを選ぶ理由
さて、Javaに初めて触れる方や長いこと遠ざかっていた方のためにお伝えしますが、Eclipseの人気は史上最高です。人気だけでは成功が保証されないというものの、数百万人のユーザー、非常に活発なコミュニティ、高い評判、そしてIBMの支持は悪いものではありません。また、今も数多くのアプリケーションがEclipse RCPベースで開発されているので、手製のフレームワークよりもはるかにしっかりとしたテストが行われると考えてよいでしょう。
では、始めましょう。
新しいEclipseプラグインプロジェクトを作成する
次の手順に従って、リッチクライアントアプリケーション用の新しいEclipseプラグインプロジェクトを作成します。
- Eclipseで新しいプラグインプロジェクト「EclipseTradeClient」を作成します。このプラグインのフォーマットをEclipseバージョン3.1とし、[Create an OSGi bundle manifest]チェックボックスがオンであることを確認します(図1を参照)。[Next]をクリックします。
- [Plug-in Content]画面はデフォルトのままとします。ただし、[Would you like to create a rich client application?]で[Yes]が選択されていることを確認します(図2を参照)。[Next]をクリックします。
- テンプレートで、[RCP application with a view]を選択し、[Next]をクリックします。
- RCPアプリケーションのプロパティを入力し(図3を参照)、[Finish]をクリックします。プラグイン開発のパースペクティブに移動することを確認するプロンプトが表示されます。[Yes]をクリックします。
- これでプロジェクトの作成は終了です。「plugin.xml」をまだ開いていない場合は開きます。図4に示す画面が表示されます。
- EclipseTradeClient/src/eclipseTradeClientパッケージを展開し、EclipseのRCPウィザードによって自動的に作成されたクラスを確認します。Eclipseエディタで、[All Extensions]タブをクリックし、図5のように最上位の各ノードを展開します。



Application
クラス、Perspective
クラス、およびView
クラスの拡張エントリに注意してください。EclipseのRCPの中心は「plugin.xml」ファイルなので、[Extensions]タブを選択し[Add...]ボタンをクリックするだけで新しいコンポーネントを追加できます(Eclipseによって自動的に提供されるクラスの一覧については、「補足説明2 Eclipseによって生成されるクラス」を参照)。
- Application
- ApplicationActionBarAdvisor
- ApplicationWorkbenchAdvisor
- ApplicationWorkbenchWindowAdvisor
- EclipseTradeClientPlugin
- Perspective
- View
run(Object args)
メソッドが呼び出されます。getInitialWindowPerspectiveId()
を使います。createActionBarAdvisor()
がApplicationActionBarAdvisor
のインスタンスを作成します(ApplicationXXXAdvisors
という名前のクラスがたくさんありますね)。IPerspectiveFactory
を実装することはお分かりでしょう。javadocには、「パースペクティブファクトリは初期ページレイアウトとページの可視アクションを生成する」と書かれています。Eclipse IDEでPerspectiveを実際に確認するには、[Debug]、[Java]、[Plug-in Development]、[Java]など、右下隅にあるさまざまなPerspectiveをクリックするだけで十分です。また、Eclipseのメニューで[Window]-[Open Perspective]を使う方法もあります。基本的に、パースペクティブは同じ機能を持つビューをグループにまとめるためのレイアウトです。デフォルトのViewクラスをリファクタリングする
このように、EclipseのウィザードはViewというクラスを自動的に作成しました。このままでは不便なので、次の手順に従って、このデフォルトのView
クラスをリファクタリングします。
- ビューの名前を変更するには、パッケージエクスプローラで「View.java」を右クリックし、[Refactor]-[Rename]と選択します。新しい名前として「ExplorerView」と入力し、[Preview]をクリックします。表示される画面で、
Perspective
クラスがView.IDではなくExplorerView.IDを使うようにリファクタリングされていることを確認します(図6を参照)。[OK]をクリックします。 - 残念なことに、Eclipseのリファクタリング機能は、特にIntelliJの機能と比べると少し貧弱です。IntelliJでこのようなリファクタリングを行うと、指定されたクラスだけでなく、.xmlファイルに対してもリファクタリングが適用されます。余談ですが、これは、特にSpring、Hibernate、XMLなどの構成が重い環境で非常に役立ちます。
- リファクタリングに必要な作業は以上です――と言いたいところですが、まだ終わりではありません。初期化する静的変数IDをEclipseTradeClient.explorerViewに変更します。これは「plugin.xml」で先ほど設定したIDに対応します。
- これで、ようやくリファクタリングは終了です。では、すべて正しく変更されたかどうかテストしてみましょう。エディタで再び「plugin.xml」を開き、[Overview]タブをクリックします。[Launch an Eclipse application]をクリックすると、図8のような画面が表示されるはずです。
- 次に、ノードの名前を変更します。クラスExplorerViewを開きます。内部クラス
ViewContentProvider
を探し、メソッドObject getElements(Object parent)
を変更して、"Watch List", "Order History"
の文字列配列を返すようにします。
name="ExplorerView" class="eclipseTradeClient.ExplorerView" id="EclipseTradeClient.explorerView">

![図8 [Eclipse Trade Client]画面 図8 [Eclipse Trade Client]画面](http://cz-cdn.shoeisha.jp/static/images/article/528/16283.gif)
