GAE/J(Google App Engine for Java) について

General Info

Scala/Lift

  • lift を GAE/J で動かすには、http://github.com/ymnk/liftweb/tree/master からソースコードを持ってきて自分で lift-webkit-*.jar, lift-util-*.jar をビルドして使えばok! 後は、deployして動かしてみて、Dashboardのログをみながら、ClassNotFound 等の Exception を片っ端からつぶしていく。
  • http://github.com/ymnk/liftweb/tree/master は、turnk の方に merge されたので、1.1-SNAPSHOT でいけるはず。後で解説を書く。 書いた → Your first Lift application on GAE/J
  • WEB-INF/appengine-web.xml に<sessions-enabled>true</sessions-enabled> を追加する。
  • リフレクションを使えないので、stractual subtyping がそのままでは使えない。キャストしてやれば大丈夫 いつの頃からか、自分で定義したクラスに対してはリフレクションが使えるようになったので、問題無し。
  • http://lift-example.appspot.com/: GAE/J 上で動いてる。 JDBCを使って、H2(H2 Database Engine 1.1.111)のmemモードで動いてる。
  • http://lift-example.appspot.com/jpademo/ は、JPA経由で datastore に対して読み書きしている。
  • 今のところ、 datanucleusenhancer は scalac で生成された class ファイルをうまく処理できない。Scalaから datastoreへアクセスする方法として...
  • WEB-INF/appengine-web.xml に<static-files><exclude path="/**" /></static-files> と書くと幸せになれる。
  • enhancer のクラスパスに scala-library.jar を追加しないと ClassNotFoundException が飛ぶ。
  • Entity クラスの primary key として、"Long id = _"と定義すると、bytecode では、"long id = 0L" となってしまう。"java.lang.Long id = _" と書かないといけない。
  • datanucleus の enhancer が、scala の getter、setter (例えば、var x:String=_ と定義したときの x()とx_$eq())を消すようなので、getX, setXを Entity class に定義してそれらをとおしてアクセスするようにする。
  • ブログなんだもよん - GAE の Low Level API を使う

Web Frameworks in Java

JRuby on Rails

Datastore

UrlFetch

Comments