際際滷

際際滷Share a Scribd company logo
Javaで1から10まで 
いた 
tokuhirom 
2014 JJUG FALL
または?Java でウェブ 
塁が_kした 
tokuhirom 
2014 JJUG FALL
云セッションの坪否は 
繁の盾であり?侭 
奉する睫紊箸ovS 
です?
徭芙サ`ビスの 
ウェブエンジニア
Perl 
を嶄伉に 
Ruby,Python,PHP,C,C++ 
など
瀏鉾鉾鉾鉾鉾鉾烹 
勝〕使擦Java  
Y^Y^Y^Y^Y^Y
なぜ?
けるエ 
ンジニア 
が謹い
冱Z碧が 
芦協している
堀い
參和待?
で?どういう 
撹でやるの?
念戻訳周
徭芙サ`ビスの 
_k\喘
LL いていた繁でも 
きやすい撹
なにはダメか?
壅軟咾砲瓩辰舛rg 
かかる?
h廠Bが 
广しく寄笋任△?
えることが謹い
どうするか?
どういうh廠で_kす 
るか?
Java のバ`ジョン
Java 8
lambda 
Stream API 
interface default 
methods
LL しかやってない繁 
にもとっつきやすい?
しがらみがないなら匯桑 
あたらしいやつ聞いたい
Java8 
+ 
lombok
Java8 + lombok 
なら LL と 
d弼ない
もはやJavaダサ 
いと房ってる圭 
がダサい
フレ`ムワ`ク
ライブラリ僉協児
Web Application 
システム撹 
Java 
Web 
Application 
Framework 
O/R Mapper 
Router 
Template 
Engine 
MySQL 
HTTP 
Client 
HTTP 
Server 
Apache2 
JSON 
Serialiser
X楚
互堀
酒g
メンテナンスが唯峭し 
た栽に恷徭蛍たち 
でメンテナンスできる 
こと
または?メンテナンス 
唯峭したらlかが fork 
する
で?
Java EE ?
エンタ`プライズ_kの栽には掲械にマッ 
チすると房うのですが?厘?のニ`ズにマッ 
チしていなかったというだけであり? 
干温厩温掘掘に諒籾があるわけではありません?
}が軟きた 
rにIでき 
ない
Java EE 7 鬉 
晩云Z云がない
エンタ`プライズ_kの栽には掲械にマッ 
チすると房うのですが?厘?のニ`ズにマッ 
チしていなかったというだけであり? 
干温厩温掘掘に諒籾があるわけではありません?
Dropwizard
fat-jar 
+ JAX-RS 
+ embed-jetty
これならW 
たちにも聞 
えそうだ!
Dropwizard 
Jersey(JAX-RS) 
Hibernate 
Embedded Jetty 
Freemarker
これらをYぶ 
Glue が Dropwizard
Dropwizard は 
くない
ちょっとしたつなぎを 
やってくれる?
くないが? 
この Glue いる?
Guava の Optional を 
Jersey で鞭け函れる 
Hack
Java 8 だと音勣
噫柴なことをする??
カスタマイズしようと 
すると吭翌と中宜
Dropwizard の 
Glue にあたる何蛍は 
徭蛍たちでg廾するこ 
とにした
コ`ドジェネレ`タ` 
でg廾すればいいよね~
Oreore-Generator 
Jersey(JAX-RS) 
Hibernate 
Embedded Jetty 
Freemarker
テンプレ`トエンジン
勣周
互堀
侏ベ`スの 
徭咼┘好羽`プ
XSS 貨
[% var %] 
String なら徭咼┘好羽`プ
エスケ`プしたくなければ 
new EscapedString(str)
勣周を困燭垢發里 
ほとんどない?
恬るか!
2嶽窃恬った?
nanotmpl
托めzみ干温厩温
JSP 
+ 徭咼┘好羽`プ 
+ g匯佩崙s
@ String name 
こんにちは!<?= name ?> さ 
ん!
Java コ`ドにQ 
コンパイル 
g佩
Java で VM をg廾 
VM 喘コ`ドに 
テンプレ`トをQ
[% FOR x IN items %] 
X: [% x %] 
[% END %]
Perl で聞っていた 
Xslate というテンプ 
レ`トエンジンと揖じ 
隈を駻
ボツ?
なぜ?
テンプレ`ト 
エンジンの_ 
kは中宜
_kコストが 
栽わない
ベンチマ`クしたY惚? 
Java のテンプレ`ト 
エンジン?だいたい堀 
い?
徭咼┘好羽`プは劣ほ 
ど嶷勣ではない?
CSP 
(content 
security 
policy)
JS でHTML 
Bするケ`スが 
えた
じゃあ?mustache 聞う 
か??
音得!
JS のテンプ 
レ`トとかぶり 
がち??
?FreeMarker ○ 埴にQめた! 
? Mustache 
? etc.
Oreore-Generator 
Jersey(JAX-RS) 
Hibernate 
Embedded Jetty 
Freemarker
O/R Mapper
Hibernate?
L1 キャッシュ俳りた 
いのに俳れなくて伎孵
もう干禽京遺岷俊で´´
それはさすがにつらい?
シンプルな 
O/R Mapper 
を慕いた?
JOIN とかは 
サポ`トしない?
クエリビルダで 
JOIN伏撹すると 
}盾Qが是yになる
}jなSQLを伏撹できな 
いように崙sを紗える
繁は崙sがあっ 
た圭がきやす 
く湖じる?
あたたかみのある 
返き 
SQL
@Table("member") 
@Data // lombok 
@EqualsAndHashCode(callSuper = false) 
public MemberRow extends 
Row<MemberRow> { 
@PrimaryKey 
private long id; 
@Column 
private String name; 
}
Optional<MemberRow> 
member = 
db.single(MemberRow.class) 
.where("id=?", 1) 
.execute();
db.insert(MemberRow.class) 
.value("name", "John") 
.execute();
Optional を旋喘 
したわかりやすい 
インタ`フェ`ス
Oreore-Generator 
Jersey(JAX-RS) 
TinyORM 
Embedded Jetty 
Freemarker
そんなある晩
Jersey で_kを 
Aけていると??
つのる音
アノテ`ショ 
ンが庇L
アノテ`ションベ`スな 
POJO にこだわりすぎている?
アノテ`ション 
で咾鰆酉し 
ているために 
恬を弖いづらい
テンプレ`トや 
JSONのレンダリン 
グがコントロ`ラ 
の翌で佩われる
Java にTれて 
ない繁には 
ちょっとつらい
シンプルな 
MVC フレ`ム 
ワ`クを恬撹
avans
サ`ブレットAPIの院 
いラッパ`
もともと聞われていた 
Sledge/Amon2 とい 
う Perl のフレ`ムワ` 
クを歌深に_k
卞佩しやす 
くなった?
コントロ`ラ 
は@覚ベ`ス
public class HelloWorld extends 
ControllerBase { 
@GET("/") 
public WebResponse hello() { 
return 
this.renderJSON("Hello, world!"); 
} 
}
コントロ`ラ 
軟泣でデバッガ 
で弖いやすい
アノテ` 
ションに 
よる
Y蕉アノ 
テ`ショ 
ンかよ??
@BeforeDispatchTrigger 
public void preprocess() { 
// ´ 
}
Java 8 interface 
default method 
によるMix-in
Jackson 
ControllerBase Session 
Freemarker
Oreore-Generator 
avans 
TinyORM 
Embedded Jetty 
Freemarker
塰喘貧の脅栽により??
Oreore-Generator 
avans 
TinyORM 
Tomcat 7 
Freemarker
Oreore-Generator 
avans 
TinyORM 
Tomcat 7 
Freemarker
rgがあれば? 
テストの
モデルのテスト
DB は MySQL 
g縞に蝕kサ`バ`につなぐ
ストレ`ジとの 
やりとりがサ` 
バ`サイドの故?
MySQL をデ`タセン 
タ`の dev サ`バ`に 
おいてやる?
コントロ`ラのテスト
JSON 
API 
の岬^
テストし 
やすい?
コストは 
芦い?
ブラウザで_Jとかし 
たくないでござる?
モッキング 
は 
どうするか?
Java レベルで 
の 
モッキングは 
やらない
サ`ビスはHTTP 
JSON API でつなぐ
(Jetty|Tomcat) でモッ 
ク httpd を羨ち貧げて 
そこにアクセスする?
@BeforeClass 
で 
tomcat-embed 
を軟強
Tomcat tomcat = new Tomcat(); 
tomcat.setPort(0); 
org.apache.catalina.Context webContext = 
tomcat.addWebapp("/", new File("src/main/ 
webapp").getAbsolutePath()); 
webContext.getServletContext().setAttribute(Glob 
als.ALT_DD_ATTR, "src/main/webapp/WEB-INF/ 
web.xml"); 
tomcat.start(); 
int port = tomcat.getConnector().getLocalPort(); 
String url = "http://127.0.0.1:" + port; 
// url をつかってなにかI尖する
Apache 
HttpClient 
でアクセス
テストh廠は 
吭翌と酒g?
參貧です? 
ご賠ありがとうございまし 
た?(2指朕)
まとめ
Java 8 r旗は 
ライブラリを 
くチャンス
lambda
Java 8 Date 
and Time API
Optional  
は屡贋のものの 
嫖では佃しい
屡贋のライブラリは 
Java 7 鬉鯒个譴 
いために Java 8 を 
頼畠に伏かし俳れな 
いケ`スも
Maven Central に 
ライブラリをアッ 
プロ`ドするチャ 
ンスですよ!
干温厩温て?1から10まて?慕いた三(壊温稼庄岳庄噛艶糸)
參貧です? 
ご賠ありがとうございまし 
た?
Maven central に 
アップロ`ドするのは 
yしいのでは?
Maven central 
伽くないよ
干鴛檎粥にサインアップ
JIRA でチケットを 
k佩する
mvn release:prepare 
release:perform
參貧です? 
ご賠ありがとうございまし 
た?(3指朕)

More Related Content

干温厩温て?1から10まて?慕いた三(壊温稼庄岳庄噛艶糸)