Spring SessionでClassNotFoundException
2017年06月26日 22時37分21秒
Spring Sessionを使ったWebアプリケーションを開発中。
セッションレプリケーションにRedisを使用。
今回想定外のエラーに出くわしたのでメモ。
データクラスを新規に作成し、クラスごとセッションにセットする修正を行い、サーバーにデプロイ。
バグがあったため、前回のバージョンでデプロイしなおし。
セッションレプリケーションしているので、サービス自体は無停止でデプロイしなおし。
ここでエラーが発生。
デプロイ自体は問題なく出来ているんですが、アクセス中だったユーザーのリクエストが500エラー。
エラー内容は、
org.springframework.data.redis.serializer.SerializationException: Cannot deserialize;
nested exception is java.lang.ClassNotFoundException:
※エラーの一部のみ記載
正常に動いていた前のバージョンに戻したのにClassNotFoudException。
なぜ?
ここからはエラー内容からの勝手な想像になりますが、
・新バージョンをデプロイ(クラスAが新規に追加される)
・セッションの中にクラスAをセット。Redisに保存。
・クラスAが存在しないバージョンでデプロイしなおし。(RedisにはクラスAのデータが残っている)
・前バージョンでデプロイしなおし(クラスAがwarファイル上から消える)
・同一セッションで新しいリクエストを実行
・SpringがRedisからセッションデータをデシリアライズ
→クラスAなんて存在しないぞ(゚Д゚)ゴルァ!!
前バージョンのロジック上には当然クラスAなんて存在しないので、
セッションにクラスAが格納されていても問題ないと気にもしていませんでしたが、
まさかのClassNotFoudExceptionが発生。
SpringSessionは「セッション(HttpSession)」という1つの塊でRedisに保存しているのかな?
そのせいで使われないはずのクラスAのデータもわざわざデシリアライズしてエラーになっているんだと予想してます。
※SpringSessionの仕様、Redisの中身を確認したわけではないので、あくまで予想です
いちいちセッションの中身を全部デシリアライズしていたら、遅くなりそうな気がするが・・・。
セッションIDとキー名毎にRedisに保存してくれた方が早いだろうし、今回のようなエラーは発生しなかったような気が。
SpringSessionは初めて使ったのでどっか設定がイケてないのだろうか?
セッションレプリケーションにRedisを使用。
今回想定外のエラーに出くわしたのでメモ。
データクラスを新規に作成し、クラスごとセッションにセットする修正を行い、サーバーにデプロイ。
バグがあったため、前回のバージョンでデプロイしなおし。
セッションレプリケーションしているので、サービス自体は無停止でデプロイしなおし。
ここでエラーが発生。
デプロイ自体は問題なく出来ているんですが、アクセス中だったユーザーのリクエストが500エラー。
エラー内容は、
org.springframework.data.redis.serializer.SerializationException: Cannot deserialize;
nested exception is java.lang.ClassNotFoundException:
※エラーの一部のみ記載
正常に動いていた前のバージョンに戻したのにClassNotFoudException。
なぜ?
ここからはエラー内容からの勝手な想像になりますが、
・新バージョンをデプロイ(クラスAが新規に追加される)
・セッションの中にクラスAをセット。Redisに保存。
・クラスAが存在しないバージョンでデプロイしなおし。(RedisにはクラスAのデータが残っている)
・前バージョンでデプロイしなおし(クラスAがwarファイル上から消える)
・同一セッションで新しいリクエストを実行
・SpringがRedisからセッションデータをデシリアライズ
→クラスAなんて存在しないぞ(゚Д゚)ゴルァ!!
前バージョンのロジック上には当然クラスAなんて存在しないので、
セッションにクラスAが格納されていても問題ないと気にもしていませんでしたが、
まさかのClassNotFoudExceptionが発生。
SpringSessionは「セッション(HttpSession)」という1つの塊でRedisに保存しているのかな?
そのせいで使われないはずのクラスAのデータもわざわざデシリアライズしてエラーになっているんだと予想してます。
※SpringSessionの仕様、Redisの中身を確認したわけではないので、あくまで予想です
いちいちセッションの中身を全部デシリアライズしていたら、遅くなりそうな気がするが・・・。
セッションIDとキー名毎にRedisに保存してくれた方が早いだろうし、今回のようなエラーは発生しなかったような気が。
SpringSessionは初めて使ったのでどっか設定がイケてないのだろうか?
PR
滝沢カレンって嫌われてるんだなぁと実感
2017年06月21日 23時24分33秒
以前、滝沢カレンがイライラするとブログに書いたら、その記事へのアクセスが増えた。
みんな滝沢カレンにイライラしてるんですねぇ(笑)
てかどんだけ滝沢カレン嫌われてるのやら。
それでもいまだにいろんな番組に出てるってのが本当に謎。
有名雑誌とかテレビで嫌いなタレントランキングとかで取り上げられないと、
番組プロデューサーは反感買ってるってことに気づかないのかな。
みんな滝沢カレンにイライラしてるんですねぇ(笑)
てかどんだけ滝沢カレン嫌われてるのやら。
それでもいまだにいろんな番組に出てるってのが本当に謎。
有名雑誌とかテレビで嫌いなタレントランキングとかで取り上げられないと、
番組プロデューサーは反感買ってるってことに気づかないのかな。
市川海老蔵&小林麻央のブログがウザすぎる
2017年06月08日 21時02分25秒
市川海老蔵と小林麻央のブログ内容が毎日のようにYahooニュースに載る。
非常にウザい&イライラする。
小林麻央の体調なんて正直、どうでもいい。
わざわざYahooニュースに載せる意味が分からない。
市川海老蔵と小林麻央はブログ書いてるだけなので悪くはない。
たかがブログの記事をニュースとして取り扱う記者?が悪い。
それは分かる。分かるんだが、いちいちYahooニュースの一覧にブログ更新の記事を見つけると、市川海老蔵と小林麻央に対してイラっとする。
こちとら、小林麻央がどういう結果になろうが知ったこっちゃないんですが・・・。
当然、Yahooニュースとして取り上げられたブログの記事読んでませんが。
非常にウザい&イライラする。
小林麻央の体調なんて正直、どうでもいい。
わざわざYahooニュースに載せる意味が分からない。
市川海老蔵と小林麻央はブログ書いてるだけなので悪くはない。
たかがブログの記事をニュースとして取り扱う記者?が悪い。
それは分かる。分かるんだが、いちいちYahooニュースの一覧にブログ更新の記事を見つけると、市川海老蔵と小林麻央に対してイラっとする。
こちとら、小林麻央がどういう結果になろうが知ったこっちゃないんですが・・・。
当然、Yahooニュースとして取り上げられたブログの記事読んでませんが。
AWSのS3からJAVAでフォルダごと取得する方法
2017年06月05日 20時32分11秒
AWS SDK for Javaを使ってS3からフォルダごと一括で取得し、ローカルに保存する必要があったので調査。
ネットで調べると、AWS CLIを使った方法だったり、Javaでフォルダ配下のファイルを一覧でパスを取得する方法は沢山出てくるが、全ファイルを取得する方法がなかなか見つからない。
日本語で見つからないなら英語でってことで検索してみると簡単に発見。
https://stackoverflow.com/questions/35865045/how-to-download-entire-folder-located-on-s3-bucket/35865581
上記サイトにも載ってるがパラメータが何なのか日本語で分かるようにメモ。
TransferManager transferManager = new TransferManager(new
DefaultAWSCredentialsProviderChain());
MultipleFileDownload download = transferManager.downloadDirectory("バケ
ット名", "ダウンロードS3したいS3上のパス(先頭に/はNG)", new File("ロー
カルの保存先パス"));
try {
download.waitForCompletion();
} catch (AmazonClientException | InterruptedException e) {
e.printStackTrace();
}
ネットで調べると、AWS CLIを使った方法だったり、Javaでフォルダ配下のファイルを一覧でパスを取得する方法は沢山出てくるが、全ファイルを取得する方法がなかなか見つからない。
日本語で見つからないなら英語でってことで検索してみると簡単に発見。
https://stackoverflow.com/questions/35865045/how-to-download-entire-folder-located-on-s3-bucket/35865581
上記サイトにも載ってるがパラメータが何なのか日本語で分かるようにメモ。
TransferManager transferManager = new TransferManager(new
DefaultAWSCredentialsProviderChain());
MultipleFileDownload download = transferManager.downloadDirectory("バケ
ット名", "ダウンロードS3したいS3上のパス(先頭に/はNG)", new File("ロー
カルの保存先パス"));
try {
download.waitForCompletion();
} catch (AmazonClientException | InterruptedException e) {
e.printStackTrace();
}
パチスロ そらのおとしもの
2017年06月04日 14時59分30秒
そらのおとしものがパチスロにてデビュー!!
http://www.daxel.co.jp/soraoto/about/
導入店、導入数はかなり少ないような気がしますが、個人的に原作好きなので一度は打ってみたい。
最速で7月3日に導入。
http://www.daxel.co.jp/soraoto/about/
導入店、導入数はかなり少ないような気がしますが、個人的に原作好きなので一度は打ってみたい。
最速で7月3日に導入。