Groovyコンファレンス

1,940
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,940
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Groovyコンファレンス

  1. 1. sMash(ProjectZero) と「 Reflex 」で構築するお手軽営業支援システム Virtual Technology 2007/08/22   竹嵜 伸一郎 [email_address]
  2. 2. 概要 <ul><li>sMash(ProjectZero) を用いた、 XML マッシュアップ・フレームワーク 「 Reflex 」のご紹介。複数のバックエンドシステムへのケータイからのアクセスを ProjectZero でラップし、 JSON(XML) のやりとりのみにシンプル化したお手軽営業支援システムを構築してみました。 </li></ul><自己紹介は省略>
  3. 3. ソリューション提案 各拠点にある System-i のデータに sMash から動的にアクセスする F/W 拠点 4 拠点 3 拠点 2 拠点 1 sMash Internet ・ 日報入力 ・ 在庫検索 社内 N/W DMZ sMash は 賢い Proxy サーバ データを保管しない F/W XML XML XML XML
  4. 4. sMash Pipes Boundary Control Entity 言語も技術も文化も違うレイアどうしが RESTful に接続するにはスキーマが重要 View Mashup Resource レイヤ: 主な実装技術: レイヤ: 主な実装技術: レイヤ: RESTful 設計では各レイヤが疎結合となり「完全分業」が可能となる お互いに実装の中身がどうなっているのか関知しない XML/JSON XML/JSON AJAX 主な実装技術: System-i
  5. 5. 業務システム開発では、 誂え(あつらえ)スキーマでマッシュアップ <ul><li>ATOM 、 RSS でマッシュアップが普通だが・・ </li></ul><ul><li>業務システムでは、誂え≒お勝手スキーマで括る </li></ul><ul><li>つまり、ドメインとしての誂えスキーマの設計重要 </li></ul>
  6. 6. インスタンスは JSON で OK var    report = { activity : [            [&quot;07/05&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JavaScript&quot;,&quot; 暑い &quot;,&quot;80%&quot;],            [&quot;07/06&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;CSS&quot;,&quot; 寒い &quot;,&quot;20%&quot;],            [&quot;07/07&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;HTML&quot;,&quot; 普通 &quot;,&quot;40%&quot;],            [&quot;07/08&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JSON&quot;,&quot; 暖かい &quot;,&quot;70%&quot;],            [&quot;07/09&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;Ajax&quot;,&quot; 肌寒い &quot;,&quot;100%&quot;],            [&quot;07/10&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JavaScript&quot;,&quot; 暑い &quot;,&quot;80%&quot;],            [&quot;07/11&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;CSS&quot;,&quot; 寒い &quot;,&quot;20%&quot;],            [&quot;07/12&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;HTML&quot;,&quot; 普通 &quot;,&quot;40%&quot;],            [&quot;07/13&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JSON&quot;,&quot; 暖かい &quot;,&quot;70%&quot;],            [&quot;07/14&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;Ajax&quot;,&quot; 肌寒い &quot;,&quot;100%&quot;],            [&quot;07/15&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JavaScript&quot;,&quot; 暑い &quot;,&quot;80%&quot;],            [&quot;07/16&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;CSS&quot;,&quot; 寒い &quot;,&quot;20%&quot;],            [&quot;07/17&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;HTML&quot;,&quot; 普通 &quot;,&quot;40%&quot;],            [&quot;07/18&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JSON&quot;,&quot; 暖かい &quot;,&quot;70%&quot;],            [&quot;07/19&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;Ajax&quot;,&quot; 肌寒い &quot;,&quot;100%&quot;],            [&quot;07/20&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JavaScript&quot;,&quot; 暑い &quot;,&quot;80%&quot;],            [&quot;07/21&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;CSS&quot;,&quot; 寒い &quot;,&quot;20%&quot;],            [&quot;07/22&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;HTML&quot;,&quot; 普通 &quot;,&quot;40%&quot;],            [&quot;07/23&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JSON&quot;,&quot; 暖かい &quot;,&quot;70%&quot;],            [&quot;07/24&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;Ajax&quot;,&quot; 肌寒い &quot;,&quot;100%&quot;],            [&quot;07/25&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JavaScript&quot;,&quot; 暑い &quot;,&quot;80%&quot;],            [&quot;07/26&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;CSS&quot;,&quot; 寒い &quot;,&quot;20%&quot;],            [&quot;07/27&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;HTML&quot;,&quot; 普通 &quot;,&quot;40%&quot;],            [&quot;07/28&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;JSON&quot;,&quot; 暖かい &quot;,&quot;70%&quot;],            [&quot;07/29&quot;,&quot;10:00&quot;,&quot;18:00&quot;,&quot;Ajax&quot;,&quot; 肌寒い &quot;,&quot;100%&quot;]            ], assessment      : [&quot; 月の評価 &quot;,                    &quot; よくできました &quot;,            &quot; 2週目評価 &quot;,            &quot; 3週目評価 &quot;,            &quot; 4週目評価 &quot;
  7. 7. スキーマさえ固まれば分業開始できる View Mashup Resource レイヤ: レイヤ: レイヤ: 各レイヤは渡されたインスタンスを元に開発をすすめていく お互いに干渉しない。する必要がない。 AJAX System-i インスタンス インスタンス インスタンス これやるから後は勝手によろしく! ポイ ポイ ポイ
  8. 8. VTEC メソッド( Reflex 設計) ・画面実装 ・単体テスト ・ Resorce モデル設計 ・フローアセンブル ・単体テスト ・ DAO モデル設計 ・ O/R マッピング実装 ・単体テスト ・統合テスト ・システムテスト ・ユースケース図、ユースケース記述 ・分析クラス図、論理ビュー ・画面モックアップ ・エンティティ設計、テーブル設計、インスタンス作成 要件定義 外部設計 内部設計 実装 テスト リリース
  9. 9. <参考>  http://kurashide.com <ul><li> 基幹システムを RESTful に設計 </li></ul><ul><li>  PHP から Java のプロバイダ (Reflex) を呼ぶ </li></ul>RESTful 設計で EC サイトをわずか4ヶ月で構築 Mashup Resource XML/ JSON View XML/ JSON Flex2 PHP Reflex
  10. 10. <ul><li>s Mash </li></ul>
  11. 11. sMash のいいところ#1 http://www-06.ibm.com/jp/domino01/mkt/websphere.nsf/doc/002760F2 より
  12. 12. sMash のいいところ#2 WakhokNight Seminar 2007 : Project Zero コース(第 3 回) より抜粋
  13. 13. <ul><li>Reflex </li></ul>
  14. 14. Reflex 概要 リソースから様々な Reflex (反射像)を取り出すためのフレームワーク  1. リソース志向のフレームワーク  2. 1つのリソースから様々な表現 (HTML,XML,JSON,PDF など ) を取り出せる  3. スケーラビリティを確保できる Node Node Node Node Repository Repository Repository Repository
  15. 15. <ul><li>Reflex は、 RESTful に resource にアクセスする手段を提供し、また、 resource から HTML,XML や PDF などへの様々な変換手段を提供する </li></ul><ul><ul><li>ResourceLocator が resource の URI を解決 </li></ul></ul><ul><ul><li>ResourceOperator により、 resource にアクセス </li></ul></ul><ul><ul><li>ResourceMapper により、 XML,JSON ⇔ Entity(Java Object) 変換 </li></ul></ul><ul><ul><li>ResourceViewer により、 resource から HTML 、 PDF に変換して表示 </li></ul></ul>ResourceOperator ResourceLocator resource ResourceMapper ResourceViewer Reflex Topology
  16. 16. <ul><li>XML,JSON ⇔ Entity(Java Object) 変換ライブラリ </li></ul><ul><ul><li>名前規約のもと、 XML 、 JSON の要素が Java のプロパティとして 1 対 1 にマッピングされる </li></ul></ul><ul><ul><li>http://xstream.codehaus.org/ をベースに独自に Desirializer 機能を付加したもの </li></ul></ul><ul><ul><li>org.json を利用して JSON にも対応 </li></ul></ul><ul><ul><li>Reflex Core ライブラリで提供される (jp.sourceforge.reflex.core  図の青楕円部分 )   </li></ul></ul>Entity(Java Objects) De-serialize Requester DB Entity(Java Objects) Jetty (HTTP Clients) serialize Reflex iText ResourceMapper O/R Mapping は不要! ダイレクトに DB に格納 Jetty DBUtil DBUtil XML JSON PDF XML JSON ResourceMapper ResourceMapper
  17. 17. Resource Mapper Entity Resource Operator Blogic DBUtil Entity Generator Resource Locator SQL Source Reflex Component ・・ツール、既存コンポーネント ・・自動生成コンポーネント ・・手で実装 Reflex 表現 CRUD Resource Mapper Entity Resource Operator Blogic DBUtil Resource Locator
  18. 18. <ul><li>ところで・・・・ </li></ul>
  19. 19. 今は LL 全盛期 Cool!
  20. 20. Java は劣勢 J2EE Struts LL Fuck!
  21. 21. Groovy 、 Reflex 登場! Cool! ん?
  22. 22. でも実は Java なんだよ Powerd by Java
  23. 23. そこで、 Rediscover the Java 3 年。 世界が Java の真の実力を発見するのに要した時間である。 2005 年、 LL の台頭により Java は、これまで標準的に使われてきたにもかかわらず、「世界で最も忌み嫌われるプログラミング言語」などと呼ばれもした、ともすれば不遇とすらいい得る歳月を経て、あたりのそこここに満ち充ちていた 「 Web 世界の無秩序と混乱から脱却したい」という思いによって、ふたたびして表舞台に招来された。 Java は、 Web の「あちら側」と「こちら側」とを取り結ぶ、もっとも古くてもっとも新しい、そして、もっとも重要な技術だ。次の 3 年を自らの手で創り出すために、我々は Shibuya.groovy を結成した。 うそです
  24. 24. まじめに Java のいいところ F/W 拠点 4 拠点 3 拠点 2 拠点 1 sMash Internet ・ 日報入力 ・ 在庫検索 社内 N/W 安全・安心・堅牢な Java で エンタープライズシステムとデータをしっかり守る DMZ sMash は 賢い Proxy サーバ データを保管しない F/W XML XML XML XML
  25. 25. <ul><li>そろそろ DEMO やります </li></ul>
  26. 26. デモシステム構成 System-i Windows ThinkPadX30 Internet IBM @渋谷 NIS @大森 System-i のデータに sMash から動的にアクセスする こんな遅いの使うなよ! ローカル環境 リモート環境
  27. 27. def onRetrieve() {    def userid = request.params.userid[];    def month = request.params.month[];       def server=&quot;&quot;;       // ユーザに応じてアクセス先を変える    if (userid==&quot;user1&quot;) server = &quot;http://localhost:8083/&quot;;    if (userid==&quot;user2&quot;) server = &quot;http://localhost:8085/&quot;;         // リソースにアクセスする     def Connection.Response resp =     Connection.doGET(server +&quot;/pmsdemo/jp/reflexworks/pms/model/Report?json&userid=“                                          +userid+&quot;&month=&quot;+month);       // リソースを JSON にする    def body = resp.getResponseBodyAsString();    def respJSON = zero.json.Json.decode(body);    // JSONP で返す    print &quot;callback(&quot;;    request.json.output = respJSON;    request.view =&quot;JSON&quot;;    render();    print &quot;);&quot;; } sMash アプリ これだけかよ
  28. 28. 当社ホームページの見つけ方 クリック ぶいてく 詳しくは、当社ホームページをご覧ください sMash 、Reflexアプリの作り方公開中!
  29. 29. あるいは、 クリック
  30. 30. 1行目をクリック クリック 814,000 件中の 1 番目
  31. 31. <ul><li> 加油! </li></ul>ご清聴、ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×