2012-01-27 12 views
3

私は最近、アプリケーションエンジンで作業をオブジェクト化していますが、オブジェクトを複数回登録するためのクラス登録に問題があります。 localhostがリフレッシュされるたびに再コンパイルして実行するEclipseでの開発中に、生徒を登録するスクリプトは複数回実行され、1回のリフレッシュ後にプログラムがクラッシュします。Google App Engine + Objectify:オブジェクトを一度登録しますか?

<% 
//In my main.jsp file, which is the main interactive html page 
ObjectifyService.register(Object.class); 
%> 

このスクリプトが1回だけ実行されるようにするにはどうすればよいですか?クラスがobjectifyに登録されているかどうかを確認する方法はありますか?私は別のstackoverflowスレッドの提案に続いて、以下を実行しました:

public class Object { 
    ... 
    static { 
     ObjectifyService.register(Object.class); 
    } 
    ... 
} 

これは私に別のエラーをもたらしました。これをどうすれば解決できますか?あなたは、クラスを登録するための同様の試みを見つけ、しかし...例のコメントを読むことができます

Objectify in JSP

:このような信頼性の例に見ることで

+0

"クラッシュ"? "別のエラー"?具体的にする!スタックトレースを含める! –

答えて

1

contextInitialized()フックに、具体的には、あなたのServletContextListenerそれを上に置くを開始時に一度呼び出されているいくつかの他の場所を探してください。これにより、Objectifyレジスタコードがサーバーのウォームアップ時に一度だけ実行されます。

+0

これはトリック、ありがとう! – theeggman85

1

//この行で注意してください!この例ではなく、現実世界のプロジェクトでは、アプリケーションの最初に、エンティティを登録するためのより良い
//場所が推奨されているはずです。などを削除/入れ/取得...とそのJavaクラスでは、クラス

に登録するためのコードを配置する必要があります

だから...あなたはおそらく、あなたのようないくつかのメソッドを実装するJavaクラスを持っています

static { 
     ObjectifyService.register(Object.class); 
    } 

OR、アプリケーションが

+0

[客観ドキュメント](http://code.google.com/p/objectify-appengine/wiki/BestPractices#How_NOT_To_Register_Entities)はこのことについてきわめて明確です。 –

+0

、それは問題ないはずです(そしてあなたはCRUD操作を使用する前に、そのインスタンスを作成する必要があります)、私はCRUD操作を実装しているクラス内の静的なブロックを追加するサイード...ので、あなたはその中に静的ブロックを置く場合私は "オブジェクト"クラス自体の中に登録して静的なブロックを置くと言っていませんでした – Daniel

+1

少し誤解を招いて申し訳ありません。私はあなたの正しいアドバイスよりも一般的な状況にもっと言及しました。 http://code.google.com/p/objectify-appengine/wiki/BestPractices#Use_a_DAO –