Part II: Знайомство з інтеграцією Spring з BlazeDS

Доступ до Spring бінів із Flex програми

Якщо Flex клієнти можуть отримати віддалений доступ до Java об'єктів, використовуючи BlazeDS та якщо Spring біни є лише простими об'єктами Java, то чи не можна доступитись до Spring бінів з Flex клієнта? Майже…

По замовчуванню, ви налаштовуєте віддалені об'єкти BlazeDS в конфігураційному файлі remoting-config.xml, що знаходиться в WEB-INF\flex. Наприклад, щоб зробити Java клас ProductService віддалено доступним для Flex програми під логічним ім'ям «product», тоді слід визначити адресат (destination) наступним чином:

<destination id="product">
    <properties>
        <source>my.package.ProductService</source>
    </properties>
</destination>

Цей адресат дозволяє Flex програмі викликати публічні методи ProductService. Ось мінімалістська Flex програмка, що заповнює таблицю даних переліком продуктів, отриманих віддаленим викликом методу FindAll() в класі ProductService.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:RemoteObject id="ro" destination="productService"/>

    <mx:DataGrid dataProvider="{ro.findAll.lastResult}" width="100%" height="100%"/>

    <mx:Button label="Get Data" click="ro.findAll()"/>

</mx:Application>

Проблема полягає в тому, що за замовчуванням, BlazeDS піклується про створення екземплярів та управління життєвим циклом віддалених об'єктів, визначених у remoting-config.xml. Водночас вся ідея за Spring IoC якраз полягає у створенні компонентів або об'єктів контейнером (та визначення їхніх залежностей). Таким чином ключем до інтеграції Spring та BlazeDS є пошук найбільш зручної схеми застосування даних сервісу, представлених BlazeDS, щоб дозволити Spring контейнерові керувати конфігурацією, екземплярами і життєвим циклом віддалених об'єктів.

Старий принцип: SpringFactory

BlazeDS надає загальні механізми інтеграції та вбудування (pluggability), засновані на шаблоні Factory. Ви можете підключати спеціальну фабрику у визначенні адресату щоб делегувати екземпляр та управляти життєвим циклом основного віддаленого об'єкту відносно іншої підсистеми. Роллю фабрики є надання готових до використання екземплярів об'єктів для BlazeDS замість того, щоб дозволяти BlazeDS створювати екземпляр цих компонентів. Для створення фабрики слід створити клас, який реалізує інтерфейс flex.messaging.FlexFactory та реалізувати метод lookup(), що використовується BlazeDS для отримання екземпляру віддаленого об'єкту. По суті, метод lookup() може конструювати новий екземпляр або одержувати його іншим чином.

Історично, Adobe надала класові SpringFactory, що забезпечує BlazeDS повною ініціалізацією (залежність введень), екземпляри об'єктів, отриманих Spring контейнером.

Налаштування адресату для делегування екземпляру віддаленого об'єкта до Spring відбувалась в два етапи.

  1. Реєстрація Spring фабрики в WEB-INF/flex/services-config.xml:
<factories>
    <factory id="spring" class="flex.samples.factories.SpringFactory"/>
</factories>
  1. Налаштування адресату для використання фабрики:
<destination id="myService">
   <properties>
      <factory>spring</factory>
         <source>myBean</source>
   </properties>
</destination>

Хоча це й забезпечує базову інтеграцію між BlazeDS і Spring, проте підхід Spring має ряд недоліків:

  • Підхід «Пошуку Залежностей», описаний вище, суперечить Spring методу "Ін'єкції Залежностей".
  • Об'єкти повинні бути налаштовані двічі: один раз в BlazeDS файлі remoting-config.xml і знову в контексті файлу Spring програми.
  • Загальна конфігурація системи поширюється на декілька файлів. BlazeDS налаштовується в web.xml та remoting-config.xml, тоді як Spring налаштовується в контекст файлі XML своєї власної програми.
  • Інтеграція обмежується основним «віддаленним викликом» і не охоплює інших важливих аспектів, таких як безпека та обмін повідомленнями.

Проект Інтеграції Spring BlazeDS

Партнерство SpringSource та Adobe спрямоване на впорядкування інтеграції між Spring і BlazeDS. Ця співпраця призвела до нових підпроектів у web-портфоліо Spring: проект інтеграції Spring BlazeDS.

Замість двох паралельних систем із своїми власними підходами та елементарними комунікаціями, мета проекту полягала в тому, щоб дозволити Spring керувати BlazeDS («спосіб Spring») так само, як Spring керує іншими елементами програми, таким чином забезпечити більш глибокий та цілісний рівень інтеграції між цими двома технологіями.

Проект інтеграції Spring BlazeDS все ще знаходиться в стадії розробки, але наразі доступний білд Milestone 2 вже втілює цю концепцію із наступними характеристиками:

MessageBroker, що є наріжним каменем в BlazeDS механізмі, налаштований і завантажений як Spring-керований бін і не повиний бути налаштованим в web.xml.

Повідомлення Flex направляється до MessageBroker через Spring DispatcherServlet.

Віддалені об'єкти налаштовані «способом Spring» у контексті файлу конфігурації програми. Не потрібен файл remoting-config.xml при роботі з BlazeDS та Spring.

Інтеграція Spring Security гарантує, що ви можете захистити Spring-керовані біни, представлені як віддалені об'єкти, тільки якщо можна б було убезпечити будь-які інші Spring-керовані кінцеві точки (end points) та якщо можна було б надати інформацію для логування програми Flex через channelSet.login() API.

Оригінал тут.

Коментарі 1

xaos - 16 вересня 2009, 14:50

Реліз вийшов на початку червня (http://blog.springsource.com/2009/06/10/)

Коментувати
© 2009 - 2020, Розробка - соціальна ІТ спільнота.
Контакти: info@rozrobka.com
Правила користування