2009年11月2日月曜日

DataNucleus Enhancerのトラバース範囲を局所化する

GAE SDKでは、JDO/JPAの実装クラスの生成に DataNucleusを使用しています。Googleが提供するeclipseのプラグインではエンティティクラスのコンパイル時にDataNucleus Enhancerがクラスを拡張して保存します。 しかし、まれにDataNuclesがエラーになることがあります。
java.lang.NullPointerException
at com.google.gdt.eclipse.core.ProcessUtilities.cleanupProcess(ProcessUtilities.java:367)
at com.google.gdt.eclipse.core.ProcessUtilities.launchProcessAndActivateOnError(ProcessUtilities.java:271)
at com.google.appengine.eclipse.core.orm.enhancement.EnhancerJob.runInWorkspace(EnhancerJob.java:82)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
大きなプロジェクトほど起こりやすくなるようです。おそらくエンハンスするためのクラスを特定するためのトラバース作業中に何らかの不具合で失敗しているのではないかと考えられます。 これを解決するためには、トラバース対象を局所化することで解決できます。 もっとも簡単なのはソースフォルダを1つ追加して、JPAアノテーションを付加したクラス群を移動して、そのソースフォルダだけDataNucleus Enhancerに見させるようにすることです。 例えばこのソースフォルダを src-entityにしたとします。 次にプロジェクトのプロパティを開き、Google > App Engine > ORM を選択します。 この設定画面には、Enhancerが対象とするフォルダが指定されています。問題が起きたとき、ここには srcフォルダが含まれているはずです。 この画面で、src-entityフォルダを[Add...]ボタンから追加し、srcフォルダを[Remove]ボタンで取り除けば、Enhancerは正常に動作するようになるでしょう。

0 件のコメント:

コメントを投稿