January 4, 2009

Google App EngineのJava版「Stax」を触ってみました

Amazon EC2上で提供されるJava版PaaSサービス「Stax」をちょっと触ってみました。今のところはβサービスで、まだ実装されていない機能もあったりしますが無料で試すことができます。
「Google App EngineのJava版」としてニュース記事等でも紹介されています。

Java対応のGoogle App Engineとも言うべき「Stax Networks」ローンチ
http://jp.techcrunch.com/archives/20081216stax-networks-launches-google-app-engine-for-java/


用意されている環境

  • Apache Tomcat/6.0.16
  • MySQL/5.0.51

要するにServlet2.5/JSP2.1環境を使えるってことですね。JVMはJavaSE5相当のようです。
GoogleもSalesforce.comも、Servletコンテナにはより軽いResineを採用していますが、ここはTomcatですね。


サポートするフレームワーク
  • Apache Struts(ただし、1.xではなく2.0.11)
  • Apache Wicket
  • Adobe Flex/BlazeDS
  • Google Web Tool Kit
  • Adobe ColdFusion 8
  • JRuby on Rails
とかドキュメントには書いてありますが、アプリケーションの初期作成時のテンプレートとして、デフォルトで必要なライブラリを入れてくれて、最低限の設定済みのxmlファイル類を入れてくれるってだけです。
逆に、WEB-INF/libにライブラリをつっこんで、web.xmlを編集して、WEB-INFに必要な設定ファイルを追加すれば他のフレームワークも使えます。DI/AOPコンテナもORマッピングフレームワークも使えます。
Struts1.3.8/Spring2.5.6/iBATIS2.3.4とか、JSF1.2RI/Spring2.5.6/Hibernate3.3.1とか、試してみたら動きました。この分ならSeasar2を使ったアプリも問題なく動作するでしょう。


アカウントの作成
StaxのWebサイト http://www.stax.net/ へ行きます。



「Apply for the Beta」をクリックしてサインアップ画面へ行き、メールアドレスを入力して送信すると認証メールが送られてくるので、そこに書いてあるURLにアクセスするとサインアップ終了です。簡単です。



改めてStaxのWebサイトからログインするとアプリケーション管理画面に入れます。



管理画面では、TomcatのログやApacheのアクセスログ等の参照、アプリケーションの作成・DBの作成・設定・パフォーマンスやアクセス監視モニタの参照等を利用できます。




アプリケーションの作成
管理画面左側メニューの「Create App」をクリックすると、アプリケーションを作成できます。ユニークな名前を付けましょう。Application Core Runtimeからフレームワークを選べますが、前述の通り、Servlet2.5/JSP2.1環境で動作するものなら好きなモノを使えます。用意されているもの以外のフレームワークを使うのなら「Basic Servlet and JSP」を選択してもかまいません。



Stax SDK http://stax-downloads.s3.amazonaws.com/sdk/stax-sdk-0.2.12-dist.zip をダウンロードして解凍しておきます。
http://www.stax.net/appconsole/createapp から、任意の名前のアプリケーションを作成します。
解凍したディレクトリ中の「Stax Console」ショートカットを起動します。
コマンドラインコンソールが起動するので、そこから
stax getapp -a [ユーザ名]/[アプリ名] -u [ユーザ名] -p [パスワード]
を実行すると、アプリケーションのひな形がダウンロードされます。このひな形はEclipseプロジェクトになっているので、そのままEclipseへインポート可能です。でもこのプロジェクトはWTP互換じゃないのが残念です。


アプリケーションの構造
  • webapp: JavaEE Webアプリケーションディレクトリ
  • src: Java ソースファイルディレクトリ
  • conf/stax-application.xml: Stax デプロイメントディスクリプタ
webappディレクトリの中は通常のServletアプリと同じなので、WEB-INF/libに好きなライブラリを入れたり、WEB-INF/web.xmlを編集したり、設定ファイルやTLDを追加したり、自由にできます。


DBの作成
管理画面左側メニューの「Create DB」をクリックすると、アプリケーションを作成できます。任意のDB名、ユーザー名、パスワードを設定します。



DB作成後、テーブルやら何やらを作成するには、なんとTCP:3306が開いているのでMySQL Query Browser や mysql コマンドが使えます(^^;(←いいのか?)
アプリケーションのconfディレクトリにあるstax-application.xmlに、下記の設定を追記します。

<resource name="jdbc/db01" auth="Container" type="javax.sql.DataSource">
<param name="username" value="[ユーザ名]" />
<param name="password" value="[パスワード]" />
<param name="url" value="jdbc:stax://[DB名]" />
</resource>

Javaアプリケーションからは、JNDI参照名「java:comp/env/jdbc/[DB名]」でLookupできます。


アプリケーションのデプロイと動作確認
コマンドラインから
stax deploy -a [ユーザ名]/[アプリ名] -u [ユーザ名] -p [パスワード]
とすると、作成したアプリケーションをアップロードできます。
Antを使ってWARファイルからのデプロイも可能です。WARファイルをそのままアップロードできるUIがあればいいのに。。。

次のURLからアプリケーションの動作を確認できます。
http://[アプリ名].[ユーザ名].staxapps.net/

何度アップロード/デプロイし直しても反映されるので、クラスローダはカスタマイズしていじっているっぽいですね。Tomcatのデフォルトのリロード機能ではヒープメモリがすぐに破綻しますから。

[追記]
サーバのログを見るとTomcatまんま再起動しているっぽいです。


一度デプロイしたアプリケーションは削除できません(^^;削除機能はまだ未実装のようです。


ちょっと触った所感
Tomcat/MySQL/Eclipse環境に慣れた人ならすぐに開発できるのが良いですね。フレームワークもお仕着せのものだけでなく好きなものを選べますし、使い慣れたRDBがそのまま使えます。Python/Django/webappsにどうしてもなじめず、Google App Engineを放り出してしまった私には嬉しいポイントです。
懸念としては、サーバの信頼性・可用性・セキュリティと正式サービス開始後の料金体系です。まあ、これはすべてのクラウドサービスに言われていることですが。Amazon E2Cを利用しているのでこのレベルではある程度の信頼性はありますが、その上で動作しているアプリケーションサーバレベルではStaxの技術力・資金力・信頼性が問われるところでしょう。

Amazon EC2上に構築されたってのが、次世代のビジネスモデルを予感させます。自前のデータセンターを持たずにSaaS/PaaS事業を展開するという例はこれからも増える可能性がありますね。

September 10, 2008

Tomcat 5.5.27 リリース

http://mail-archives.apache.org/mod_mbox/www-announce/200809.mbox/<48C56449.4050408@apache.org>

変更点は下記を参照。
http://tomcat.apache.org/tomcat-5.5-doc/changelog.html

Jasperのクォーテーションに対する挙動の変更は 6.0.18 と同様。システムプロパティ org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING で以前のバージョンと同じ動作にするかどうかを設定できる点も 6.0.18 と同様ですね。

あとは、CATALINA_HOME に設定したパスにスペースが含まれている場合に対応したことや、Session.getAttribute(null) および Session.removeAttribute(null) で NullPointerException が発生しないようにしたこと(これは仕様では明確になっていないが、Tomcat5.0以来のルールだそうです)等。

August 8, 2008

Tomcat 6.0.18 重大な変更

2008年7月31日にリリースされた Apache Tomcat の最新バージョン 6.0.18 ですが、JSP の処理系である Jasper にこんな変更が。

Changelog
にこのような記載があります。

45015: You can't use an unescaped quote if you quote the value with that character.

これにより、カスタムタグの属性値に Runtime Expression を埋め込んだ際に、式の中に "" を記述する場合はエスケープが必要になりました。

つまり、従来は

<t:tag value="<%= request.getAttribute("name")%>" />

とか書けたのに、

<t:tag value="<%= request.getAttribute(\"name\")%>" />

と書かなくてはならない状況になってしまったのです。

今まで動作していたのに、Tomcat のバージョンを上げたら動かなくなるアプリケーションも少なくないでしょう。


Tomcat 開発プロジェクトは、たまーに、こういうことをしますね。
現実論・実用性よりも、下位互換性を崩してでも理想論・あくまで仕様としての正しさを追い求めるというか。

setCharacterEncoding() の時もそうでした。

商用のアプリケーションサーバ製品ではこのようなことはしないでしょう。


内部的に Tomcat や Tomcat と同じ実装を使う JBoss や Glassfish も、次回以降のバージョンは要注意ですね。


追記:
動いていた方がオカシイという声もいただきますが、それは正論ふりかざしているだけです。今まで動いていたものが動かなくなるのは、現場をあまりに無視した行為です。setCharacterEncoding()の時もそれで大ブーイングだったわけで。

さらに追記:
システムプロパティ org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING で挙動を元に戻す設定ができるようになっているとのことです。(takayoshiさんよりコメント欄にて情報をいただきました。ありがとうございます)
setCharacterEncoding()の時もそうでしたが、Reference Implementationにも使われる実装ということで仕様に忠実でなければという立場と、現場でも利用されることを意識しなければならない立場の板挟み感が伝わってきます(笑)

August 1, 2008

Tomcat6.0.18リリース

6.0.16からの変更点はほとんどバグフィックスのみと言っていいでしょう。

Changelog
http://tomcat.apache.org/tomcat-6.0-doc/changelog.html

Download
http://tomcat.apache.org/download-60.cgi

February 9, 2008

Tomcat5.5.26 & Tomcat6.0.16

相次いでリリースされました。

http://tomcat.apache.org/

どちらも、バグフィックスと依存ライブラリや
同梱するEclipse JDT コンパイラのバージョンアップが中心です。