45
プロローグ PROLOGUE 1

20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Embed Size (px)

DESCRIPTION

2013年5月11日に新宿で開催された、日本Javaユーザーズグループ クロスコミュニティカンファレンス(JJUG CCC)での講演資料です。

Citation preview

Page 1: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

プロローグ PROLOGUE

1

Page 2: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

1999

Java Server Pages

2

Page 3: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

当時の業界記事 Sun、「JavaServer Pages」の仕様を公開

http://java.sun.com/products/jsp/

Sun Microsystems社は2日、「JavaServer Pages(JSP)」技術を発表した。

...MicrosoftのActive Server Pages(ASP)に替わるテクノロジーとして...

3

出典:http://internet.watch.impress.co.jp/www/article/1999/0603/jsp.htm

Page 4: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

2013

4

Page 5: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

©技術評論社

Page 6: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Q. 実際、ビューとして何を使ってますか?

A) JavaScript + JSON/XML

B) Velocity, Mayaa, etc

C) JSP

Page 7: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

21世紀ですよ。

Page 8: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

JAXBとテンプレートエンジン

Mixer2

- さらばJSP -

8

JJUG CCC 2013 Spring 日本Javaユーザーズグループ

クロスコミュニティカンファレンス R5-1

ベルサール西新宿

2013-05-11

Page 9: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

自己紹介

• わたなべ

• SI屋の技術屋さん

• @nabedge

• http://nabedge.blogspot.jp

9

Page 10: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

目次

1.テンプレートエンジン

2.JAXBとMixer2

3.性能比較

4.Mixer2の欠点

5.ビューのテストをJUnitで

6.エピローグ 10

Page 11: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

テンプレートエンジン

11

JSP:一番身近なテンプレートエンジン

こんにちは

<% if (name == null) { %>

ゲストさん

<% } else { %>

<%= name %>さん

<% } %>

通常のJava言語、EL式、カスタムタグで書く

Page 12: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

テンプレートエンジン

12

Velocity:老舗

こんにちは

#if (name == null) {

ゲストさん

#else

${name}さん

#end

VTL = Velocity Template Languageで書く

Page 13: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

テンプレートエンジン

13

FreeMarker:最近人気

こんにちは

<#if name?has_content>

${name}さん

<#else>

ゲストさん

</#if>

FTL = Freemarker Template Languageで書く

Page 14: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

要するに?

たいていのテンプレートエンジンは、何らかの

テンプレート記述言語(っぽいもの)

を覚えなければならない

14

Page 15: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2

15

こんにちは

<span id=“name”>ななし</span>さん

Span span = html.getById(“name”, Span.class);

span.getContent.clear();

span.getContent.add(“ヤマダ”);

// これで <span id=“name”>ヤマダ</span>さん

// が出力

テンプレートは純粋なXHTMLとCSS

値の埋め込みやロジックは普通のJava

Page 16: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Take back control !

Java-Webアプリケーションの

Viewを、 本来の純粋な

Javaプログラミングと

htmlマークアップの世界に

取り戻す!

16

Page 17: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

17

1.テンプレートエンジン

2.JAXBとMixer2

3.性能比較

4.Mixer2の欠点

5.ビューのテストをJUnitで

6.エピローグ

Page 18: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

JSR-222

Java

Architecture for

XML

Binding

18

Page 19: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

JAXBによるmarshalとunmarshal

19

JAXB

API

<root> <foo>aaa</foo> <bar>bbb</bar> <foo>ccc</foo> <bar>ddd</bar> </root>

root

foo bar

アンマーシャル

マーシャル

XML文字列 Javaオブジェクト

Page 20: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2によるロードとセーブ

20

Mixer2

&JAXB

<html> <head> … </head> <body> … </body> </html>

Html

Head Body

loadHtmlTemplate

saveToString

XHTML Javaオブジェクト

Page 21: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2のHTMLタグとJava型

21

<html>…</html>

⇔ org.mixer2.jaxb.xhtml.Html

<div>…</div>

⇔ org.mixer2.jaxb.xhtml.Div

• Mixer2では HTMLタグと

Javaオブジェクトを相互マッピング

JAXBのXJCで自動生成した約120種のJavaクラスを利用

Page 22: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

タグの属性へのアクセス

22

• タグの属性はJavaオブジェクトの

プロパティにマッピング。

• setter/getterメソッドでアクセス。

<div id=“foo”>…</div>

をテンプレートとしてロードすると

String id = div.getId(); // これでidに”foo”

(html4/5のすべての属性を実装済み)

Page 23: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

複数要素はListになる

23

<html>

<body>

<p>Hello World</p>

foo

<span>bar</span>

</body>

</html>

index 型

0 P

1 String

2 Span

Html html = mixer2Engine

.loadHtmlTemplate(

“template.html”);

java.util.List<Object>

list = html.getBody()

.getContent();

listの中身 template.html

Page 24: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

24

デモ サンプルWebアプリ

「フルーツショップ」 https://github.com/nabedge/mixer2-

sample/tree/master/mixer2-fruitshop-springmvc

• 時間を確認

• 15分~20分くらい?

Page 25: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

MVCフレームワークとMixer2

1. ViewエンジンとしてのMixer2

2. なんらかのMVCフレームワークSpringMVC, Struts2, SAStruts...

3. 組み合わせれば鬼に金棒 Spring勉強会の資料も参考にどうぞ。

http://nabedge.blogspot.jp/2013/02/spring-study.html

25

Page 26: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

コアなファンのありがたい賛辞

26

Page 27: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

27

1.テンプレートエンジン

2.JAXBとMixer2

3.性能比較

4.Mixer2の欠点

5.ビューのテストをJUnitで

6.エピローグ

Page 28: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

コアなファンによる ざっくり比較

28

このツッコミもかなり当たってます

Page 29: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

自分でもテストしてみた

1.フルーツショップの商品詳細ページ

→JSP, Velocity, Thymeleaf, Mixer2で

同じ画面を作る

2. ApacheJMeterでhttpアクセスを浴びせる

29

Page 30: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

前のページは正確な性能比較か?

30

START END

1. 15ms以下だと観測誤差が大きい(CPU/OS次第)

2. 総時間での比較はノイズありすぎ

(でもjspと比較するにはこうするしかない)

VIEW処理

httpリクエスト

コントローラ

処理

ビジネスロジック httpレスポンス

Page 31: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

とにかく、体感速度としてはどうなの?

31

Page 32: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

32

1.テンプレートエンジン

2.JAXBとMixer2

3.性能比較

4.Mixer2の欠点

5.ビューのテストをJUnitで

6.エピローグ

Page 33: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2の欠点

1. 性能

→気にするほどの影響かどうか?がポイント

2. HTML ではなく XHTML が必須

→HTML5もXML文法で書けばOK

3. <!-- コメント --> は消えてしまう

→どうでもいい?

4. スクリプトレットが無い代わりにJavaコードが肥大化する

→Ctrl+Space補完が効くならいいのでは? 33

Page 34: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

ちょっと一息

34

•水分補給

•時間を確認 • 35分前後?

Page 35: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

35

1.テンプレートエンジン

2.JAXBとMixer2

3.性能比較

4.Mixer2の欠点

5.ビューのテストをJUnitで

6.エピローグ

Page 36: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

よく見かける開発ルール、スローガン

『ちゃんとJUnitでテスト書こうぜ!』 ※ただしJSPは除く

36

Page 37: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

SeleniumはUT用ではありません

• selenium-java-2.*.jar

• テスト対象をWebアプリとして

APサーバ上で稼働させておくのが前提条件。

• つまり、単体テストではなく

結合テストの回帰実行をするためのもの。

37

Page 38: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2とJUnitの基本

38

タグ型

オブジェクト

加工前

タグ型

オブジェクト

加工後 処理

span.unsetContent();

span.getContent().add(“Hello”);

assertThat(

span.getContent().get(0).toString()

,is(“Hello”));

Page 39: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2によるViewヘルパーのテスト

39

実際のテストコードで説明します

https://github.com/nabedge/mixer2-

sample/blob/master/mixer2-fruitshop-

springmvc/src/test/java/org/mixer2/samp

le/web/

Page 40: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

エピローグ EPILOGUE

40

Page 41: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

「さらば JSP」?

うん、あれは、釣りです。

ごめんなさい。

41

Page 42: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

ハサミは使いよう

•心配性の人は枯れてるJSPで。

• Velocityが慣れている人はVelocityで。

• TwitterやFacebookみたいな画面が必要ならJavaScriptで。

42

Page 43: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

Mixer2の部分マーシャルの活用

43

Div div = html.getById(“foo”,Div.class);

String str = m2Engine.saveToString(div);

1. 特定のタグ(ここではdiv)だけを文字列化

2. ほかのテンプレート形式に混ぜて出力可能

<%-- JSP --%> <html> <body> <%=str %> </body> </html>

<html> <body> <div id=“foo”>.......</div> </body> </html>

Page 44: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

「選択肢のひとつ」としてのMixer2

44

Page 45: 20130511 jjug ccc講演 さらばjsp JAXBとmixer2

ご静聴ありがとうございました!

http://mixer2.org/

45