Download - 110409 silverlight square_lt_pub
1
田中 孝佳 (@tanaka_733)
2011/04/09
Java プログラマがSilverlight を使ってみた
Silverlight と Tomcat のインターオペラビリティ
2
自己紹介 ㈱ワークスアプリケーションズ所属
ERP パッケージの会社です 研究部門 クラウド担当
AWS を主に触る (jawsug コアメンバー ) Azure や Nifty も調査中 個人的には Azure も触りたい
業務では Java 、 Silverlight メイン 半分趣味で WP7 も
2011/04/09
3
業務アプリのSilverlight 実用例 社内製のクラウド管理ツール Wc3 のフロン
ト
2011/04/09
4
Wc3 って? クラウドを使いやすくするツール
今のところ AWS にのみ対応 必要があればマルチクラウド対応も ベンダー提供の API を使って
スケジュール操作、グルーピングを行う 詳細に知りたい方は JAWS-UG での
発表資料をどうぞ http://www.slideshare.net/tanakata/aw
s-sdk-for-java-wc32011/04/09
5
Wc3 を担当する前 ( 約 1 年前 )
Java メインのプログラマ
• サーバーサイドは得意• UI は Eclipse RCP 形式とか
HTML + Javascript+Servlet とか
.NET は ActiveDirectory 管理で触ったくらい
2011/04/09
6
で、上司からこんなことを言われました
2011/04/09
クラウド管理ツールを担当してほしい
7
で、感じたこと管理ツールは使い勝手がよくないと使ってもらえない
従って UI ・ UX が重要
Java の UI 作成は大変・クロスブラウザも大変
しかもかけられる工数は限られている
2011/04/09
8
そうだ、 Silverlight にしようMVVM モデルの優位性
• 実は Eclipse プラグインも MVVM に近いモデル
.NET の優位性
• 第一級の event オブジェクト+ LINQ 、ラムダ式などの要素
Visual Studio の優位性
• 無償で使える強力な UI 開発ツール
2011/04/09
9
サーバーサイドは都合により Java で・・・ 組織としてみれば、
サーバーサイドは Java の方が得意 こちらまで .NET にするのは抵抗があった
クライアントについてはほぼ Windows OS なので OK が出やすかった クロスブラウザ問題を容易に解決できる
2011/04/09
10
サーバーサイド Java とSilverlight の組み合わせ方Silverlight バイナリの公開方法
• Servlet から見れば静的コンテンツとして公開
クライアント・サーバー間の通信方法
• 今回は広義な RESTful な API を採用• SOAP とかもあるけど、
実装容易性・軽量性を考慮して却下
2011/04/09
11
( 参考 ) RESTful とは 厳格な RESTful は意外と面倒 今回使ったのは JSON over HTTP(S)
広義の RESTful URI に GET / POST して JSON を取得
リクエストごとに認証し、セッションや Cookie を持たない これは設計者の意向次第な面もある
2011/04/09
12
こういう仕組みになります
2011/04/09
EC2社内
クライアント
Cloud Srevice endpoint
AP DB
Query
JDBC
WebJSON
over HTTP(S)xap
13
Silverlight でのRESTful API の呼び出し方 WebClient or HttpWebRequest を利用
API は全て非同期です JSON オブジェクト変換は
DataContractJsonSerializer を利用 System.ServiceModel.Web を参照に追加
2011/04/09
14
サンプルコード
2011/04/09
15
はまったこと (1) DateTime 型の扱い
Java(java.util.Date) と Silverlight で異なる Java はミリ秒単位
Java側の JSON ライブラリが long値で返す 起点は 1970/1/1 00:00:00 GMT
Silverlight(.NET) はタイマー刻み 起点は A.D. 1/1/1 00:00:00
Silverlight側で吸収してみる
2011/04/09
16
サンプルコード
2011/04/09
17
サンプルコード
2011/04/09
18
はまったこと (2)デバッグは? Java を Eclipse
Silverlight を VisualStudio で開発 Eclipse から AP サーバーをデバッグ起動 VisualStudio から IIS をデバッグ実行
xap を提供するだけのサーバー リクエストはローカルの AP に投げる
Eclipse側に clientaccesspolicy.xml を配備 ポートが違うとクロスドメインアクセスです
2011/04/09
19
はまったこと (3)URL エンコード パラメーターを渡す場合に
URL エンコードが必要なことがある Silverlight(HttpUtility.UrlEncode)
ほげ %e3%81%bb%e3%81%92 Java(UrlEncoder.encode)
ほげ %E3%81%BB%E3%81%92
2011/04/09
16進表記の英字の大文字・小文字の違い
20
RFC 的には大文字が推奨です RFC 3986 2.1節より 自前で実装するか、 System.Uri クラスの
EscapeDataString メソッドが使えます Encoding は UTF-8固定です
2011/04/09
21
その他 DI するために Prism (Patterns &
Practices)使ってます http://compositewpf.codeplex.com/
UnitTest が充実していない こちらも情報ほしい
無償で使える範囲でがんばってます BlendSDK は導入してます Expression Blend は試用中
2011/04/09
22
ということなどをブログに書いてます
http://dev.worksap.co.jp/Members/t_tanaka/2011/04/09
232011/04/09
ご清聴ありがとうございました