Доклад на FPUG #20 - Coldfusion+Flex

Coldfusion is...

  • Coldfusion - это проприетарный сервер приложений корпорации Adobe;
  • Приложения под Coldfusion пишутся на языке CFML (Coldfusion Markup Language);
  • Coldfusion создан как Java веб-приложение и поставляется либо с сервером Adobe JRun, или в виде WAR файла для JEE-сервера или в виде cloud image;

Родословная

  • Первая версия вышла в 1995 году. Разработчик - фирма Allaire - искала способ легкой генерации web-страниц, без использования Perl.
  • Огромный успех Coldfusion на волне дот-комов обусловлен легкостью разработки.
  • С закатом эры доткомов, популярность Coldfusion снизилась, но не изчезла, благодаря хорошей адаптации в корпоративной среде.
  • Для поднятия былой популярности и закрепления в корпоративном секторе, Macromedia (к тому времени купившая Allaire) решила переписать сервер на Java.
  • Adobe не только не придушила Coldfusion, но дала серверу новую жизнь и нашла достойное место в своей "периодической таблице".
  • Coldfusion занимает центровое место в системе документооборота LiveCycle, а также продается как standalone-продукт.
  • Adobe рассматривает Coldfusion как "корпоративный клей", который может "склеить" разнородные среды, сервера, источники данных в единый механизм.

В чем фишка

  • Простой теговый язык. Конструкции, близкие к HTML, легко давались web-мастерам.
  • <cfquery name="users" datasource="database">
    SELECT * FROM users
    </cfquery>
  • Для каждого сложного действия, в Coldfusion был свой тег или функция.

Компоненты - элементы ООП в Coldfusion

  • Coldfusion Components (CFC) - реализация ООП в CFML. Компоненты инкапсулируют свойства и методы, поддерживают наследование.
  • Методы могут быть статическими (вызываться без создания объекта), если в них не используется переменная THIS.
  • Методы могут использовать модификаторы доступа private, package, public и remote.

Использование компонентов для реализации RPC

  • Использовать удаленный вызов методов CFC очень просто - достаточно обозначить метод модификатором доступа "remote".
  • Coldfusion может сама сгенерировать WSDL - для этого достаточно удаленно обратиться к компоненту таким образом: /demo.cfc?wsdl
  • Чтобы обратится к remote методу 'getMessages' в компоненте demo.cfc, достаточно вызывать его таким образом: /demo.cfc?method=getMessages&nick=bob
  • Coldfusion умеет сериализовать данные в WDDX и JSON (последнее удобно для AJAX-вызовов)

Реализация Flash Remoting

  • За remoting отвечает встроенный в Coldfusion сервер BlazeDS
  • BlazeDS - это open-source, написанное на Java веб-приложение, реализующее сериализацию данных и удаленный доступ к Java-объектам. При знании Java, рекомендую поэкспериментировать связку JEE сервер + Java классы + BlazeDS + Flex приложение.
  • Все варианты общения клиента с сервером (polling, long-polling, HTTP streaming) абстрагируются "каналами" ("channels") и описываются в настройках BlazeDS.
  • BlazeDS не поддерживает Comet или RTMP - для реализации этого существует платный Adobe LiveCycle Data Services

Работа с удаленными данными из Flex-приложения

  • s:Webservice - подгружает WSDL, откуда узнает о существующих методах вебсервиса (или CFC в нашем случае). Для каждого удаленного метода, Flex создает динамический метод в объекте Webservice (например для remote-метода getMessages из demo.cfc, Flex создаст метод getMessages в объекте Webservice). <s:WebService id="wsMain" wsdl="http://localhost/demo/demo.cfc?wsdl" />
    wsMain.loadWSDL();
    wsMain.getMessages(nick);
  • s:RemoteObject - работает более эффективно чем Webservice через бинарный протокол AMF. Coldfusion-сервер по-умолчанию имеет настроенный endpoint для работы с клиентами через AMF (http://localhost/flex2gateway), а также преднастроенный destination "ColdFusion", описывающий правила передачи данных. Этот код описывает соединение с CFC "demo.cfc" лежащем в папке /demo на сервере (используется dot-notation принятый в Java-мире). Для каждого метода в CFC создается динамический метод в объекте класса RemoteObject. <s:RemoteObject id="roMain" destination="ColdFusion" endpoint="http://localhost/flex2gateway/" source="demo.demo" />
    roMain.getAllMessages(nick);
  • s:Consumer - работа с messaging gateway. Gateway - это средство общения Coldfusion-сервера с "не-веб" клиентами. Работает по принципу подписки. Удобное средство, если надо рассылать сообщения многим клиентам. Во Flex объект класса Consumer используется для соединения с удаленным сервером и подписки на сообщения. На событие message навешивается обработчик, который работает с пришедшими данными. Симметричный класс - Producer - посылает сообщения серверу через gateway. <s:Consumer id="amfConsumer" destination="ColdFusionGateway" message="amfConsumer_messageHandler(event)" />

Инструкции по развертыванию демонстрации

  • Скачать ZIP-архив со всеми нужными файлами (1,7МБ).
  • Понадобится Coldfusion 8 или 9 - trial или developer версию можно бесплатно скачать на сайте Adobe.
  • Понадобится Flash Builder - trial можно бесплатно скачать на сайте Adobe.
  • Соедините Coldfusion с IIS или Apache, чтобы CFM-файлы обслуживались из корня http://localhost/
  • Положите содержимое папки demo (index.cfm, demo.cfc, demomessaging.cfc) в папку demo под корнем сайта. Таким образом, доступ к ней должен осуществлятся как http://localhost/demo/
  • Создайте в сервере MySQL БД demo и скормите ей скрипт demo.sql
  • В Coldfusion Administrator создайте datasource demo и привяжите его к созданной БД demo.
  • В Coldfusion Administrator создайте gateway - Gateway ID: demo, Type: DataServicesMessaging, CFC Path: [корень вебсервера]/demo/demomessaging.cfc . Этот пустой CFC уже лежит по указанному пути (путь в файловой системе, а не через http)
  • Возьмите Flex-проекты demo-desktop и demo-web, и импортируйте их во Flash Builder. Настройте output folder для проекта demo-web куда вам удобно под корень веб-сервера, а для простоты - прямо ту же папку [корень]/demo, где уже лежат demo.cfc и остальные.

Инструкции по работе демонстрации

  • В БД создано три пользователя - alice, bob и jack. Alice и bob состоят в одной группе, WORLD.
  • Сообщение, посланное в группу видно всем участникам группы.
  • AIR-проект настроен на пользователя alice, Flex-проект настроен на пользователя bob, /demo/index.cfm настроен на пользователя jack.
  • При старте приложений участники загружают все свои сообщения, а потом только новые (поступившие с момента последнего обращения)

Have lots of fun !

Автор: Родион Быков | Опубліковано: 26.07.2010 о 15:26 | Категорії: BlazeDS - ColdFusion 8 - ColdFusion 9 - Flex - Meetings -

Відгуки