こんにちは。予期せぬエラーは私も予期せぬエラーが発生。只野です。
ある日“spring”のバージョンアップをしていた時。発生する数々のエラー、ソースコードの非推奨など修正を繰り返し良い感じでシステムが動く確認が取れてきたさなか。
java.io.InvalidClassException: org.springframework.security.core.context.SecurityContextImpl; local class incompatible: stream classdesc serialVersionUID = 510, local class serialVersionUID = 560
上記エラーが発生して起動が全くできなくなる。なぜ?エラー内容を読んでみるとローカルのシリアルと使いたいクラスのシリアルが一致していませんといったところだが、mavenでpomを利用したプロジェクト更新を掛けたのでソースコードの不一致が発生している可能性はない気がする?まさに予期せぬエラー。
エラーが発生しているとうことはどこかに原因がある。直前に実施したバージョンアップは「org.springframework.security」なのでこの辺りに原因があるのだろう。さてどこだろうか。とりあえずシリアルがずれた原因をwebで探ってみると“セッションがある場合に発生する”ことがあると情報が出てきた。
なるほど。私がバージョンアップしていたシステムの“セッション管理はデータベースを利用”して行っている。mavenでpomの内容でプロジェクトを更新したところで“データベース”まで情報を書き換えてくれるわけではないない。
早速springのセッション管理で利用しているテーブルの“spring_session”、”spring_session_attributes”の内容を全て物理削除したところ正常に起動されるようになった。
「org.springframework.security」をバージョンアップする前に画面を起動して動作確認した際のセッションが残り、セッション復元時にバージョンずれでエラーとなったのだろう。わかってしまえば大した話ではないが、プログラムの世界ではこういった些細な問題が解決するのに苦労したりする。
私と同じようにspringのセッションをデータベースで管理する方式のプロジェクトの場合、各spring関連のバージョンアップ作業では”spring_session”、”spring_session_attributes”の内容を全て物理削除することをがスムーズにバージョンアップ作業を進めるコツなのかもしれない。
本日はこの辺で