際際滷

際際滷Share a Scribd company logo
干温厩温から皆界温鉛温へ
ScalaでWeb_kはこう笋錣
Naoki Takezoe
@takezoen
NTT-DATA INTELLILINK
徭失B初
? NTTデ`タ枠極室g侭奉
? Project Amateras
? Seasar2
? Apache Click
? Java + アジャイル
徭失B初
? NTTデ`タ枠極室g侭奉
? Project Amateras
? Seasar2
? Apache Click
? Scala + アジャイル
Web_k冱ZとしてのScala
? ステ`トレス
? HTTPもステ`トレス
? クライアント箸博Bる送れになってきている
? v方侏冱Zのステ`トレスな來|と猥圓よい
? コレクション荷恬
? Webアプリは児云議にデ`タを紗垢して燕幣する
? 薦なコレクションAPIはこのようなI尖と猥圓
よい
? フレ`ムワ`ク
? ノンブロッキングI/Oを試喘
? アクセス方の謹いシステムのバックエンドにmして
いる
たとえばこんなプロジェクト
? Javaベ`スのWebアプリをScalaにポ`ティング
? s170鮫中、s40,000 lines
? 恷寄5繁〜6ヶ埖
? コ`ド楚を40゛50%p、瞳|鯢
Before
? Seasar2
? Apache Click
? S2JDBC
? PostgreSQL + Tsearch
? Raw JavaScript
After
? Play2 (Customized)
? ScalaQuery (Cuztomized)
? PostgreSQL
? Apache Solr
? jQuery + jQuery UI
たとえばこんなプロジェクト
? Javaベ`スのWebアプリをScalaにポ`ティング
? s170鮫中、s40,000 lines
? 恷寄5繁〜6ヶ埖
? コ`ド楚を40゛50%p、瞳|鯢
Before
? Seasar2
? Apache Click
? S2JDBC
? PostgreSQL + Tsearch
? Raw JavaScript
After
? Play2 (Customized)
? ScalaQuery (Cuztomized)
? PostgreSQL
? Apache Solr
? jQuery + jQuery UI
Flexibility and Safety
ScalaのWebフレ`ムワ`ク
? Play2
? フルスタックのWebフレ`ムワ`ク
? ScalaのWebフレ`ムワ`クとしては恷もメジャ`
? Nettyベ`ス┘離鵐屮蹈奪ング
? Scalatra
? Sinatra喇栖のマイクロフレ`ムワ`ク
? シンプルだが巓xモジュ`ルが割gしている
? Servletベ`ス
Play2
Play2はノンブロッキング
? 1岬でI尖できるリクエスト方を貧げる
? 掲揖豚I尖もgにける
def index = Action {
val futureInt = scala.concurrent.Future { intensiveComputation() }
Async {
futureInt.map(i => Ok("Got result: " + i))
}
}
でも´
? ボトルネックであるDBアクセスがブロックし
てしまう
恷除はこんなのがあります
? postgresql-async
https://github.com/mauricio/postgresql-async
? ノンブロッキングなPostgreSQL/MySQLアクセス
喘のドライバ
val future: Future[QueryResult] = connection.sendQuery("SELECT 0")
val mapResult: Future[Any] = future.map(result => result.rows match {
case Some(rs) => rs.head(0)
case None => -1
})
val result = Await.result( mapResult, 5 seconds )
Play2はタイプセ`フ
? テンプレ`トもタイプセ`フ
@(customer: Customer, orders: List[Order])
<h1>Welcome @customer.name!</h1>
<ul>
@for(order <- orders) {
<li>@order.getTitle()</li>
}
</ul>
Play2はタイプセ`フ
? ル`ティングもタイプセ`フ
GET /clients/:id controllers.Clients.show(id: Int)
O協ファイルにル`ティングを協x
コントロ`ラやテンプレ`トで剃哈きが辛嬬
def index = Action {
Redirect(routes.Clients.show(1))
}
<ul>
@clients.map { client =>
<li><a href=^@routes.Clients.show(client.id) ̄>@client.name</a></li>
}
</ul>
WebSocketもgに聞えます
def index = WebSocket.using[String] { request =>
// クライアントにメッセ`ジをプッシュするEnumerator
val out = Enumerator.imperative[String]()
// クライアントから僕佚されたメッセ`ジをI尖するIteratee
val in = Iteratee.foreach[String]{ message =>
out.push("Hello " + message + "!")
}
(in, out)
}
クライアントからのメッセ`ジを鞭佚するためのIterateeと、
クライアントにメッセ`ジを僕佚するためのEnumeratorの
タプルをり、箸靴瞳気
クライアント箸呂海鵑文个
@()(implicit request: RequestHeader)
´
<script>
var ws = new
WebSocket("@routes.WebSocketController.index.webSocketURL()");
// サ`バ`からプッシュされたメッセ`ジをダイアログで燕幣
ws.onmessage = function (evt) {
alert(evt.data);
}
</script>
<input type="text" id="name">
<input type="button" value="Send" onclick="ws.send($('#name').val())"/>
´
エンドポイントのURLを
タイプセ`フに峺協できる
Play2はステ`トレス
? サ`バサイドに彜Bを隔たない
? セッションIDだけクッキ`に隔たせてデ`タは翌
何のKVSなどに崔く
? クライアント箸牌Bを砿尖する
Play2 App
HTML /
JavaScript
スマ`ト
フォン
Servletコンテナでは嘛しない
? warにするプラグインが贋壓しますが環の祇な
のでやめといたほうがいいです
? 屡贋のJavaベ`スのシステムのポ`ティング
には鬚い討い覆
Scalatra
こんな湖じ
class MyServlet extends ScalatraServlet with ScalateSupport {
get("/") {
// リクエストパラメ`タを函誼
val name = params("name")
// XMLリテラルでレスポンスを伏撹
<html>
<body>
<h1>Hello, world!</h1>
Say <a href="hello-scalate">hello to {name}</a>.
</body>
</html>
}
}
Scalatraの蒙
? 巓xモジュ`ルとしてJ^、バリデ`ションな
どがあり駅勣なC嬬は匯宥りBっている
? Play2のようなタイプセ`フなテンプレ`トも
聞喘できる
? ル`ティングはタイプセ`フに峰できない
? Servlet 3.0鬉離灰鵐謄覆嘛する
? HttpSessionやServlet APIも聞喘辛嬬なので、
屡贋のJava Webアプリの卞峅に鬚い討い
聞い蛍け
Play2
屡贋のAPサ`バ(Tomcat吉)
Scalatra
Slick(ORM)
JavaVM
Non-Blocking I/Oを試かした謹嶷業嶷の
撹。揖r俊A方が謹く、スケ`ラビリティ
が駅勣なBtoC鬚吋汽ぅ箸筌好洫`トフォン
アプリのバックエンドなどに鬚。
Tomcat吉のAPサ`バ貧で嘛辛嬬な撹。
屡贋のJavaアプリケ`ションのポ`ティング
やアクセス方の嚠yが否叟なI侫▲廛螢羽`
ションなどに鬚。
Netty
Stateless & Scalable Stack Stable & Reliable Stack
Scala is now glowing up!
? ScalaはI佞任睚蛍に聞える冱Zです。
? ScalaにはJavaでは払われた櫃あります。
? まだ隆母な何蛍もありますが、匯wに撹Lして
いきましょう
ご賠ありがとうございました
Scala剃哈きレシピ
? Scalaの児云から光Nフレ`ムワ`クまでg
樹議な300のレシピをуh
? 蒙にこれからScalaを茶してみようという
Javaプログラマの圭におすすめ

More Related Content

干温厩温から皆界温鉛温へ