GroovyがGoogle App Engine for Javaで動いた

Google App Engine は自前で用意したJARなどのライブラリも自由に組み込むことができるので、試しにこんなアプリを作ってみる。

  • JSR 223: Scripting for the Java Platformを使う。
  • スクリプト言語は、Groovyとしてみた。

Groovyは実は初めて使ってみる。

EclipseのGoogleプラグインを使うと、プロジェクトの作成、実行、配備が簡単にできる。
新規に「Web Application」プロジェクトを作成する。(ちなみに、Web Applicationプロジェクトっていう名前は一般的な名称過ぎる気がする。GAE Projectとかにすべきでは?)
今回は、Google Web Toolkitは使用しないのでチェックは外す。

war/WEB-INF/libフォルダに、Groovyのembeddableなjar(groovy-all-x.x.x.jar)をコピーする。これ一つで良いから楽です。
そしてこのJARファイルをプロジェクトのライブラリとして参照する。

ソースコードはこんな感じ。

public class MyAppServlet extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException {
    resp.setContentType("text/plain");

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("groovy");

    try {
      engine.eval("def add(x, y){x + y}; n = add(1, 2);");
      Object n = engine.get("n");
      resp.getWriter().print("n value = " + n);

    } catch (Exception e) {
      throw new ServletException(e);
    }
  }
}

GroovyのScriptEngineを作成して、足し算するスクリプトを実行してみた。evalの文字列がGroovyのスクリプト。

プロジェクトを右クリックして、「実行」-「Web Application」を選択すると、ローカルのWebサーバーが起動する。
http://localhost:8080/からローカルでの実行を確認することができる。

動作確認ができたら、Google App Engineのエンジンみたいなツールボタンから、App Engineに配備できる。
Google App Engineのアカウントはあらかじめ用意しておく。Javaを試すにはテストアカウントして先着10,000名のアカウントをゲットしておく必要がある。

とりあえず作成したGroovy on Google App Engine for java
http://civic-java.appspot.com/groovy
でも動かしたところをみても、なんにもおもしろくはありません。

Scriptingは対応すれば、GAE for Javaでいろんなスクリプト言語が動かせますね。JavaScriptでも試してみて動くのは確認しました。

Google App Engine for Javaがサポート開始

「今度はホントの話です」で始まった今回の発表は、「FORTRANをサポートした」というエイプリルフールのジョークにたいして選んだ言葉。

以前からの噂であったとおり、GAEでのJavaサポートとそのほかの機能追加についてテストサポートが開始されました。とりあえず、ひととおりの機能については、Google App Engineのドキュメント「Getting StartedのJava版」をみると英語の苦手な僕でもコードがたくさんあるので分りやすかったです。

ServletとJSPでWebアプリケーションを作れるのはとても魅力的。Javaをサーバで動かして公開となると、結構な金額を払わなければできなかっただけに、このプラットフォームはJava開発者に朗報です。

ちょっと興奮気味で、まだよく読み切れていないのですが、

  • Webコンテナ上で動くServletやJSPを作成可能(普通のJava Webアプリの作成と同様)
  • Python版にあるようなGoogle用API群(Memcache, URL Fetch, Mail, Images, Google Accounts)は同様にAPIとして提供。
  • Python版でのDataStoreみたいのは、JDOかJPAを使って利用可能。

sandboxとして、

  • ファイルシステムのアクセス禁止(Datastore使え)
  • ソケットの利用禁止(URLFetch使え)
  • サブプロセス起動やスレッド生成ダメ
  • カスタムクラスのローディングOK(JARライブラリ組込可)

とあり、Python版みたいに「フレームワークが提供され、その上で動くアプリを作る」のかと思いきや、生のServletのコードが使えるようです。(Java EEのWebコンテナというフレームワーク上で動くという意味では同じですが。)かなり自由度が高いと思います。

ファイルシステムアクセスはだめなので、テンプレートファイルを読み込むようなWebフレームワークはダメでしょう。ただクラスパス内においてリソースとして読み込むやり方ならOKです。
(Wicketはキャッシュみたいなの作ったと思うからダメ?Strutsならいける?だめかstruts-config.xmlが読めない…

※2009/04/09追記:struts-configなどの設定リソースファイルは読み込みだけなので、appengine-web.xmlに記述を加えれば使えました。struts(1.x系)もexample程度ならば動作確認できました。

ログ出力はファイルIOがだめなんですが、java.util.loggingを使っているんであればGAE管理下でログ出力可能。

そのほかに、Eclipseのプラグインが用意されていて、プロジェクトの作成や起動を支援してくれる。あとJava版とは関係ないかもしれないが、cronの仕組みも提供されていて定期実行なども実装可能。cron機能も自前サーバーじゃないとなかなか連続した設定はできなかったので、bot作成などに

サーバサイドのエンタープライズ向けだとJavaがよく使われていますが、そういうのをGAEに乗っけるってのもすぐ出きそう。加えてされをSaaS的に提供するのも増えてきそう。

Eclipseプラグインは、ダウンロードに出遅れたせいか、なかなかダウンロード出来なかった。なんどかキャンセルしてやり直して、なんとかダウンロードできました。

aspire oneの3cellバッテリーが格安!!

最近、Amazonみてて気づいたんですが、aspire one用の3セルバッテリーが異常に安いです。

もともとaspire oneのバッテリーは純正でも安い方なのですが、77%OFFでなんと¥1,283(4/6現在)で売っています!!(マーケットプレイスでの価格なので送料等が掛かります)

私は以前に6セルバッテリーを購入しましたが、最近は少しでも軽量にと3セルバッテリーで持ち歩くことも多いです。この値段は電池買うみたいな値段なので絶対に買いです。3セルバッテリーの2本持ちというのもありだと思います。

なんでこんなに安いんでしょう?新型のaspire oneが発表されたから、互換性のないパーツの在庫をさばいているのでしょうか?とは言ってもバッテリーは古くなってもある程度需要のある商品だと思うのですが。

acer Aspireoneシリーズ3cellバッテリーブラック
acer Aspireoneシリーズ3cellバッテリーブラック
格安で購入できます!!

acer Aspireoneシリーズ3cellバッテリーホワイト
acer Aspireoneシリーズ3cellバッテリーホワイト
格安で購入できます!!