Hatena::ブログ(Diary)

yvsu pron. yas このページをアンテナに追加 RSSフィード

2009-04-11

Slim3 for Google App Engine/Java

Slim3GAE/Jに対応させました。

デモサイトはこちら。

http://higayasuo.appspot.com/

ソースコードをチェックアウトしたい場合はこちら。

http://code.google.com/p/slim3/source/checkout

https://slim3.googlecode.com/svn/を指定してチェックアウトできます。デモ用のプロジェクトは、slim3-demoです。


SAStrutsチュートリアルをやったことのある人なら、デモサイトが、そっくりだということがわかるでしょう。Slim3 Struts(SAStruts相当)がGAE/Jで動くわけです。

素のStrutsだとGAEではファイルアップロードに失敗しますが、Slim3 Strutsはその辺も対応してます。


やってみて感じたのは、GAE/Jは、制限が結構厳しいので、高度なフレームワークであればあるほど動作しないんじゃないかな。また、ローカルの開発サーバで動いても、クラウド上では動かなかったりすることも多いので、複雑なフレームワークは、嵌りやすいと思います。

クラウド上でうまく動かないときは、原因を追究するのがかなり難しいので、複雑なフレームワークは避けたほうが無難です。

Slim3では、DIとAOPも削りました。せっかく高速な実装ができたんだけど。嵌りがちな機能は基本的に避け、べたに実装したほうがいいと思います。


きつかったのは、Thread#setContextClassLoader()が使えないこと。Slim3お得意のHOT deployが使えません。最新のSlim3では、アクションクラスのみHOT deployが使えるようになっています。このほうが、ClassCastExceptionなどが発生することがなく、わかりやすくて嵌りにくいかなと思っています。

ローカルの開発サーバでも、DEBUGモードで立ち上げれば、HOT deployっぽいことができますが、あれは、Java Platform Debugger Architecture (JPDA) を多分使っていて、HOT deployできるのは、かなり限定的な操作だけなので、HOT deployになるときとならないときの判断が難しく、嵌りやすいと思います。


データアクセスは、BigTableを使うので、これまでのO/R Mapperは役に立たないし、そもそもRDBMSと同じ考えを持ち込むと失敗します。クラウド上のモデリングはこれまでとまったく違うものです。


これから、JDOを使った、タイプセーフな流れるようなインターフェースを使うデータアクセスフレームワークを作る予定。SQLファイルはもちろんなし。BigTable用のJDOは、複雑なことができないので、すべてタイプセーフな流れるようなインターフェースで実装することができます。

こんな感じかな。

EmployeeMeta e = new EmployeeMeta();
List<Employee> list = JDO.from(Employee.class)
                         .where(e.id.eq(1), e.name.contains("A"))
                         .orderBy(e.id.asc, e.name.desc)
                         .getResultList();


Employee emp = new Employee();
emp.setName("Hoge");
JDO.makePersistenceWithTransaction(emp);
JDO.deletePersistenceWithTransaction(emp);


JDO.transaction(new TransactionCallback<Void>() {
    ...
});

BigTableは、スキーマがないので、エンティティクラスドメインの中心になります。ビジネスロジックは、エンティティに書いたほうがいいでしょうね。

基本は、アクションとエンティティで、アクションからJDOを直に呼ぶのでDIはもう必要ないのです。

エンティティのメタクラスは、antもしくはEclipseプラグイン自動生成する予定です。JDOenhancerと同じ感じかなと思っています。


クラウドバズワードで俺には関係ないと思っていたけど、GAE/Jが出た以上先頭を走らないとね。

GAE/Jは、破壊的な技術になる可能性があります。クラウド上の勢力図は、これまでとまったく違うものになるでしょう。


Slim3プロジェクトGoogle Code上に作ってみたのは、GAE用のプロジェクトなので、そのほうが自然かなと思ったからです。別にSlim3Seasar foundationから抜けるわけではないので、心配なく。


追記:今回のSlim3 for GAE/Jは、Slim3の本流です。Slim3が出て、Seasar2ユーザが迷うのはできるだけ避けたかったので、クラウドSlim3、これまでのような開発はSeasar2という使い分けでいいのではないかと思っています。

たまたまですが、うまく使い分けできる形になりましたね。

一応、Slim3 Strutsは、GAE/Jに依存しているわけではないので、通常のStrutsの開発にも使うことはできます。「SAStrutsは使いたいんだけどDIとかはちょっとかんべん」とか思っていた人には向いてますね。

なまえなまえ 2009/04/12 05:30 今回のGAEに対応させたSlim3は、本流のSlim3ですか?それとも派生のSlim3 for GAEのような扱いになりますか?
個人的にはGAEに対応いただいたことは大変うれしいです。
Bigtableアクセス対応も楽しみにしています。がんばってください。

syttrusyttru 2009/04/12 14:05 ちょうど昨晩、GAEでsa-strutsのチュートリアルを動かそうとしていて、Thread#setContextClassLoader()ができない制限にぶつかっていました。
slim3-demo試してみたいと思います。ありがとうございました。

なまえなまえ 2009/04/12 17:30 > SAStrutsは使いたいんだけどDIとかはちょっとかんべん
この部分ですが、個人的には、SAStrutsはDIとかAOPを気にしなくても、SAStrutsの機能だけでも十分使えるもので、より深く使うときに、Seasar2の部分(DIやAOP)も触ることができますよ、という感じと認識していましたが、SAStrutsを使うのに、DIやAOPの知識は必須というものでしょうか?

higayasuohigayasuo 2009/04/12 21:47 なまえさん

SAStrutsは、DIやAOPを知らなくても使えますが、
プロジェクトの誰か(アーキテクトみたいな人)は、
ちゃんと知っている必要があると思います。

なまえなまえ 2009/04/13 06:26 Slim3とS2JDBCが使えると、S3BigTable(仮称)との使い分けで、データソースが抽象化できて、いいと思います。あと、DIとかは勘弁レベルの人がStruts++的に使うにも、利用用途が増えると思います。S3JDBC(仮称)がでるのかな?

なまえなまえ 2009/04/13 06:54 slim3の下記の箇所で、Google App Engine's Javaでサポートされていないと表示されます。
org.slim3.commons.config.Configuration.java
189:Entry (java.util.Map.Entry)
org.slim3.struts.S3StrutsGlobals.java
52:SizeLimitExceedException
org.slim3.struts.util.UploadUtil.java
81:FileOutPutStream
App Engin SDK 1.2.0はEclipseからインストールしました。

higayasuohigayasuo 2009/04/13 15:30 なまえさん

報告ありがとうございます。
修正しました。

newtanewta 2009/04/29 22:28 https://slim3.googlecode.com/svn/
となってますが
httpsではアクセスできませんでした。
httpで行けました。
Googleのcheckoutの説明もhttpになってました。

自分が調べるのが遅かったので変わったのかも知れませんが、、。

西城西城 2009/06/03 13:44 Slim3は、元々Slim3 Struts + Slim3 JDBC + Slim3 Container + Springのアーキテクチャになっていると思いますが、GAEに対応させると、根本的に、アーキテクチャが変わったでしょうか。特に、DIコンテナは、まだSpringを利用するでしょうか。

宗十郎宗十郎 2010/05/19 10:53 5月18日のCCCでの講演を聞かせていただきました。
実際にコーディング・テストを見せていただいたので、とてもわかりやすく、
面白かったです。ワクワクしました。
App Engine、触ってみようと思います。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証