DotCloud + SAStruts+ MySQL (2)

2011.09.13

こんにちは。おおたき2号です。

前回のDotCloud続きです。

前回はDotCloudの設定とHTMLページを表示するまでを書きましたので、 今回はJavaの設定について記述します。

DotCouldのJavaのバージョンは1.6.0.24です。 また、アプリケーションサーバはJettyが使われています。
JettyはGoogle App Engineでも採用されていてWebSocketなどのプロトコルもサポートしています。
しかしDotCould上のJettyのバージョンは6.1.22と少し古いバージョンになっていてWebSocketは未対応になっています(WebSocketの対応はバージョン7から)
またバージョン7からはEclipseプロジェクトになっています。早くバージョンがあがってほしいところです。

ここではEclipseはバージョン3.6.2を使用します(Eclipse及びJavaの設定は省略します)
ではまず、Eclipse上でJettyとSAStrutsを動かすためのプラグインの設定をしたいと思います。

Eclipseのメニュー、「ヘルプ」->「新規ソフトウェアをインストール」を選択します。
操作対象に「http://www.webtide.com/eclipse」と入力します。
「Jetty Server Adaptor」を選択し「次へ」をクリックして、使用条件条項に同意し、インストールします。

次に、SAStrutsのプラグインをインストールします。
Jettyプラグイン同様に「新規ソフトウェアをインストール」から操作対象に「http://eclipse.seasar.org/updates/3.3/」を入力します。
「Dolteng」及び「Kijimuna」を選択し「次へ」をクリックして、使用条件条項に同意し、インストールします。

これで、Eclipseのプラグイン設定は終わりです。
次にJettyをダウンロードします。 こちらから「jetty-6.1.22.zip」ダウンロードしてください。
ダウンロードしたら適当な場所に解凍してください。ここでは「c:\jetty6」に解凍したもとして進めます。
続いて、Eclipseから「ファイル」->「新規」->「その他」から「Dolteng」を選択して「次へ」をクリックします。

プロジェクト名、ルートパッケージ名を入力します。ここではどちらも「cm」としています。
プロジェクト・ファセット設定から以下を設定します。

  • 表示:「SAStruts」
  • 永続化:「S2JDBC」
  • サーバー管理:「WTP(Servlet 2.5)」

「完了」をクリックします。これでSAStrutsのプロジェクトが作成されます。
続いて、Jettyと連携できるようにします。

「ファイル」->「新規」->「その他」から「サーバー」を選択して「次へ」をクリックします。
サーバー一覧から「Jetty 6」を選択して「次へ」をクリックします。

インストールしてあるJRE(JDK)を選択します。
Jettyホームに先ほど解凍したJetty設定し、「次へ」をクリックします。

「次へ」をクリックします。

先ほど作成したプロジェクトを選択して「追加」ボタンをクリックし、構成済みに移動させたら「完了」ボタンをクリックします。

これでJettyとの連携は完了です。
Eclipseの「サーバー」タブからJettyを選択し、右クリックから「開始」を選択すればサーバーが起動します。
(「サーバー」タブが表示されていない場合はメニューの「ウィンドウ->「ビューの表示」->「その他」から「サーバー」を選択してください」)

これで、ブラウザにアクセスをすると「Hello World!」が表示されます。
しかし、NullPointerExceptionが発生してしまいます。
これはSAStrutsのRequestDumpFilterを呼び出しているときに発生しています。
どうやらJettyのバグ( ※1)なようなので、ここではRequestDumpFilterの機能を使わないようにします。
(RequestDumpFilterとはHTTP リクエストを処理する前後で HttpServletRequest の内容をログ出力するためのフィルターです)
そこでweb.xmlに記述してある以下をコメントアウトします。

<filter>
        <filter-name>requestDumpFilter</filter-name>
        <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
    </filter&g
<filter-mapping>
        <filter-name>requestDumpFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping&g

これで、Jettyを再起動して確認してみてください。エラーが発生しなくなっているかと思います。

ではJavaプロジェクトをDotCloud上にアップしてみたいと思います。
DotCloudにJavaプロジェクトをアップするのはwarファイルにする必要があります。
今回作成した、プロジェクトを選択し、右クリックから「エクスポート」クリックします。
「Web」フォルダからWARファイルを選択し、「次へ」ボタンをクリックします。

「Webプロジェクト」を選択し、「宛先」に前回作成した「dotcloud.yml」があるフォルダ指定し、完了ボタンをクリックします。

前回作成した「dotcloud.yml」を以下のように修正します。

www:
 type: java


Cygwinを起動します。
DotCould上にアップする方法は前回のhtmlファイルと同様になります。
しかし同じアプリケーション名で別種類のアプリケーションが登録されている場合、登録しようとするとエラーになっています。
その場合は、別のアプリケーションを新規で作成するか、一度削除してから登録します。
ちなみに無料版のDotCouldではアプリケーションは2つまでしか登録できません。
ここでは前回作成したアプリケーションを削除してから登録します。

「dotcloud destroy cmapp」と入力します。
削除するか聞かれるので、「y」と入力します。これでアプリケーションは削除されました。

次に、アプリケーションを登録します。
「dotcloud push cmapp app」と入力します。

これで今回作成したJavaのプロジェクトがDotCloudに登録されました。
URLは前回登録したhtmlと同じになりますが、JavaアプリケーションなのでURL+コンテキスト名でアクセスします。
コンテキスト名はアップロードしたwarファイル名になります。

次回はMYSQLの設定をしたいと思います。

[参考サイト]
※1  Apache Mailing list