SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
クラウド時代だから
Spring-Retry
フレームワーク
Y.Watanabe
2019-07-12
JSUG勉強会2019その7 ビズリーチにおけるSpringの活用
ストップウォッチ スタート 確認
2
ビズリーチでは
エンジニアを募集しています
3
Who?
● 渡辺 祐

● (株)ビズリーチ

● SREグループ

○ Site Reliability
Engeneering

4
アンケート
● Java 5, 6, 7
● Java 8
● Java 9,10,11,12…
● まさかのJava1.3, 1.4
● わからない
5
RDBMSは?
● オンプレミス
● AWS-RDS, Google Cloud SQL
● その他クラウド
● わからない
6
コネクションプールライブラリ
● apache commons-pool 1.x
● apache commons-pool 2.x
● Tomcat DBCP
● HikariCP
● その他 (c3po….
● わからない
7
今日お話したいこと
● 数回の自動リトライで
得られる安眠がある
● 自動リトライを実装する前に
やるべきことがある
● Spring-Retryの原始的な使い方
8
ある日の出来事
1. RDSが障害でフェイルオーバー
2. 90秒で自動復旧した
3. しかしアプリのエラーログアラートは10分以上鳴
りっぱなし
9
誰かがイイこと言った
DBがフェイルオーバーしたくらいで
なんでこんなに騒いでんの?
10
ある日の出来事(2)
Slack APIが
「429 Too Many Request」を返却。
20分くらいエラーログアラートラッシュ
11
自動リトライに向いているのは?
● 短期間(数分レベル)で復旧している可能
性が高いなら自動リトライ
● そもそも通信過多の場合はスロットリング
12
aws-sdk-javaの場合
スロットリングとリトライの両方を内蔵している
13
1. JDBC接続のリトライ
↑今日はコレ
2. REST-APIへのhttpリクエストのリトライ
↑ ググった結果のコピペでイケます
14
RDSのフェイルオーバーとは?
15
RDSのフェイルオーバーとは
● 主系に障害が発生すると
自動的に副系に切り替わる
● 公式マニュアルでは
「60秒から120秒かかる」
● 経験値では90秒
16
DBが90秒で復帰してるのに
アプリが90秒で復帰できないってどゆこと?
17
jdbc:mysql://db.biz.internal/hogedb
$ host db.biz.internal
db.biz.internal is an alias for
a.rds.amazonaws.com.
a.rds.amazonaws.com has address 10.1.1.1
$ host db.biz.internal
db.biz.internal is an alias for
b.rds.amazonaws.com.
b.rds.amazonaws.com has address 10.2.2.2
フェイルオーバー前
フェイルオーバー後
18
フェイルオーバーメカニズムでは、スタンバイ DB インスタンスをポイントするように DB
インスタンスの DNS レコードが自動的に変更されます。したがって、DB インスタンスへ
の既存の接続の再確立が必要になります。Java DNS キャッシュメカニズムがどのよう
に機能するかによって、JVM 環境の再設定が必要になる場合があります。フェイルオー
バーの際に DNS 値をキャッシュする Java アプリケーションの管理方法の詳細につい
ては、「AWS SDK for Java」を参照してください。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html
RDSのマニュアルなのになぜか
「Javaの場合は注意しろ」とわざわざ書いてある(笑)
19
まずやるべきこと
-Dnetworkaddress.cache.ttl=3
デフォルトは”-1”
つまりJVMが生きてる間はDNS検索結果を
ずっとキャッシュするのがデフォルト
20
(講演後の追記)
実は前の -Dnetworkaddress.cache.ttl=3 は嘘です。これじゃ設定できないっす。
正確にはこんな感じのコードをpublic static void main(args)を持つクラスの最初の方に
埋め込んでいます。
java.security.Security.setProperty("networkaddress.cache.ttl", "3");
java.security.Security.setProperty("networkaddress.cache.negative.ttl", "3");
21
他にもまだあるんじゃね?
22
@Bean
public DataSource dataSource() {
ds = new BasicDataSource();
ds.setUrl()...setUser()... setPassword()...
ds.maxActive(10? 50? アプリによりけり)
ds.setValidationQuery(“SELECT 1”)
return new TransactionAwareDatasourceProxy(ds)
} // えっ?これだけ?
23
commons-pool 1.x の他のパラメータ
● minEvictableIdleTimeMills
● numTestPerEvictionRun
● testWhileIdle
● validationQueryTimeout
● 他多数
24
commons-pool 2.x で増えたパラメータ
● fastFailValidation
● logAbandoned
● removeAbandonedOnBorrow
● 他多数
25
● Tomcat-DBCPというのも速いらしい
● 最近はやはりHikariCPがデファクトらしい
26
commons-pool 1.x は2012年で打ち止め
27
クラウド時代のRDBに向かって
7年前に開発打ち止めの
コネクションプール機構を使い続けるとでも?
28
@Bean
public DataSource dataSource() {
conf = new HikariConfig();
conf.setUrl()...setUser()...
conf.setMaxIdle(10? 50? アプリによりけり)
conf.setConnectionInitSql(...)
conf.setConnectionTimeout(数秒)
conf.setValidationTimeout(数秒)
意外と少ない設
定で良さげ
29
1. ここまでで最低限の準備が完了
2. ここからが本番の
「RDSがフェイルオーバーしたときの
エラーログアラートラッシュ緩和のための
Spring-Retry」
30
ちょっと休憩
時間を確認
25分くらい?
31
@Configuration
@EnableRetry
public HogeConfig {... Javaコンフィグ ...}
@Retryable(value = {FooException.class}, maxAttempts=3)
public Bar barMethod(args...) {
// なんか不安定かもしれない外部通信
}
32
● AOPはちょっぴり遅くなる
● RetryTemplateを明示的に使うほうが
わかりやすくて確実
33
やりたいこと
DB(RDS)
JDBCドライバ
コネプ
アプリケーション
DBコネクション取得失敗の場合
に、4回までリトライする
1sec後 -> 2sec -> 4sec -> 8sec
34
retryTemplate = new RetryTemplate();
retryTemplate.setBackOffPolicy(省略);
retryTemplate.setRetryPolicy(省略);
例: Excepation.classはリトライ対象だが
RuntimeExceptionは対象外にする、等
まずRetryTemplateを準備しておく
35
spring-jdbc提供のDataSourceを拡張
public class FooDataSource extends DelegatingDataSource {
@Override
public Connection getConnection() throws SQLException {
return retryTemplate.execute(context -> {
if (context.getRetryCount() > 0) { /* warnログなど */ }
return super.getConnection();
});
36
@Bean
public java.sql.DataSource dataSource() {
conf = new HikariConfig();
conf.set…(jdbc-url, user, その他もろもろ)
hikariDs = new HikariDataSource(conf);
fooDs = new 前ページのFooDataSource(hikariDs);
ds = new TransactionAwareDatasourceProxy(fooDs);
return ds;
37
手動でフェイルオーバーさせて試す
38
DBAさん
39
まとめ
40
● クラウドの向こう側の障害が90秒で回復しても、
それに依存する自分のアプリケーションも90秒で
回復するとは限らない。
● フェイルオーバー試験するしかない。
41
AWS-SDKならその配布ライブラリ自体で
リトライ機構が組み込み済みだが...
aws-java-sdk-s3
aws-java-sdk-sqs
aws-java-sdk-rdb ?
aws-java-sdk-jdbc ?
存在しません
42
リトライは 最悪、無くてもいい。
リトライがあれば、DBがfail overから復帰するまでの90
秒のエラーログの飽和(からの精神的苦痛)をやわらげ
ることができる
DBCPの設定が
ちゃんとできてれば
43
ほとんどのコードを書いてくれたS君に感謝
(自分はほぼレビューのみ)
44
週明け、皆さんのプロジェクトでやることは?
● DBCPライブラリ、何使ってるか確認する?
● DBCPの設定、確認する?
● fail over試験、する?
● (DBまわりに限らず)Spring-Retry どこかで使えそう?
45
ビズリーチでは
エンジニアを募集しています
46

Contenu connexe

Tendances

Tendances (20)

Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
CircleCI vs. CodePipeline
CircleCI vs. CodePipelineCircleCI vs. CodePipeline
CircleCI vs. CodePipeline
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
 

Similaire à クラウド時代だからSpring-Retryフレームワーク

Data Engineering at VOYAGE GROUP #jawsdays
Data Engineering at VOYAGE GROUP #jawsdaysData Engineering at VOYAGE GROUP #jawsdays
Data Engineering at VOYAGE GROUP #jawsdays
VOYAGE GROUP
 

Similaire à クラウド時代だからSpring-Retryフレームワーク (20)

Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
 
20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編
 
20200923 miyazaki
20200923 miyazaki20200923 miyazaki
20200923 miyazaki
 
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてくださいレガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
Data Engineering at VOYAGE GROUP #jawsdays
Data Engineering at VOYAGE GROUP #jawsdaysData Engineering at VOYAGE GROUP #jawsdays
Data Engineering at VOYAGE GROUP #jawsdays
 
Data Engineering at VOYAGE GROUP #jawsdays
Data Engineering at VOYAGE GROUP #jawsdaysData Engineering at VOYAGE GROUP #jawsdays
Data Engineering at VOYAGE GROUP #jawsdays
 
Play frameworkの概要
Play frameworkの概要Play frameworkの概要
Play frameworkの概要
 
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsGAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
 

Plus de Y Watanabe

20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
Y Watanabe
 
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトークSeleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Y Watanabe
 
201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園
201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園
201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園
Y Watanabe
 
2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT
2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT
2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT
Y Watanabe
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
 

Plus de Y Watanabe (18)

ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
 
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
 
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
 
properties, yaml, and me
properties, yaml, and meproperties, yaml, and me
properties, yaml, and me
 
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
 
The cost of learning - advantage of mixer2
The cost of learning - advantage of mixer2The cost of learning - advantage of mixer2
The cost of learning - advantage of mixer2
 
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
 
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
 
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
 
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトークSeleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
 
201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園
201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園
201311 webデザイナとエンジニアのチームワークを加速させるテンプレートエンジンmixer2 devlove現場甲子園
 
Mixer2によるdynamic css sprite 201309第三回渋谷java
Mixer2によるdynamic css sprite 201309第三回渋谷javaMixer2によるdynamic css sprite 201309第三回渋谷java
Mixer2によるdynamic css sprite 201309第三回渋谷java
 
2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT
2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT
2013-09 テンプレートエンジンMixer2紹介 HTML5J&JJUG合同勉強会LT
 
20130511 jjug ccc講演 さらばjsp JAXBとmixer2
20130511 jjug ccc講演 さらばjsp JAXBとmixer220130511 jjug ccc講演 さらばjsp JAXBとmixer2
20130511 jjug ccc講演 さらばjsp JAXBとmixer2
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 

クラウド時代だからSpring-Retryフレームワーク