Untitled Document

oracle_enterprise-ria-flex-weblogic-server_clip

Судхансу Пати

Построение полнофункциональных интернет-приложений уровня предприятия

с использованием Flex и WebLogic Server

(Building Enterprise RIA Using Flex and WebLogic Server

by Sudhansu Pati )

Источник: сайт публикаций о технологиях корпорации Oracle, 21.04.2008, http://www.oracle.com/technology/pub/articles/dev2arch/2008/04/enterprise-ria-flex-weblogic-server.html

Резюме

В этой статье содержатся рекомендации для построения полнофункциональных интернет-приложений ( Rich Internet Applications – RIA ) корпоративного уровня с использованием для этой цели Flex и WebLogic Server компании BEA с упором на организацию данных и обмен сообщениями. В учебных примерах ( Tutorial ) объясняются шаги, необходимые для конфигурирования демонстрационного проекта Flex Data Services в среде BEA Workshop Studio . Если вы хотите испытать построенное автором полноценное приложение Flex , которое выполняется в среде WebLogic Server, кликните www.golf4geeks.com.

Введение

По мере развития полнофункциональных интернет-приложений ( RIA ) разработчики и архитекторы сталкиваются с проблемой объединения RIA с «доморощенными» серверными приложениями. Если приложение на стороне сервера построено с использованием стандартных технологий типа J2EE и . NET , часть связанного с интеграцией бремени минимизируется за счет использования поставляемых продавцом компонентов.

Хотя имеется несколько платформ RIA , которые можно рассматривать при построении приложений RIA следующего поколения, одним из главных фигурантов является платформа Flash runtime . Технология Adobe Flex предлагает получившую название Flex Builder среду разработки WYSIWYG для построения приложений RIA , которые могут выполняться во Flash-плеере.

Данные, обмен сообщениями, защищенность и производительность – вот некоторые из критичных соображений при проектировании корпоративных приложений. И полнофункциональные интернет-приложения не являются исключением из этого правила. Чтобы удовлетворить вышеупомянутым конструктивным требованиям, можно использовать WebLogic Server в качестве среды выполнения. Этот сервер не только предлагает одну из лучших платформ J2EE в терминах надежности, доступности, масштабируемости и производительности ( reliability , availability , scalability , and performance – RASP ), но также предлагает такие ценные корпоративные функциональные возможности, как: JMS и управление данными.

Flex обеспечивает механизмы для оснащения Web- и http- сервисов. Однако для построения приложений масштаба предприятия следует подумать об использовании платформы LiveCycle Data Services Platform компании Adobe . Кратко говоря, LiveCycle Data Services Platform обеспечивает данные, обмен сообщениями и возможности удалённого взаимодействия для взаимодействия с компонентами J2EE быстрым, безопасным и надежным способом.

Управление данными с использованием Flex Data Services , Hibernate и WebLogic Server

Система Flex Data Services поставляется с адаптером, который называется JavaAdapter и помогает надежно управлять данными между клиентскими приложениями и базой данных через сервер WebLogic Server . У JavaAdapter имеются два ассемблера – HibernateAssembler и SQLAssembler . В предлагаемом примере показан образец HibernateAssembler , который может обращаться к Hibernate Entities и выполнять Hibernate Queries . Если будет принято решение об использовании другого средства ORM , можно написать адаптер, соответствующий вашим требованиям.

Получить доступ к данным в Flex -приложении и манипулировать ими просто. Используя тэг MXML или код ActionScript , можно создать компонент DataService и выполнить операцию fill () к Hibernate Query (или запросу SQL , если используется SQLAssembler ). Операция fill заполняет ArrayCollection. Если вы манипулируете объектами в ArrayCollection, Flex Data Services автоматически синхронизирует данные с основной базой данных. Когда множество клиентов пробуют обновить одни и те же данные, конфликты данных разрешает функциональный механизм разрешения противоречий Flex Data Services .

В Tutorial 1 ( http://www.oracle.com/technology/pub/articles/dev2arch/2008/04/enterprise-ria-flex-weblogic-server.html#tutorial1 ) показан пример управления данными с использованием Flex Data Services , Hibernate и WebLogic JMS .

oracle_enterprise-ria-flex-weblogic-server_clip

Управление данными с использованием Flex Data Services , Hibernate и WebLogic Server

Обмен сообщениями с использованием Flex Data Services и WebLogic JMS Server

В проекте Flex Data Services имеется адаптер по имени JMSAdaper , который делает возможным взаимодействие между клиентскими приложениями и сервером JMS . Кроме того, Flex предлагает другой адаптер (по имени ActionScriptAdapter ) , который выступает брокером сообщений между компонентами производителя и потребителя Flex , используя стандартную систему обмена сообщениями Adobe . Заметьте, что эта, используемая по умолчанию система обмена сообщениями работает не на основе JMS . В приложениях Flex вы можете определить как компоненты производителя, так и компоненты потребителя, которые будут обмениваться сообщениями, используя либо стандартную систему обмена сообщениями, либо внешнюю систему JMS .

В Tutorial 2 ( http://www.oracle.com/technology/pub/articles/dev2arch/2008/04/enterprise-ria-flex-weblogic-server.html#tutorial2 ) показан пример обмена сообщениями с использованием WebLogic JMS .

oracle_enterprise-ria-flex-weblogic-server_clip

Обмен сообщениями во Flex с использованием WebLogic JMS

Демонстрационное приложение в вашей среде

В примере в качестве базы данных используется Oracle . Загрузить Oracle 10g Express Edition можно по ссылке : http://www.oracle.com/technology/software/products/database/index.html

Не требуется инсталлировать Adobe LiveCycle Data Services , потому что в примере уже содержатся ресурсы из LiveCycle DS . Следующая ниже ссылка предлагается просто как справочная информация:

- загрузка Adobe LiveCycle Data Services Express Edition http://www.adobe.com/cfusion/tdrc/index.cfm?product=livecycle%5Fdataservices

Создание домена WebLogic Domain

Действия

Значения

Запуск WebLogic Configuration Wizard ( окно 1)

Создание нового домена WebLogic

WebLogic Configuration Wizard (окно 2)

Сервер WebLogic Server

WebLogic Configuration Wizard (окно 3)

Имя пользователя: weblogic

Пароль: weblogic

WebLogic Configuration Wizard (окно 4)

Инструментарий разработки: Sun SDK

WebLogic Configuration Wizard (окно 5)

Нет

WebLogic Configuration Wizard (окно 6)

Имя домена : flexdomain

Местоположение домена : <WebLogic_Install_Dir>/user_projects/domains

Создание конфигурации JMS в сервере WebLogic Server

Действия

Значения

Запуск WebLogic Administration Console Кликнуть

Services → Messaging → JMS Servers

Кликнуть Lock and Edit

Кликнуть New

Имя: FlexDemoJMSServer

Постоянное хранилище: нет

Кликнуть Next

Адресат : AdminServer

Кликнуть Finish

Кликнуть JMS Modules на левой панели.

Кликнуть New на правой панели.

Имя: FlexDemoJMSModule

Кликнуть Next

Выберите Admin Server

Кликнуть Next

Сделайте отметку в экранной кнопке

Would you like to add resources to this JMS system module

Кликнуть Finish

Кликнуть New

Выберите Topic

Кликнуть Next

Имя: FlexDemoTopic

Имя JNDI : FlexDemoTopic

Шаблон: Нет

Кликнуть Next , а затем Кликнуть

Create a New Subdeployment

Имя подразвертывания: FlexDemoSubdep

Кликнуть OK

Адресаты: FlexDemoJMSServer

Кликнуть Finish.

Кликнуть Activate Changes

Создание базы данных и источника данных WebLogic

Действия

Значения

Открыть браузер администратора Oracle http:// localhost :8080/ apex

войти в систему как system /<пароль>

Создать нового пользователя

Имя пользователя: flexdemo

Пароль: password

Выйти из системы и снова войтие в нее как flexdemo / password

Кликнуть SQL → SQL Commands → Enter Command

CREATE TABLE CUSTOMER(
CUSTOMERID VARCHAR2(16) NOT NULL PRIMARY KEY,
EMAIL VARCHAR2(50) NOT NULL,
FIRSTNAME VARCHAR2(20) NULL,
LASTNAME VARCHAR2(20) NULL
);

Кликнуть Run

Откройте WebLogic Admin Console http://localshot:7001/console

войти как weblogic/weblogic

Кликнуть Services → JDBC → Data Sources в левой панели . Кликнуть Lock and Edit

Кликнуть New из правой панели

Имя : CustomerDS

Имя JNDI: CustomerDS

Тип базы данных : Oracle

Драйвер базы данных: Драйвер Oracle (тонкий) версии: 9.0.1,9.2.0,10

Кликнуть Next

Поддерживает глобальные транзакции

Однофазный контроль завершения транзакций

Кликнуть Next

Имя базы данных: XE

Имя хоста: localhost

Порт: 1521

Имя пользователя базы данных: flexdemo

Пароль : password

Кликнуть Next

Кликнуть Test Configuration

Кликнуть Next

Выберите AdminServer

Кликнуть Finish , а затем Кликнуть Activate Changes

Настройте проекты Workshop Studio

Действия

Значения

Запустить Workshop Studio 10.2. В каталоге < WorkshopStudio _ Install _ Dir > \ user _ projects \ workspaces \ FlexDemo

создать рабочее пространство FlexDemo

Кликнуть File → New → Project

Выбор Flex Project

Кликнуть Next

Выбор FlexDataServices

Выбор Compile application locally in Flex Builder

Кликнуть Next

Снять отметку с кнопки Use default local Flex Data Services location

Найдите каталог <WLS_Install_Dir>\user_projects\domains\ flexdomain\autodeploy\flexdemo

Кликнуть OK

Корневой URL: http://localhost:7001/flexdemo

Корень контекста : /flexdemo

Кликнуть Next

Снять отметку с кнопки Use default location

Найдите каталог <WLS_Install_Dir> \user_projects\domains\ flexdomain \autodeploy\flexdemo\flexclient

Кликнуть Next

Удалить bin из output Folder

Кликнуть правой кнопкой мыши по flexclient → Properties → Flex Build Path

Кликнуть Remove to remove the entry that points to fds.swc , а затем Кликнуть Add SWC Folder. Найдите каталог <WLS_Install_Dir> \user_projects\domains\flexdomain\ autodeploy\flexdemo\ <WEB-INF>\flex\libs

Кликнуть Finish

Кликнуть File → New → Project

Выбрать Java Project

Кликнуть Next

Выбрать Create project from existing source.

Найти каталог <WLS_Install_Dir> \user_projects\domains\flexdomain\ autodeploy\flexdemo/WEB-INF

Кликнуть OK → Next → Finish

Кликнуть правой кнопкой мыши по flexproject → Project → Properties → Java Build Path → Libraries

Удостовериться, что пути для wlclient . jar и wljmsclient . jar правильны.

Кликнуть Windows → Show View → Others → Servers . Кликнуть правой кнопкой мыши под панелью Servers New → Server

Выбрать BEA WebLogic Server 10.0.

Кликнуть Next

Домашняя страница WebLogic: <WLS_Install_Dir> \wlserver100

Кликнуть Next

Домашняя страница домена : <WLS_Install_Dir> \user_projects\domains\flexdomain

Кликнуть Finish

Кликнуть правой кнопкой мыши по flexclient . mxml → Run As → Flex Application , чтобы запустить показ демонстрационных версий.

Tutorial 1: Управление данными с использованием Flex Data Services , Hibernate и сервера WebLogic Server

Как только вы создали источник данных WebLogic (обратитесь к Set up the database and WebLogic Data Source ( http://www.oracle.com/technology/pub/articles/dev2arch/2008/04/enterprise-ria-flex-weblogic-server.html#setup_the_database ) ), следующим шагом должно стать конфигурирование конфигурационных файлов Data Services .

Шаг 1 : Первый подлежащий проверке конфигурационный файл – это файл service-config.xml, расположенный под каталогом flexproject / flex .

Удостоверьтесь, что у вас имеется следующий элемент.

<service-include file-path="data-management-config.xml" />

Шаг 2 : В файле data-management-config.xml обеспечьте имя JNDI источника данных WebLogic и другие параметры . Ниже приводится текст следующего доступного файла data - management - config . xml .

<?xml version="1.0" encoding="UTF-8"?> 
  <service id="data-service"  class="flex.data.DataService"> 
  
  <adapters> 
    <adapter-definition  id="actionscript" 
      class="flex.data.adapters.ASObjectAdapter" default="true"/> 
    <adapter-definition  id="java-adapter" 
      class="flex.data.adapters.JavaAdapter"/> 
  </adapters>

  <default-channels> 
    <channel ref="my-amf"  /> 
    <channel ref="my-polling-amf" /> 
  </default-channels> 
  
  <destination id="customer-dataservice"> 
    <adapter ref="java-adapter"/> 
    <properties>
      <source>flex.data.assemblers.HibernateAssembler</source> 
      <scope>application</scope> 
      <metadata> 
        <identity property="CUSTOMERID"/> 
      </metadata> 
      <network> 
        <session-timeout>20</session-timeout> 
        <paging enabled="false"  pageSize="10"/>
        <throttle-inbound  policy="ERROR"  max-frequency="500"/> 
        <throttle-outbound  policy="REPLACE"  max-frequency="500"/> 
      </network>
      <server> 
        <update-conflict-mode>PROPERTY</update-conflict-mode> 
        <delete-conflict-mode>OBJECT</delete-conflict-mode> 
        <hibernate-entity> 
          com.j2ee.demo.beans.Customer 
        </hibernate-entity> 
        <fill-configuration> 
          <allow-hql-queries>false</allow-hql-queries>
          <use-query-cache>false</use-query-cache> 
        </fill-configuration> 
      </server> 
    </properties> 
  </destination> 

  <properties> 
    <use-cluster-broadcast>true</use-cluster-broadcast> 
  </properties> 

</service>

Шаг 3 : Вы должны создать Hibernate Entities , конфигурационные файлы и Hibernate Queries (если они используются во Flex ). В Workshop Studio предлагается визард ( wizard) для автоматического создания Hibernate Entities и конфигурационных файлов. В Workshop Studio перейдите к проекту Flex . Перейдите к файлам hibernate.cfg.xml , Customer . java и Customer.htm.xml . Обратите внимание на то, что в файле Customer.htm.xml определен з апрос Hibernate Query , который называется getAllCustomers . Этот запрос используется в файле DataView . mxml .

Шаг 4 : В приложении Flex можно создать компонент DataService , отсылающий к имени пункта назначения в файле data-management-config.xml . Операция fill () получает данные из базы данных и заполняет ArrayCollection. Если вы обновляете объекты в ArrayCollection, то «за кулисами» производится автоматическая синхронизация базы данных. Следующий фрагмент кода является примером заполнения ArrayCollection для customers данными из таблицы базы данных CUSTOMER .

<?xml  version="1.0" encoding="utf-8"?>
  <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
  width="800"  height="500" creationComplete="initiateDataView();"> 
  
<mx:Script> 
 
 <![CDATA[
    import com.flex.demo.beans.Customer;
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.events.FaultEvent; 
    import mx.controls.Alert;
    import mx.core.Application; 

    private function initiateDataView():void
    { 
      ds.fill(customers,"getAllCustomers",{}); 
    } 
    private function customerResultHandler(event:ResultEvent):void 
    { 
    } 
    private function customerFaultHandler(event:FaultEvent):void
    { 
      Alert.show(event.fault.toString()); 
    }
  ]]>
  </mx:Script> 

  <mx:ArrayCollection id="customers" /> 

  <mx:DataService id="ds"  destination="customer-dataservice" 
      result="customerResultHandler(event)" 
      fault="customerFaultHandler(event)" 
      autoCommit="false"/>  

  </ mx:TitleWindow>

Шаг 5: Кликните правой кнопкой мыши по flexclient.mxml → Run As → Flex Application . Вы должны увидеть в браузере показанный ниже ГИП. Введите некоторые значения в расположенную слева форму, а затем кликните Submit . Вы должны увидеть запись в расположенной справа сетке данных ( data grid ), а также в таблице базы данных.

oracle_enterprise-ria-flex-weblogic-server_clip

Когда вы нажимаете на кнопку передачи на выполнение ( submit ), во Flex создается новый объект Customer и добавляется к ArrayCollection – customers . Система Flex Data Services автоматически синхронизирует новую запись из ArrayCollection с базой данных.

Tutorial 2: Обмен сообщениями с использованием Flex Data Services и JMS WebLogic

Как только вы создали JMS Topic (отсылаем вас к Create a JMS configuration in WebLogic Server ), следующий шаг должен обновить конфигурационные файлы сервисов данных.

Шаг 1: Первый подлежащий проверке конфигурационный файл service-config.xml расположен под каталогом flexproject / flex , как показано на приведенном ниже рисунке:

Удостоверьтесь, что у вас имеется следующий элемент:

<service-include file-path="messaging-config.xml" />

Шаг 2: В файле messaging-config.xml обеспечьте имя WebLogic JNDI Topic и другие параметры . В примере предлагается следующий файл messaging-config.xml .

<?xml version="1.0"  encoding="UTF-8"?>
  <service id="message-service"
    class="flex.messaging.services.MessageService">
  <adapters>
    <adapter-definition id="actionscript"
      class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" 
      default="true" />
    <adapter-definition id="jms"
      class="flex.messaging.services.messaging.adapters.JMSAdapter"  />
  </adapters>

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

  <destination id="FlexDemoTopic">
    <properties>
      <server>
        <durable>false</durable>
        <durable-store-manager> 
          flex.messaging.durability.FileStoreManager 
        </durable-store-manager> 
      </server> 
      <jms> 
        <message-type>javax.jms.TextMessage</message-type>
        <connection-factory>weblogic.jms.ConnectionFactory</connection-factory>
        <destination-jndi-name>FlexDemoTopic</destination-jndi-name> 
        <destination-name>FlexDemoTopic</destination-name> 
        <delivery-mode>NON_PERSISTENT</delivery-mode> 
        <message-priority>DEFAULT_PRIORITY</message-priority> 
        <acknowledge-mode>AUTO_ACKNOWLEDGE</acknowledge-mode> 
        <transacted-sessions>false</transacted-sessions> 
      </jms> 
    </properties>
    <channels> 
      <channel ref="my-polling-amf"  /> 
    </channels> 
    <adapter ref="jms" /> 
  </destination> 
</service>

Шаг 3: Постройте приложение Flex , использующее конфигурации Data Servises , определенные в файле messaging-config.xml . Во Flex имеется функциональная возможность генерировать и потреблять сообщения JMS . Следующие фрагменты кода показывают, как генерировать и потреблять сообщения в ActionScript и MXML .

Сгенерируйте сообщения JMS во Flex , используя ActionScript

package com.flex.demo.messaging 
  {
  import mx.messaging.*; 
  import mx.messaging.messages.*; 
  import mx.messaging.events.*; 
  
  public class JMSLogger 
  { 
    private var producer:Producer  = new Producer();

    public function sendToJMS(msg:String):void { 
      var message:AsyncMessage = new AsyncMessage(); 

      message.body = msg; 
      producer.destination="FlexDemoTopic"; 
      producer.id="FlexJMSProducer";
      producer.send(message);
    }
  }
}
            
Употребите сообщения JMS во Flex, используя MXML

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
  width="600"  height="400"
  creationComplete="initiateService()">
<mx:Script> 
  

  <![CDATA[
    import mx.messaging.messages.AsyncMessage;
    import mx.messaging.events.MessageFaultEvent;
    import mx.messaging.messages.IMessage;
    import mx.controls.Alert;

    public function initiateService():void
    { 
      consumer.subscribe(); 
    } 
    private function messageHandler(message:IMessage):void
    {
      Alert.show(message.body.toString();
    }
    private function faultHandler(event:MessageFaultEvent):void { 
      Alert.show(event.message.toString()); 
    } 

]]>
</mx:Script>

  <mx:Consumer id="consumer" destination="FlexDemoTopic"
  message="messageHandler(event.message)"
  fault="faultHandler(event)"/>

</mx:TitleWindow>

Шаг 4: Есть две другие конфигурации, о которых следует помнить.

  • flex-config.xml: Удостоверьтесь, что корень контекста соответствует имени папки, размещенной под каталогом < WLS _ Install _ Dir > \ user _ projects \ domains \ flexdomain \ autodeploy
    < context - root >/ flexdemo </ context - root >

  • application.xml: Этот файл расположен под каталогом <WLS_Install_Dir> \user_projects\domains\flexdomain\autodeploy\flexdemo \META-INF

    Удостоверьтесь , что корень контекста соответствует имени папки , размещенной под каталогом <WLS_Install_Dir>\user_projects\domains\flexdomain\autodeploy

    <context-root>flexdemo</context-root>

    Шаг 5: Кликнуть правой кнопкой мыши по flexclient . mxml → Run As → Flex Application . Вы должны увидеть показанный ниже ГИП. Введите на левой панели какой-нибудь текст и подождите несколько секунд, чтобы сообщение появилось в сетке данных.

    Когда вы кликаете по кнопке Submit , введенное сообщение посылается в тему на сервере WebLogic Server , которая называется FlexDemoTopic . Затем потребитель подбирает сообщение JMS и отображает его в сетке данных.

    Поиск неисправностей

    Ошибка: Если при выполнении демонстрационного приложения вы получаете следующую ошибку, следуйте приведенным ниже правилам ее разрешения:

    VerifyError : Error #1053: Illegal override of subtopic in mx . messaging . Consumer (Ошибка #1053: Несанкционированное перекрывание подтемы в mx . messaging . Consumer

    Разрешение:

    Кликнуть правой кнопкой мыши по flexclient → Properties → Flex Build Path . Удалите элемент, который указывает на fds . swc . Кликнуть Add SWC Folder . Перейдите к каталогу <WLS_Install_Dir> \user_projects\domains\flexdomain\autodeploy\flexdemo \ <WEB-INF> \flex\libs

    Заключение

    Чтобы строить мощные полнофункциональные Интернет-приложения уровня предприятия, следует воспользоваться богатством Flex и функциональными возможностями сервера WebLogic Server уровня предприятия. Визарды и функциональные возможности WYSIWYG BEA Workshop Studio устраняют потребность в обширном обучении и повышают эффективность обучения разработчиков при построении сложных RIA .

  • E-mail this page