slim3でgaeのflexアプリをつくった

とりあえず、つくらないと何も始まらないということで。

flexもslim3も初めてで、そもそもweb層の開発経験もほとんどなくいろいろはまりましたが、何とか一覧表示と登録ucだけ実装できました。

id:shot6さんが書いている、Adobe Flex 3 & AIRではじめるアプリケーション開発と、slim3のリポジトリにコミットされているslim3-blankプロジェクトを元ねたにしています。

アプリは、

 http://account-gae-slim3-flex.appspot.com/

で見れます。

ソースも、

 http://code.google.com/p/account-gae-slim3-flex/

でさらしてます。

きれいにつくろうとしたけど勝手があまりわからず、今のところ命名規則とかaction scriptのところはあまりきれいじゃないです。svnに入れたので、おいおいきれいにしていこうかと思います。


slim3の機能はまだほとんど使っていないと思うのですが、いくつか感想を。

appengine-web.xmlにslim3.controllerPackageを指定しておけば、その配下のurlをコントローラーに見立ててアクセスできるのは非常に直感的でした。

また、JDOControllerに永続処理のサポートメソッドが用意されているのも便利です。最初は、トランザクション内で呼び出される永続化サービスがあったほうがわかりやすいかと思ったのですが、gaeではjavaのエンティティがテーブル定義に相当するように永続処理がなされるため、https://www.hibernate.org/328.htmlのようなgeneric daoすら不要で、しかもunit of workが永続メソッドになっているため、コントローラから永続処理を切り出してサービス化する必然性もなく、簡潔な実装になっていると思います。


逆に、はまったのは、appengine-web.xmlのslim3.hotReloadingをfalseにしておかないと、永続処理の紺トラーに対する二回目のアクセス時に、CleanerがPMF.persistenceManagerFactoryをnullにしてしまい、persistenceManagerFactoryが複数生成されエラーとなってしまったこと(FrontController#doFilterInternal)。

多分これはちょっと古いソースのslim3を使ったからで、最新のものを使えば解決されているのだと思います。ただ、今時点のソースを見ても、hotReloadingをtrueにしていると、JDOControllerの実装クラスに複数回アクセスすると、同様の現象がおきる気がします。


とりあえず、開発環境のベースはできたので、複雑なエンティティの永続処理の検証をしようかと思います。

jpaでは、value object、継承のマッピング、idによる等値性、関連の定義、関連の走査あたりはかなり簡単にできていたので、まずはこのあたりから。