Введение
Flex - это очень продвинутая версия всем хорошо известного Flash, откомпилированный байт-код которого работает на Flash интерпретаторах. Т.е. вы используете приличный язычек для того, чтобы написать толстенького клиентика, а потом компилируете его в SWF файл который работает как обычный Flash. С Flex-ом есть только одна засада: приличный IDE для него платный. Flex компилятор сам по себе бесплатный.
Flex к RoR можно привинтить по крайней мере 3 способами:
- Самописным сервисом
- WebService возможностями RoR
- При помощи проприетарного бинарного протокола AMF3 или AMF0 работающего поверх HTTP
О первом способе говорить ничего не буду, т.к. никогда не занимался, 2-й дествительно работает без всяких добавочных библиотек, проблема только в том, что он будет всегда гонять тучки жирненького XML-а по сети, а вот о 3-м способе сейчас Вы сможете узнать поподробнее.
Сначала немножко о стандартах:
AMF0 - это доставшийя в наследство от Flash слегка устаревший протокольчик, необходимый только если вы из каких-то мазохистских соображений вдруг решите писать на Flash вместо Flex. AMF3, соответственно, более новый и продвинутый протокольчик, которым вы, по-видимому, и будете пользоваться. Мне известен только один плагин для RoR который позволяет использовать AMF3 для доступа из флекса к рубиевским серверным кодам: это WebORB.
WebORB для Ruby on Rails - это реализация RPC функциональности Adobe’s Flex Data Services. Используя WebORB Ruby разработчик может интегрировать клиентские приложения на Flex с сервисами, заделоиными в Rails приложениях.
Этот пост предлагает обзор процесса создания Flex RPC клиента, используя Flex Builder 3.0 и соединения его с приложением на Ruby on Rails. В результате рассмотренных шагов Вы получите приложение на Flex, общающееся с Ruby объектом в Rails через WebORB.
Инсталляция WebORB
Убедитесь, что у Вас уже установлено:
- Ruby версии 1.8 или новее
- Ruby on Rails версии 1.1.4 или новее
Здесь находится достаточно полная документация по WebORB и его привинчиванию к RoR.
Мы же с вами разберем эту статейку о том как начать работу с WebORB. Часть картинок взята с оригинального сайта (http://www.themidnightcoders.com/weborb/rubyonrails/gettingstarted.htm).
Итак, задача: установить WebORB плагин к RoR и законнектится Flex-овым приложением к RoR серверу. Сразу оговорка: мы будем использовать Flex Builder для того, чтобы создать Flex приложение. Как поставить RoR описано тут.
Создание Rails приложения
После того, как Ruby and Rails и Flex Builder у Вас уже установлены, можно перейти к созданию приложения Rails.
Создаем новое приложение так:
| > rails myrailsapp |
Затем переходим из текущей папки в папку новосозданного приложения и запускаем команду для скачки и установки плагина WebORB в текущее Rails приложение:
| > ruby script/plugin install http://themidnightcoders.net:8089/svn/weborb |
Теперь WebORB проинсталлирован и готов обрабатывать Flex и Flash удаленные вызовы. Запустите web-сервер Rails приложения командой “ruby script/server”:
| > ruby script/server |
Вы можете проверить, что приложение было создано и плагин проинсталлирован корректно при помощи запуска тестового приложения, которое идет в составе плагина WebORB. Откройте http://localhost:3000/examples/main.html в Вашем браузере. Если приложение загружено корректно, то вы сможете запустить различные тесты. Каждый тест вызывает методы Ruby классов, установленных вместе с плагином WebORB.
Создание Flex приложения
Запускаем Flex Builder, выбираем в меню File->New->Flex project,

Задаем имя проекта, например SampleFlexToRubyProject, выбираем Application Server Type: Other, жмем Next,

Следующий шаг в создании Flex проекта - указать папку, куда будут складываться откомпилированные файлы и URL, который будет соответствовать этой папке. Для того, чтобы папка была доступна из Rails приложения она должна находиться в подпапке /public внутри Вашего приложения (в нашем случае это будет c:\ruby\myrailsapp\public). Не забудьте, что URL должен соответствовать указанной Вами папке.
Выбираем куда у нас будут складываться откомпилированные файлы, например
c:\ruby\myrailsapp\public\examples
жмем Next,

Внизу выбираем URL который будет соответствовать папке c:\ruby\myrailsapp\public\examples, указанной не предыдущем шаге http://localhost:3000/examples, жмем Finish.

После того, как Вы нажали ‘Finish’, Flex Builder создаст пустое Flex приложение. Шаги, описанные ниже, помогут Вам создать Flex приложение которое будет соединяться с Ruby объектом на Rails сервере.
WebORB для Rails содержит пример Flex приложения демонстрирующий работу Flex с WebORB для удаленных вызовов. Скопируйте содержимое файла example.mxml из папки
\public\examples\
в файл mxml который создался во Flex Builder-е. Код приложения соединяется c Ruby объектами и получает информацию о компьютере, на котором работают эти руби-объекты.
Конфигуриция WebORB
Для работы с RoR Flex приложение требует описания классов как сервисов, с которыми будет происходить работа как “destinations”. Они должны быть сконфигурированы в файле remoting-config.xml расположенном в папке \config\WEB-INF\flex. В данном примере приложение использует сервис “InfoService”, определенный для класса “InfoService” следующим образом:
| <destination id=”InfoService”>
<properties> |
Flex Builder подгружает эту конфигурацию во время компиляции проекта.
Когда Вы запускаете приложение во Flex Builder, оно открывается в окне браузера и подгружает Ваше приложение:
http://localhost:3000/examples/SampleFlexToRubyProject.html
Приложение соеденяется с RoR сервисом во время запуска или когда юзер нажмет на кнопку “Send Request”.
Обзор кода
Flex приложение объявляет удаленный объект используя RemoteObject API:
| remoteObject = new RemoteObject(); remoteObject.destination = “InfoService”; remoteObject.getComputerInfo.addEventListener(”result”, onResult); remoteObject.addEventListener(”fault”, onFault); |
Обратите внимание, что имя destination соответствует destination объявленном в remoting-config.xml.
Когда пользователь ныжимает кнопку ‘Get Computer Info’, следующая функция производит удаленный вызов:
| private function getInfo():void { invokeButton.enabled = false; serverInfoText.text = “”; requestIdText.text = “”; osText.text = “”; timeText.text = “”; remoteObject.getComputerInfo(”ABC123″); } |
Когда приложение получает ответ от сервера, Flex вызывает обработчик ответа определенный в тэге “RemoteObject”. В данном примере обработчик ответа достает текстовые поля из объекта, пришедшего с сервера:
| private function onResult(event:ResultEvent):void { var computerInfo:Object = event.result; serverInfoText.text = computerInfo.serverName; requestIdText.text = computerInfo.requestId; osText.text = computerInfo.os; timeText.text = computerInfo.currentTime.toString(); invokeButton.enabled = true; } |
Исходный код для серверной стороны такой:
| require ‘weborb/context’ require ‘rbconfig’ class InfoService |
Соответствие типов
Соответствие типов Flex - Ruby я разбирал тут:
- int - Fixnum
- Numeric - Float
- Date - Time
- String - String
- Boolean - Boolean




(14 votes, average: 4.36 out of 5)








тема
Тёма