N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

ScalaからGAE/Jのデータストアを使う

2009-06-02 07:33:09 | その他
一旦途切れるとひどく長いこと中断してしまうのは、自分の悪い癖です。

別に忙しくもなかったし、書きたいこともあったのですが。。

というわけで、最近は Scala! Scala! と連呼している訳です。

一応 GAE/Jにも興味があるので、ScalaをGAE/J上で動かしてみているのですが、
ScalaのクラスをJDO経由で永続化できるようにするには、若干コツがいったので、それをメモします。

データクラスの定義は以下のようになりました。
package diet.entity
import javax.jdo.annotations.IdentityType
import javax.jdo.annotations.IdGeneratorStrategy
import javax.jdo.annotations.PersistenceCapable
import javax.jdo.annotations.PrimaryKey
import javax.jdo.annotations.Persistent

@PersistenceCapable {val identityType = IdentityType.APPLICATION}
class User(
  @Persistent
  var name: String
) {
  @PrimaryKey
  @Persistent {val valueStrategy = IdGeneratorStrategy.IDENTITY}
  var id: java.lang.Long = null
}



"id"をコンストラクタの引数にしていない理由は、プライマリキーの列に明示的に値を
指定したらAppEngineに怒られたからです。

でもこれだけだと、データクラスをEnhanceするときに、謎のjava.lang.VerifyErrorが発生します。

しらべたら、以下のようなバグがある模様。

http://www.datanucleus.org/servlet/jira/browse/NUCENHANCER-34

なので、GAE/J のSDKに同梱されているdatanuculeus のjarを最新版にいれかえたら、
何となく動いたっぽい。

ここまでやったところで、実はLow-Level APIをラップするクラスを書いた方がScalaっぽいのではないかと
思い始めた今日この頃です。