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>
<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>

これで、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