アプリケーションにSpring Remotingを追加する
前回の記事で構築したStockTradeServerプロジェクトに要求を送るために、EclipseリッチクライアントにSpringを追加します。
まず、Eclipseプラグイン/RCPアプリケーションを開発しているときにサードパーティライブラリを追加する場合は、別のプラグインを使う方法をお勧めします。こうすれば、プロジェクトを作成するたびにサードパーティのjarを追加する必要がなく、プラグイン/RCPプロジェクトとサードパーティライブラリのプロジェクトとの依存関係を作成するだけで済みます。最も、これは言うほど簡単なことではありません。Eclipseのクラスローダーに慣れていない場合は、こちらを参照してください。要するに、プラグインの依存関係の中でクラスが互いを検出できるようにするために、2つの追加手順を実行する必要があります。
- Eclipseで新しいプラグインプロジェクトを作成します。この新しいプロジェクトの名前を「SpringClient」として、次の値を設定します。
- spring-framework-1.2.8ディストリビューションを解凍すると、次のjarが入っています。これらのjarをすべて「SpringClient」ディレクトリのルートにコピーします。
- spring-aop.jar ―― 「dist」フォルダ
- spring-beans.jar ―― 「dist」フォルダ
- spring-context.jar ―― 「dist」フォルダ
- spring-core.jar ―― 「dist」フォルダ
- spring-remoting.jar ―― 「dist」フォルダ
- commons-logging.jar ―― 「lib\jakarta-commons」フォルダ
- log4j-1.2.13.jar ―― 「lib\log4j」フォルダ
- Eclipseのパッケージエクスプローラで、SpringClientを右クリックしてプロジェクトプロパティを開きます。[Java Build Path]を選択し、[Libraries]タブをクリックし、[Add JARs]ボタンで先ほど追加したjarをすべて追加します。これらのライブラリをエクスポートすることも確認します。[Order and Export]タブをクリックし、すべてのライブラリのチェックボックスをオンにします(図9を参照)。こうしておけば、SpringClientとのプロジェクト依存関係を作成したときに、Springのjarとログのjarも確実に利用できるようになります。最後に[OK]をクリックします。
- 次に、SpringClientのマニフェストに変更を加える必要があります。パッケージエクスプローラで、[SpringClient]-[META-INF]をクリックし、「MANIFEST.MF」を開きます。[Runtime]タブをクリックし、[Classpath]エリアで[Add]をクリックします。Springのjarとログのjarをすべて選択し、[OK]をクリックします。次に、[Exported Packages]セクションで[Add]をクリックします。エクスポート対象のパッケージをすべて選択し、[OK]をクリックします(図10を参照)。
- 次に、Springの構成ファイルを追加します。パッケージエクスプローラで、「src」ディレクトリに移動し、「applicationContext.xml」という新しいファイルを作成して、次の行を追加します。
- 簡潔にするため、stocktradeserverプロジェクトからSpringClientの「src」ディレクトリにクラスをコピーします。SpringClientの「src」ディレクトリの下にパッケージstephenlum.services.stockとstephenlum.services.stock.dtoを作成します。
- クラス
SpringClientPluginに、Springのアプリケーションコンテキストを読み込むコードを追加します。このコードはコンストラクタに追加します。新しいSpringClientPluginクラスは次のようになります。 - 最後に、プロジェクトEclipseTradeClientが新しいプラグインプロジェクトSpringClientに依存するように依存関係を追加します。プロジェクトEclipseTradeClientで、「plugin.xml」を開き、[Dependencies]タブをクリックします。[Required Plug-ins]セクションで、[Add]をクリックし、SpringClient (1.0.0)を選択して、[OK]をクリックします(図12を参照)。
ID = SpringClient Class = springClient.SpringClientPlugin
Eclipse-BuddyPolicy: registered

package springClient; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.access.BeanFactoryLocator; import org.springframework.beans.factory.access.BeanFactoryReference; import org.springframework.beans.factory.access.SingletonBeanFactoryLocator; /** * The main plugin class to be used in the desktop. */ public class SpringClientPlugin extends AbstractUIPlugin { private BeanFactory beanFactory; //The shared instance. private static SpringClientPlugin plugin; /** * The constructor. */ public SpringClientPlugin() { plugin = this; BeanFactoryLocator beanFactoryLocator = SingletonBeanFactoryLocator.getInstance(); BeanFactoryReference beanFactoryReference = beanFactoryLocator.useBeanFactory("ctx"); beanFactory = beanFactoryReference.getFactory(); } /** * This method is called upon plug-in activation */ public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ public void stop(BundleContext context) throws Exception { super.stop(context); plugin = null; } /** * Returns the shared instance. */ public static SpringClientPlugin getDefault() { return plugin; } /** * Returns an image descriptor for the image file at the given * plug-in relative path. * * @param path the path * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { return AbstractUIPlugin. imageDescriptorFromPlugin("SpringClient", path); } public BeanFactory getBeanFactory() { return beanFactory; } }

Eclipse-RegisterBuddy: SpringClient




