[PR]
2025年08月09日 09時11分34秒
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Spring Session
2016年07月24日 00時24分23秒
ELB、EC2、WildFly8とSpringフレームワークを使っているWebアプリケーションでセッションレプリケーション機能を実装しなければいけなくなった。
そもそもセッションレプリケーションを実現する為にはどうすればいいのか調べてみたところ、
何個か方法はあるようだが、
一番簡単に実現できそうだったのが、比較的新しい技術のSpring Session。
WildFlyやインフラ周りには一切手を加えず、JAVAソース、設定ファイルの修正だけで実現できる模様。
※セッション情報の保存先であるRedisサーバーの容易は必要(今回は保存先にRedisを採用)
※Spring Sessionを検索すると実装方法を紹介してくれるサイトは存在するが、
「Spring Session」のことしか書いてない。
当然といえば当然だが、Redisに接続できる状態でなければ話にならない。
Redisの使用方法についてはここら辺を参考に
http://tm8r.hateblo.jp/entry/20120329/1333033094
とりあえずセッション情報の保存先であるRedisについては、AWSのElastiCacheを使用。
で、ソースの修正については下記サイトを参考+試行錯誤。
参考サイト:http://qiita.com/uich/items/cd5d63c12f1d342fc65c
※Spring Sessionの実装方法を検索すると、Spring Bootでの例が多い
今回はSpring Boot使っていないので、設定ファイル系は試行錯誤が必要だった
参考サイトと今回の修正での差分は下記の通り
【pom.xml】
gradleを使っていたので、build.gradleにspring-session-data-redisの依存関係を記載
【web.xml】
参考サイトの記述だけだとエラーになったので下記を記載
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ここから独自に追加 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
※ContextLoaderListenerを追加すると、WEB-INFの下にapplicationContext.xmlがないとエラーになる。
なので、classpath:applicationContext.xmlを指定してあげる。
【RedisHttpSessionConfig】
基本的には参考サイトと同様だが、一部問題が発生した為、下記の通り修正
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class RedisHttpSessionConfig {
@Resource
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisConnectionFactory connectionFactory() {
return redisConnectionFactory;
}
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
}
※ElastiCacheではconfigureRedisAction()が必要らしいので追加
※参考サイトには記載されているhttpSessionStrategy()を実装すると、リクエストの度にセッションIDが変わってしまい、レプリケーションどころではなくなってしまった。原因はよく分からないがhttpSessionStrategy()自体を削除して問題解決。
以上でRedisにセッション情報が保存され、ELBに紐付いているEC2(WildFly)間でセッションが共有されるようになった。
※仕事場の情報は持ち出せないので記憶を頼りに自宅で記載してます。
記載ミスがあったらゴメンナサイ。
そもそもセッションレプリケーションを実現する為にはどうすればいいのか調べてみたところ、
何個か方法はあるようだが、
一番簡単に実現できそうだったのが、比較的新しい技術のSpring Session。
WildFlyやインフラ周りには一切手を加えず、JAVAソース、設定ファイルの修正だけで実現できる模様。
※セッション情報の保存先であるRedisサーバーの容易は必要(今回は保存先にRedisを採用)
※Spring Sessionを検索すると実装方法を紹介してくれるサイトは存在するが、
「Spring Session」のことしか書いてない。
当然といえば当然だが、Redisに接続できる状態でなければ話にならない。
Redisの使用方法についてはここら辺を参考に
http://tm8r.hateblo.jp/entry/20120329/1333033094
とりあえずセッション情報の保存先であるRedisについては、AWSのElastiCacheを使用。
で、ソースの修正については下記サイトを参考+試行錯誤。
参考サイト:http://qiita.com/uich/items/cd5d63c12f1d342fc65c
※Spring Sessionの実装方法を検索すると、Spring Bootでの例が多い
今回はSpring Boot使っていないので、設定ファイル系は試行錯誤が必要だった
参考サイトと今回の修正での差分は下記の通り
【pom.xml】
gradleを使っていたので、build.gradleにspring-session-data-redisの依存関係を記載
【web.xml】
参考サイトの記述だけだとエラーになったので下記を記載
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ここから独自に追加 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
※ContextLoaderListenerを追加すると、WEB-INFの下にapplicationContext.xmlがないとエラーになる。
なので、classpath:applicationContext.xmlを指定してあげる。
【RedisHttpSessionConfig】
基本的には参考サイトと同様だが、一部問題が発生した為、下記の通り修正
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class RedisHttpSessionConfig {
@Resource
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisConnectionFactory connectionFactory() {
return redisConnectionFactory;
}
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
}
※ElastiCacheではconfigureRedisAction()が必要らしいので追加
※参考サイトには記載されているhttpSessionStrategy()を実装すると、リクエストの度にセッションIDが変わってしまい、レプリケーションどころではなくなってしまった。原因はよく分からないがhttpSessionStrategy()自体を削除して問題解決。
以上でRedisにセッション情報が保存され、ELBに紐付いているEC2(WildFly)間でセッションが共有されるようになった。
※仕事場の情報は持ち出せないので記憶を頼りに自宅で記載してます。
記載ミスがあったらゴメンナサイ。
PR
プリズン・ブレイク感想(ネタバレあり)
2016年07月18日 14時32分37秒
Huluにてやっとこさプリズン・ブレイクを見終った
感想としては、まぁ面白かった。
個人的にはウォーキング・デッドの方が好き。
シーズン1のフォックスリバー刑務所からの脱獄はかなり面白かったが、
その後はもういいよって位裏切りシナリオの連発で少しうんざり。
結局、最初から最後まで、マイケルを一度も裏切らなかったのはサラ、リンカーン、スクレ位か。
ラストについては、マイケルが死ぬ必要はあったのだろうか。
脳腫瘍で余命少ないから、自分の命と引き換えにサラを助けるってのは泣ける話だが、
そもそもクランツ将軍を倒し、全て免責されてハッピーエンドでよかったような気が。
とりあえず、ウォーキング・デッドのシーズン6を早く見たい。
感想としては、まぁ面白かった。
個人的にはウォーキング・デッドの方が好き。
シーズン1のフォックスリバー刑務所からの脱獄はかなり面白かったが、
その後はもういいよって位裏切りシナリオの連発で少しうんざり。
結局、最初から最後まで、マイケルを一度も裏切らなかったのはサラ、リンカーン、スクレ位か。
ラストについては、マイケルが死ぬ必要はあったのだろうか。
脳腫瘍で余命少ないから、自分の命と引き換えにサラを助けるってのは泣ける話だが、
そもそもクランツ将軍を倒し、全て免責されてハッピーエンドでよかったような気が。
とりあえず、ウォーキング・デッドのシーズン6を早く見たい。
Rewrite 3話
2016年07月17日 15時00分06秒
Rewriteを毎週録画予約
が、なぜか3話が録画リストにない・・・
なぜだ!?
Rewriteの直前まで録画していたアメトークはある。
まさか、アメトークの前にやってた野球が延長して、
アメトークとRewriteの再生時間がかぶったのか!?
これだから野球は嫌いなんだよ。
野球なんてNHKかBSで勝手にやってろって感じなんだが。
とりあえず、見逃したRewriteの3話をどうするか。
まずは「Rewrite」でググってみた。
そしたら無料で見れるとこが出てきたw
http://www.anitube.se/video/90025/Rewrite-03
ダブル録画に対応したテレビに買い換えようかな。
が、なぜか3話が録画リストにない・・・
なぜだ!?
Rewriteの直前まで録画していたアメトークはある。
まさか、アメトークの前にやってた野球が延長して、
アメトークとRewriteの再生時間がかぶったのか!?
これだから野球は嫌いなんだよ。
野球なんてNHKかBSで勝手にやってろって感じなんだが。
とりあえず、見逃したRewriteの3話をどうするか。
まずは「Rewrite」でググってみた。
そしたら無料で見れるとこが出てきたw
http://www.anitube.se/video/90025/Rewrite-03
ダブル録画に対応したテレビに買い換えようかな。
insecam
2016年07月13日 23時34分11秒
最近話題のinsecam
パスワードを掛け忘れている監視カメラの映像を公開しているサイトです。
http://www.insecam.org/
ほとんどは農家の牛舎の映像だったり、駐車場の映像だったりします。
が、たまに会社内の監視カメラ映像もあったりします。
明らかに風俗店の受付場所の映像も1個だけありました。
監視カメラを扱っている人はご注意を。
パスワードを掛け忘れている監視カメラの映像を公開しているサイトです。
http://www.insecam.org/
ほとんどは農家の牛舎の映像だったり、駐車場の映像だったりします。
が、たまに会社内の監視カメラ映像もあったりします。
明らかに風俗店の受付場所の映像も1個だけありました。
監視カメラを扱っている人はご注意を。
パチスロ コードギアス ギアスポイント
2016年07月03日 21時38分06秒
パチスロ コードギアスの筐体上部のルルーシュの目が点滅することあり。
レア役時に点滅すればギアスポイント獲得ですが、
何でもない目で点滅すると、ギアスポイントを「複数獲得済み」らしい。
導入直前の雑誌ではギアスポイントMAXが近いって書いてたので、
目が点滅して、もうすぐブラックリベリオン入る!!と信じて粘って被害を拡大させた人は自分だけではないはず。
目が点滅したところで粘る価値はないですね。
紫色に点灯していれば粘る価値ありでしょうが。
レア役時に点滅すればギアスポイント獲得ですが、
何でもない目で点滅すると、ギアスポイントを「複数獲得済み」らしい。
導入直前の雑誌ではギアスポイントMAXが近いって書いてたので、
目が点滅して、もうすぐブラックリベリオン入る!!と信じて粘って被害を拡大させた人は自分だけではないはず。
目が点滅したところで粘る価値はないですね。
紫色に点灯していれば粘る価値ありでしょうが。