GAEで遊ぶ2
進捗が著しく悪い・・・・。とりあえず、嵌った所をメモ書き。
- ezmorphが動いた(解決)
- ソースを直すことになりましたが、非常に簡単でした。
- 後述のロジックでエラー。Locale.setDefault( Locale.US );無視しても大丈夫そうなので、適当にエラーハンドリングを追加。
- 恐れていたリフレクション関連の制約ではなかったぽく一安心。リフレクションの制約はprivate系へのアクセスがいけないらしい・・・
- JDOでパフォーマンスがでない(解決?回避?)
//はてなブックマークエントリー情報取得API //で取得できるjsonをbean化したもの public class BookMarkInfo implements Serializable{ @PrimaryKey public String url; @Persistent public String title; @Persistent public int count; @Persistent public String entryUrl; @Persistent public String screenshot; @Persistent public String eid; @Persistent public Date updateDate; /** * 一人、一人のブックマークを現すデータ。 * 要素数はbookMark数と同じエントリ数に・・・・ */ @Persistent public List<BookMarkDetailOneUserInfo> bookmarks = new ArrayList<BookMarkDetailOneUserInfo>(); //・・・・省略
-
- ってことで、insertを1000発単位で投げているようなものになりかねないので、ある意味しょうがない。が、このままでは使い物にならないので修正。
public class BookMarkInfo4JDO implements Serializable { @PrimaryKey public String url; @Persistent public String title; @Persistent public int count; @Persistent public String entryUrl; @Persistent public String screenshot; @Persistent public String eid; @Persistent public Date updateDate; //★ここを修正 @Persistent(serialized = "true") public UserBookMarks userBookMarks=new UserBookMarks(); //ブックマークの詳細を個別に見ることはないので、 //ひとつのクラスにまとめてシリアライズ class UserBookMarks implements Serializable{ private static final long serialVersionUID = 1L; public List<BookMarkDetailOneUserInfo> bookmarks = new ArrayList<BookMarkDetailOneUserInfo>(); } //本当は、下記の感じでいければよかったのだが、 //java.lang.ClassCastException:com.google.appengine.api.datastore.Blob //cannot be cast to java.util.Collection //としかられて断念。 //@Persistent(serialized = "true") //@Persistent(serialized = "true",defaultFetchGroup = "true") //@Persistent(serializedElement = "true") も駄目だった気がする //public List<BookMarkDetailOneUserInfo> bookmarks = new //ArrayList<BookMarkDetailOneUserInfo>(); //・・・・省略 }
-
- サイト主の使い方が悪いのか、こういうものなのか不明。@EmbeddedOnlyとか色々アノテーションはあるので、何とかできてほしいが、、、
感想
やっぱり、落とし穴が多く、片っ端からずぶずぶはまる印象(あまりドキュメントを読まないせいもある)。とくに、CPUを限界まで使い切るアプリを作ろうと思った場合、タスクの分割粒度が問題になりそうだ(ローカルとサーバで負荷のかかり方が異なるので読みが外れる)。また、タスクの平行実行も考える必要がありそうだ(JDOのトランザクションが出てくるのであまりやりたくない)。