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

Groovyコンファレンス

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