SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

シッククライアントを配備するためのJavaアプリケーションサーバー基盤の構築

SpringとRMIを使用してサービスを公開する

  • このエントリーをはてなブックマークに追加

最近の流行と言えば、Web 2.0、リッチインターネットアプリケーション、そして大量のJavaScriptコードです。しかし、従来のJ2EE/Webアプリケーションサーバーアーキテクチャを使って実際のシッククライアントを簡単に配備できるのに、なぜわざわざシッククライアントの外観と動作を真似たWebアプリケーションを作成するのでしょうか。

  • このエントリーをはてなブックマークに追加

はじめに

 インターネットとその相棒のWebブラウザが世の中に与えた影響の大きさは、誰もが認めるところです。もし、読者の皆さんが私と同類ならば、Webブラウザを通じてニュースやスポーツの速報をチェックしたり、NASDAQの株価が下落した翌日に自分のポートフォリオの値をチェックしたりしていることでしょう。しかし、WebアプリケーションはHTTPに依存しているため、さまざまな制限があります。ご存知のように、Webアプリケーションの世界ではHTTP Webクライアントの弱点が広く認識されており、この弱点を補うために、"Web 2.0"アプリケーション、リッチインターネットアプリケーション(RIA)、AJAX、Lazlo、Flexなどの技術が考案されています。

 これらの技術はすべて、Webブラウザというシンクライアント(thin-client)をシッククライアント(thick-client)に見せようとするものです。しかし、私の考えでは、フォルクスワーゲンの色や形状を変えてポルシェのような外観にしても、実際にポルシェのように走ることは決してできません。私は、Webクライアントとデスクトップアプリケーションの戦いを始めるつもりは毛頭ありません。それぞれに目的があると考えています。しかし、Dojo、script.aculo.us、AJAX、Prototypeなどを使った開発作業に多くの時間を費やした結果、Web 2.0の機能の多くは、HTTPの制限的な要求/応答パラダイムを回避して、最終的には、本来の意図を超えた処理をHTTPに実行させようとする試みにすぎないと感じています。

 いつの日か、機能豊富なWeb 2.0アプリケーションのダウンロードサイズが、Java Web Startを通じて配備される充実したデスクトップアプリケーションのダウンロードサイズに迫るような状況になったとしても、私はまったく驚きません。そのことを念頭に置いた上で、今回は、従来のJ2EE/Webアプリケーションサーバーアーキテクチャを利用して、エンドユーザーのためのシッククライアントを作成することを提案します。このチュートリアルでは、シッククライアントの株式取引アプリケーションを作成および配備しながら、概要を説明していきます。

必要な環境

  • Eclipse 3.1.2
  • J2EE準拠のWebサーバー(Tomcat、Resin、Jettyなど)
  • MyEclipse 4.1.1
  • Java 5(およびその実用的な知識)
  • サーブレットコンテナまたはJ2EEサーバー(このチュートリアルではTomcat 5.5+を使用)
  • Spring 1.2+(およびその実用的な知識)

インストール

 実際の開発作業に入る前に、次の手順を実行して、JREではなくJDKを使用していることを確認します。

  1. [Window]-[Preferences]をクリックし、[Java]ノードを展開して、[Installed JRE]をクリックします。
  2. [Add]をクリックし、[Browse]をクリックして[JRE Home Directory]を参照します。JAVA_HOMEディレクトリに移動し、[OK]をクリックします。
  3. [JRE Name]に「JDK」と入力し、[OK]をクリックします。[JDK]の横にチェックマークがあることを確認し、[OK]をクリックして(図1を参照)、[Windows]-[Preferences]を終了します。
  4. 図1 JREではなくJDKを使用していることを確認する
    図1 JREではなくJDKを使用していることを確認する

Tomcatのインストール

 このチュートリアルでは、本稿執筆時点での最新リリースであるTomcat 5.5.17を使用します。Tomcat内でRMIも使用するため、Tomcatのインストール先は、空白を含まないパスにする必要があります。つまり、「C:\Program Files\Apache Software Foundation」などは不適切です。空白を含まないディレクトリにTomcatをインストールしない限り、Tomcat上でRMI Serverを動かすことはできません(実際のASF Bugzillaバグについては、こちらを参照してください。Apacheは受付を締め切っており、修正の予定はありません)。今回の例では、「C:\devtools\java\apache-tomcat-5.5.17」にTomcatをインストールしました。

 このチュートリアルのいずれかの部分を実行して、次のような例外が発生する場合は、RMI部分を削除する(または起動しない)か、Tomcatのインストール先を、空白を含まないディレクトリに変更します。

java.rmi.ServerException: RemoteException occurred in server thread;
 nested exception is:
            java.rmi.UnmarshalException: error unmarshalling
 arguments; nested exception is:
            java.net.MalformedURLException: no protocol: Files/Apache
... ... ...
Caused by: java.net.MalformedURLException: no protocol: Files/Apache
            at java.net.URL.(URL.java:567)
... ... ...

Springの取得

 Spring Frameworkをまだインストールしていない場合は、これをダウンロードします。今回は、執筆時点の最新の安定版リリースである1.2.8を選択しました。ダウンロードする場合は、必要となるいくつかのサードパーティライブラリが含まれている「Spring Framework with dependencies」のダウンロードをお勧めします。また、リソースとして、ソースとjavadocもダウンロードしてください。ダウンローが終了したら、ダウンロードファイルを解凍します。

 準備がすべて完了しました。いよいよこれからが本番です。

Webアプリケーション/サーバーサイドプロジェクトの作成

 まず、EclipseでJavaプロジェクトを作成します。

  1. [File]-[New]-[Project]をクリックします。Javaプロジェクトを選択し、[Next]をクリックします。
  2. New Projectウィザードが表示されます。[MyEclipse]-[J2EE Projects]の[Web Project]をクリックし(図2を参照)、[Next]をクリックします。
  3. 図2 新しいWebプロジェクト
    図2 新しいWebプロジェクト
  4. プロジェクト名として「stocktraderserver」と入力します(図3を参照)。今回は、場所として、「C:\dev\Devx\EclipseRcpSpringRemoting\StockTraderServer」を選択しました。[Finish]をクリックします。
  5. 図3 新しいプロジェクト名
    図3 新しいプロジェクト名

サードパーティライブラリの追加

 サードパーティライブラリをいくつか追加します。

  1. 解凍されたspring-framework-1.2.8ディストリビューションには、次のjarが含まれています。
    • Table 1 …… クラスパスに追加するサードパーティの外部jar
    • spring.jar …… 「dist」フォルダにあるjar
    • commons-logging.jar …… 「lib\jakarta-commons」フォルダにあるjar
    • log4j-1.2.13.jar …… 「lib\log4j」フォルダにあるjar
    これらをすべて、「WEB-INF/lib」ディレクトリにコピーします。
  2. Eclipseのパッケージエクスプローラで、[StockTradeServer]プロジェクトを右クリックします。
  3. プロパティを選択し、[Java Build Path]をクリックします。
  4. [Libraries]タブをクリックします。
  5. [Add JARs...]をクリックし、コピーしたjarを追加します。また、[Add External JARS...]をクリックし、spring dependencies 1.2.8を解凍してできたフォルダを参照して、「lib/junit」ディレクトリにある「junit.jar」を追加します(図4を参照)。
  6. 図4 Javaビルドパス
    図4 Javaビルドパス

StockTraderServerへのSpringの追加

 Spring Frameworkをプロジェクトに組み込みます。そのためには、MyEclipseプラグインを使用するのが最も簡単です。

  1. Eclipseメニューの[MyEclipse]-[Add Spring Capabilities...]をクリックします。
  2. ウィザードが表示されたら、[MyEclipse Libraries]チェックボックスと[Spring core]チェックボックスを両方ともオフにして、[Next]をクリックします(図5を参照)。
  3. 図5 Spring機能の追加
    図5 Spring機能の追加
メモ
 [MyEclipse Libraries]チェックボックスをオフにするのは、クラスパスに「spring.jar」が既に追加されているためです。あるいは、MyEclipseオプションを使用して「spring.jar」を追加することもできます。ただし、MyEclipseオプションを使用する方法の場合は、既定で不要なjarも数多く追加されるため、今回はこの方法を使用しませんでした。このような余分なjarを既定のMyEclipse設定から削除するには、[Window]-[Preferences]-[MyEclipse]-[Project Capabilities]-[Spring]をクリックします。
  1. 新しいSpring Bean設定ファイルを作成し、[Browse]ボタンを使用して、WEB-INFディレクトリに「applicationContext.xml」を作成します。終了したら、[Finish]をクリックします。
  2. パッケージエクスプローラに「S」の記号が表示され、Springが追加されたことが示されます(図6を参照)。
  3. 図6 Springの追加
    図6 Springの追加
  4. 残念ながら、SpringのDispatcherServletはWebプロジェクトに追加されていません。そこで、次の操作を実行します。
  5. 「web.xml」を開きます。このファイルは、パッケージエクスプローラで[WebRoot]-[WEB-INF]を展開すると見つかります。「web.xml」に次の内容を追加します。
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
    
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
    
        <servlet>
            <servlet-name>springDispatcher</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>springDispatcher</servlet-name>
            <url-pattern>/service/*</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
  6. 次に、SpringのWebApplicationContextを作成します。Springでは、そのためのルールが明確に定義されており、WEB-INFディレクトリに新しいxmlファイルを作成する必要があります。この新しいファイルの名前は、「web.xml」内の<servlet-name>タグで囲まれたテキストに「servlet.xml」を付加したものにしなければなりません。
  7. 今回の例では、<servlet-name>タグで囲まれたサーブレット名/テキストは「springDispatcher」であるため、WEB-INFディレクトリの下に「springDispatcher-servlet.xml」という名前の新しいファイルを追加することになります(図7を参照)。
    図7 プロジェクトへの「springDispatcher-servlet.xml」の追加
    図7 プロジェクトへの「springDispatcher-servlet.xml」の追加
    次に「springDispatcher-servlet.xml」を開き、以下を入力します。これは、SpringApplicationContextの基本のXMLテンプレートです。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     "http://www.springframework.org/dtd/spring-beans.dtd">
    
    <beans>
    
    </beans>
    
  8. 「springDispatcher-servlet.xml」をMyEclipseプラグインに追加します。パッケージエクスプローラで、[stocktradeserver]プロジェクトノードを右クリックします。左側で、[MyEclipse-Spring]を選択します。[Add...]をクリックし、「springDispatcher-servlet.xml」にナビゲートして選択し、[OK]をクリックします。再び[OK]をクリックして[Properties]ウィンドウを閉じます(図8を参照)。
  9. 図8 MyEclipse-Springへの「springDispatcher-servlet.xml」の追加
    図8 MyEclipse-Springへの「springDispatcher-servlet.xml」の追加

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
StockTradeServerへのコードの追加

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Stephen Lum(Stephen Lum)

ロンドンの投資銀行の上級開発者。Javaのプログラミング経験は7年に及ぶ。SunのJavaプログラマ認定資格とOracleの開発者認定資格のほか、CPAの資格を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/474 2007/01/15 19:21

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング