ローカルではエラーがなく動きましたが、デプロイするとエラーがでることが出る。
エラーの内容は、
「java.lang.RuntimeException: java.io.NotSerializableException: クラス名」
なエラーです。
原因はSessionに対してsetAttributeしたときに、対象のクラスがシリアル化されていない場合にローカルではなんとなく動くようですが、デプロイ後は上記のエラーが発生する模様です。
シリアル化されているかどうかのポイントは
・ implements Serializable をクラスに対してつけているか
・private static final long serialVersionUID = 1L;を宣言しているかどうか
・全てのメンバーに対してgetter,setterがあること。
だそうです・・・
以下、対応したソースです。
package xxxxx; import java.io.Serializable; //①implements Serializableが必要 public class WordScore implements Serializable { //②serialVersionUIDが必要 private static final long serialVersionUID = 1L; private String word=""; private String score = ""; private static Random rnd; //③Setter、Getterの宣言 public WordScore() { } public WordScore(String word,String score) { this.word = word; this.score = score; } public Integer getScoreInt(){ return Integer.parseInt(score); } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } }
あと、シリアル化失敗した状態で、GAEデプロイしてしまった後、なぜかバージョンあげるまで正常に動かない状態がありました。
デプロイ時のバージョンあげれば解決しました。
変なシリアル化された情報がサーバー上にのこっていたのかなと推測・・・
0 件のコメント :
コメントを投稿