ローカルではエラーがなく動きましたが、デプロイするとエラーがでることが出る。
エラーの内容は、
「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 件のコメント :
コメントを投稿