SlideShare a Scribd company logo
1 of 129
Download to read offline
ActionScript3+Ruby+J2EE+Javascript.....


AIR+BlazeDS+Ruby


Yuichiro MASUI <masui@masuidrive.jp>
自己紹介
masuidrive
   現在フリーランス
  10分Railsムービー
アバウトミー / PingKing
     PukiWiki
   3月に起業で渡米
お題
ビジネスメッセンジャー
専用のクライアント
   ログ機能
  会議室機能
専用のクライアントは
   AIRで作る
Adobe AIR
インターネットの技術を
使ってデスクトップアプリを
     作る環境
ActionScript3+MXML
  HTML+Javascript
Ajaxはほとんどそのまま動く
現在ベータ3
日本語処理に難あり
ブラウザと違いセキュリティ
   上の制限は無い
SQLiteを内蔵しているので
ビジネスアプリにも向いている
メッセージングは
BlazeDSを使おう
Adobeがリリースした
  オープンソースの
メッセージングサーバ
元々はLiveCycle Data
 Serviceとして提供されていた
  機能からリモーティングと
メッセージングを切り出したもの
Tomcat6で動く
リモーティング
Tomcat上のメソッドを
外部のActionScriptから
  簡単に呼び出せる
それってRMI...
それってdRuby...
メッセージング
クライアント間でメッセージ
  のやり取りができる
シリアライズした
ActionScriptのオブジェクト
  をメッセージとして扱う
簡単なものなら
コードを書かないでも動く
でも私、Java分からない...
秘密兵器 JRuby
JavaVM上で動く
    Ruby
多分BlazeDSもJRubyから
   呼び出せるはず
Railsと組み合わせて
     ログを管理
AIR        AIR         ブラウザ



      BlazeDS



      JRuby on Rails
言語           UI
    AIR
  (Flash)   ActionScript3   MXML
    AIR
 (HTML)       Javascript    HTML
BlazeDS          Java        ー
 Rails          Ruby        HTML
言語           UI
    AIR
  (Flash)   ActionScript3   MXML
    AIR
 (HTML)       Javascript    HTML
BlazeDS          Java        ー
 Rails          Ruby        HTML
言語            UI
    AIR
        まて。
  (Flash)
    AIR
            ActionScript3   MXML

 (HTML) Javascript HTML

全部違わないか?
BlazeDS    Java     ー
  Rails         Ruby        HTML
なんかむちゃくちゃな
組み合わせな気がしてきた
まずはAIR間で動く
メッセンジャーを作ろう
AIR    AIR      AIR




      BlazeDS
AIR    AIR      AIR




      BlazeDS
クライアント間の
メッセージ交換は
XMLだけで作れる
まずはBlazeDSで
メッセージングサーバを
    立てる
最新のβ版をダウンロード
    そして展開
Tomcatも付属しているので
      すぐに起動可能
tomcat/webapps/blazedsに
       ひな形がある
$ cp -R tomcat/webapps/blazeds 
  tomcat/webapps/instantmessenger


        ひな形をコピー後
      service-config.xml
    messaging-config.xmlを
          書き換える
messaging-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service" class="flex.messaging.services.MessageSer
vice">
   <adapters>
    <adapter-definition id="actionscript" class="flex.messaging.services.me
ssaging.adapters.ActionScriptAdapter" default="true" />
    <adapter-definition id="jms" class="flex.messaging.services.messaging
.adapters.JMSAdapter"/>
   </adapters>


  <default-channels>
   <channel ref="my-streaming-amf"/>
   <channel ref="my-polling-amf"/>
  </default-channels>


  <destination id="chat"/>
</service>
channelは送信方法
BlazeDSはクライアントとの
やり取りで複数のプロトコル
    をサポートしている
<default-channels>
 <channel ref="my-streaming-amf"/>
 <channel ref="my-polling-amf"/>
</default-channels>
steamingは専用プロトコル
 ステートレスで高速だけど
 proxyなどが超えられない
pollingはcomet方式
 httpをkeep-aliveでTCP
セッションを繋いだまま定期
   的にリクエストを送出
HTTPなのでProxyも超えら
          れる
どちらを使っているか
開発者が意識する必要がない
destinationは部屋名
AIR    AIR      AIR




      BlazeDS
AIR    AIR      AIR




      BlazeDS
AIR      AIR      AIR



steam    steam    polling


          chat
        BlazeDS
$ ./tomcat/bin/startup.sh
これでこのサーバで
 メッセージ交換が
できるようになった
AIRクライアントを作ろう
Flex builder3 betaが
公開されているのこれを使う
 Flex SDKでも作れるけど
   無理はしない方がいい
ファイル→新規→Flex プロジェクト
アプリケーションサーバは「なし」
アプリケーションサーバを
指定するとXMLからサーバの
  設定を引っ張ってくれる
クライアントプログラムで
変更できるようにしたいので
   あえて使わない
mxmlをデザインモードで開いて
UIは適当に出来上がり
AIRとBlazeDSを繋げる
Consumer - 受け手
Producer - 送り手
AIR      AIR      AIR



steam    steam    polling


          chat
        BlazeDS
AIR        AIR        AIR
Producer   Consumer   Consumer




 steam      steam      polling


             chat
           BlazeDS
AIR




 BlazeDS
AIR
           channel
       steam    polling




 BlazeDS
AIR
                      channel
Producer          steam    polling




            BlazeDS
distination: chat
{ message: “hoge” }


                      AIR
                                 channel
    Producer                 steam    polling




                       BlazeDS
distination: chat
{ message: “hoge” }


                      AIR
                                   channel
    Producer                  steam     polling




                       BlazeDS


                            chat
channels
                            steam    polling



private var channels:Array = [];


var streaming_amf:StreamingAMFChannel =
 new StreamingAMFChannel("my-streaming-amf", "http://127.0.0.1:
8400/instantmessenger/messagebroker/streamingamf");
channels.push(streaming_amf);


var polling_amf:AMFChannel =
 new AMFChannel("my-polling-amf", "http://127.0.0.1:8400/instant
messenger/messagebroker/amfpolling");
polling_amf.pollingEnabled = true;
polling_amf.pollingInterval = 3000;
channels.push(polling_amf);
メッセージの接続先
/コンテキスト/messagebroker/チャンネル
Producer
                                      channels
                      (chat)




var prod:Producer = new Producer();


prod.destination = "chat";
prod.channelSet = new ChannelSet();
for(index in channels) {
  prod.channelSet.addChannel(channels[index]);
}
prod.connect();
メッセージを送ってみる
Producer
 { message: “hoge” }
                         (chat)




var message:IMessage = new AsyncMessage();
message.body = new Object();
message.body.message = "hoge";


prod.send(message);
メッセージは
 シリアライズできる任意の
オブジェクトを送ることができる
送信部分は出来上がり
続いて受信部分
AIR




  BlazeDS


chat
AIR
                channel
             steam   polling




  BlazeDS


chat
AIR
                    channel
Consumer         steam   polling




       BlazeDS


    chat
log.value += message

                 ハンドラー登録
                       AIR
                                channel
    Consumer                 steam   polling




              BlazeDS


          chat
log.value += message

                ハンドラー登録
                       AIR
                                channel
    Consumer                 steam   polling




              BlazeDS


{ message: “hoge” }
           chat
log.value += message

                  ハンドラー登録
                         AIR
呼び出し
                                  channel
       Consumer                steam   polling




                BlazeDS


  { message: “hoge” }
             chat
Consumer
 messageHandler                      channels
                    (chat)



var cons:Consumer cons = new Consumer();
cons.destination = "chat";


cons.channelSet = new ChannelSet();
for(var index:String in channels) {
  cons.channelSet.addChannel(channels[index]);
}
cons.addEventListener(MessageEvent.MESSAGE,
messageHandler);
messageHandler




function messageHandler(e:MessageEvent):void
{
  log.text += e.message.body.message + "n";
}
動かしてみよう
クリック
クリック
直接ではなく
BlazeDSを通して通信
Rubyからもメッセージを
    送ってみよう
サーバでProducerを
  動かせばOK
でもJavaじゃなくてRubyで
JRuby
TomcatにJRubyを
 インストールする
Tomcat6へJRubyを
導入する方法は下記を参考に
         しました
http://www.okisoft.co.jp/
    esc/ruby/jservlet
Servlets in JRuby on Tomcat
RubyでServletが書けます
もちろん普通にBlazeDSも
   呼び出せます
Rubyからメッセージを投稿
      Send.rb
必要なクラスを読み込み
include_class "flex.messaging.MessageBroker"
include_class "flex.messaging.util.UUIDUtils"
include_class "flex.messaging.messages.AsyncMessage"
なにもしないSendクラス
include_class "flex.messaging.MessageBroker"
include_class "flex.messaging.util.UUIDUtils"
include_class "flex.messaging.messages.AsyncMessage"


class Send < HttpServlet
 def doPost(req, res)
   res.content_type = 'text/html; charset="UTF-8"'
   // ∼ ここに処理を追加 ∼
   wf = res.writer
   wf.println 'OK'
 end
end
メッセージ送信部分

broker = MessageBroker.getMessageBroker(nil)


msg = AsyncMessage.new
msg.setDestination "chat"
msg.setClientId UUIDUtils.createUUID
msg.setMessageId UUIDUtils.createUUID
msg.setTimestamp Time.now.to_f*1000


message_body = req.get_parameter("message") ¦¦ ""
msg.setBody({'message' => message_body})
broker.routeMessageToService(msg, nil)
メッセージ送信できあがり
Rubyからでも簡単に
 BlazeDSが扱える
クライアントがActionScript3
   サーバがJ2EEだと
  言語の違いが大きすぎる
AS3と組み合わせるなら
 Rubyの方が合ってる
さて次は
ログを取る機能を実装
続きはWebで
「Adobe Developers
Connection」に掲載予定
BlazeDSの正式版が
出てからだから3月になるかも
今回の資料とソースは
blog.masuidrive.jpで
感想
既にLCDSとして枯れた
  コードをベースにして
メッセージングができるのは
    大変うれしい
JRubyとの合わせも
     簡単
でもそもそも
JRubyが....
AIRにはグラフ系コンポーネ
  ントも揃っているので
ログやノーティファイアを
  作るのが面白そう
Ajaxもサポートしているので
 Webでリアルタイムインタ
  フェースを作るときには
      検討価値大

More Related Content

Similar to AIR+Blaze+Ruby

AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
SORACOM, INC
 
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
ssogabe
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
Amazon Web Services Japan
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
 

Similar to AIR+Blaze+Ruby (20)

Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Android T2 on cloud
Android T2 on cloudAndroid T2 on cloud
Android T2 on cloud
 
『RIA開発におけるサービス開発のイロハ』
 『RIA開発におけるサービス開発のイロハ』 『RIA開発におけるサービス開発のイロハ』
『RIA開発におけるサービス開発のイロハ』
 
RIA開発におけるサービス開発のイロハ
RIA開発におけるサービス開発のイロハRIA開発におけるサービス開発のイロハ
RIA開発におけるサービス開発のイロハ
 
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
 
AWS Black Belt Tech シリーズ 2015 - AWS IoT
AWS Black Belt Tech シリーズ 2015 - AWS IoTAWS Black Belt Tech シリーズ 2015 - AWS IoT
AWS Black Belt Tech シリーズ 2015 - AWS IoT
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
 
Azure Media Services 大全
Azure Media Services 大全Azure Media Services 大全
Azure Media Services 大全
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
20120423 hbase勉強会
20120423 hbase勉強会20120423 hbase勉強会
20120423 hbase勉強会
 
[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント
[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント
[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
 
JAWS-UG アーキテクチャ専門支部 re:Invent Management Tools ダイジェスト
JAWS-UG アーキテクチャ専門支部 re:Invent  Management Tools ダイジェストJAWS-UG アーキテクチャ専門支部 re:Invent  Management Tools ダイジェスト
JAWS-UG アーキテクチャ専門支部 re:Invent Management Tools ダイジェスト
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
 

Recently uploaded

Recently uploaded (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

AIR+Blaze+Ruby