2012-02-09 2 views
0

Я предоставляю приложение для работы с ним, которое использует приложение Java EE для бэкэнд, Flash для лицевой части и BlazeDS для подключения двух. Я никогда не использовал Flash или BlazeDS, и я пытаюсь понять, как работает BlazeDS.Как создаются файлы BlazeDS

До сих пор я понимаю, что при подключении к BlazeDS в FlashBuilder сканируется файл remoting-config.xml, чтобы определить, какие службы существуют на конце Java. FlashBuilder запрашивает, какую из этих служб вы хотите импортировать, и какой пакет «пакет услуг» и «пакет типа данных» вы хотите использовать.

Когда вы выберете свой Java ExampleService, BlazeDS создаст _Super_ExampleService.as и ExampleService.as и разместит их в вашем «сервисном пакете». ExampleService.as пуст, но расширяет _Super_ExampleService.as (в основном это служба Flash, которую вы можете использовать для вызова методов в вашей службе Java). Если вам нужно добавить дополнительные методы, вы должны добавить их в ExampleService.as. (Надеюсь, это все правильно, пожалуйста, поправьте меня, если я ошибаюсь)

Моя проблема: я не могу понять, что делает BlazeDS для объектов значения.

Когда вы выбираете ExampleService в FlashBuilder (предположим, что это сервис для объекта Example), какие объекты значения создают BlazeDS? Я ожидал бы Example.as и _SuperExample.as. Однако также появляется _ExampleEntityMetadata.as.

Мои вопросы в основном:

  1. Как BlazeDS определить, какое значение объектов для создания? Проверяет ли он БД, просматривает проект для аннотаций @Entity, сканирует какой-либо файл конфигурации, сканирует службу, чтобы определить, с какими объектами она работает, и т. Д.?
  2. Какова цель каждого из трех классов? Он похож на ту же настройку с сервисом (при необходимости измените не «_ Super»), но теперь есть третий файл.
  3. Я заметил, что объекты значения не всегда соответствуют объектам Java (имеет дополнительные свойства, отсутствующие свойства и т. Д.). Почему это?
  4. Как объекты ценности используются совместно с услугами?

Я также имел некоторые общие вопросы:

  1. При подключении к услуге в FlashBuilder, что вы на самом деле делать? В первый раз, я думаю, BlazeDS создает необходимые сервисы и объекты ценности. Но что, если они уже есть (скажите, что вы уже подключены, или вы сняли код и подключили в первый раз)? Соединяет ли только службы, доступные в вашей копии FlashBuilder?
  2. Гарантировано ли, что BlazeDS всегда будет генерировать объекты сервисов и значений так же? Как линия для линии?

ответ

0

В итоге я просто купил Kindle book on Amazon и прочитал некоторые главы (в частности, глава 26). Вот в основном то, что я узнал:

  • С течением времени продукты Adobe эволюционировали и разделялись до тех пор, пока не была установлена ​​«LifeCycle Data Services» (LCDS). Эта технология находится на сервере и предоставляет различные функции.
  • Adobe выпустила «BlazeDS» в качестве бесплатной версии LCDS (с меньшим количеством функций).
  • Особенностью, которую я использую BlazeDS, является «Remoting Service» (есть также «Служба сообщений» и «Служба прокси»). Служба удаленного доступа позволяет вам вызывать методы службы Java из внешнего интерфейса Flash. Данные передаются между Flash и Java через двоичный формат «Формат сообщений о действии» (AMF).
  • РЕЗЮМЕ BlazeDS находится на сервере и позволяет Flash и Java взаимодействовать через AMF.

Для того, чтобы иметь возможность вызывать методы Java в Flash, выполните следующие действия (примечание: я предполагал именование по умолчанию):

  • Создайте обычный Java POJO (некоторые ограничения: нужен конструктор по умолчанию , методы должны быть общедоступными и т. д.).
  • В remoting-config.xml добавьте пункт назначения для этой услуги. Вы заметите, что есть канал, называемый my-amf. Если вы посмотрите в services-config.xml, вы увидите соответствующее определение канала и что он использует AMF и указывает на ваше запущенное приложение (используя динамические выражения).
  • При настройке проекта Flash Builder вы указываете местоположение своего веб-приложения, чтобы он знал, куда, по-видимому, отправлять запросы.
  • РЕЗЮМЕ Вы разрешаете Java-связь, создавая свою службу Java, настраивая ее в remoting-config.xml и позволяя вашему Flash-проекту узнать ваше местоположение в webapp (чтобы он мог знать, где найти объекты Java).

На данный момент, вы можете позвонить службы вручную в MXML или ActionScript, как показано ниже (предположим, что мы имеем в Java ExampleService отображается в exampleService в remoting-config.xml).

//MXML 
<s:RemoteObject id="myExampleService" destination="exampleService" /> 
<s:Button label="Call a Method" click="myExampleService.myMethod()" /> 

//ActionScript 
var myExampleService:RemoteObject = new RemoteObject("exampleService"); 
myExampelService.myMethod(); 

* Примечание: Существует гораздо больше узнать о выше (и других подобных вещах), как и обработка результатов и т.д. Но я не буду вдаваться в это.

Теперь, чтобы подключиться для передачи данных между Flash и Java, он становится сериализованным. Преобразование из типов Flash в типы Java не является совершенным. Например, Flash Array превращается в Java List/Map. И Java List/Map превращается во Flash ArrayCollection/Object. Из-за этого вы можете использовать шаблон дизайна «value object». В принципе, вы создаете объект Flash, который отражает объект Java, с которым работают ваши службы. Поэтому, если у вас есть класс Java Example, вы должны создать, возможно, класс Flash ExampleVO. Вам нужно будет аннотировать класс Flash с помощью [RemoveClass(alias="my.package.Example")] и т. Д.

Чтобы облегчить жизнь, вы можете автоматически генерировать эти файлы. BlazeDS связывается с Flash Builder с помощью протокола «Remote Development Service» (RDS). В файле web.xml вы можете включить RDSDispatchServlet. Когда RDS включен, вы можете подключиться к данным в Flash Builder (Data> Connect to BlazeDS).

И, как ответ на вопрос, в книге говорится:

By default, if a Java class's public method returns an instance of a strongly typed value object class, the connection wizard creates a matching ActionScript value object class. The conversion of the server-side data to ActionScript value object happens at runtime and is managed by the generated code.

+0

Начало этого видео рассказывает о создании сервисов и объектов ценности: http://tv.adobe.com/watch/flex-in-a-week-day-2/generating-value-objects -Использование-флэш-строитель-данных-услуги / –

3

Здесь немного путаницы. Что делает Blaze следующим образом:

  1. Реализует формат AMF (это родной формат Flash для сериализации объектов Flash). Так что он знает, как писать и читать Flash-объекты.

  2. Реализует некоторые расширенные функции, необходимые для фреймворка Flex (что на самом деле плохо, потому что оно плохо написано, и оно вам никогда не понадобится, но это целая отдельная история). Например, он предоставляет серию классов, имитирующих их аналоги Flex в Java, а на стороне Flex имитирует карты, деревья и т. Д. (Даже не пытайтесь использовать это).

  3. Создает специальный обработчик (-ы), который будет загружен вашим веб-сервером (Tomcat, JBoss и т. Д.) И обработать входящее соединение со Flash. Этот обработчик создается за сеанс - что бы это ни значило в вашем контексте. Этот обработчик также известен как FlexHandler (так оно обычно появляется в файлах конфигурации).

Что Blaze не делает:

  1. Это не создает исходные файлы (без источников объектных значений не генерируются - вы должны сделать это самостоятельно). Однако он имеет некоторые обычно используемые типы - все числовые типы, строки, булевы, некоторые коллекции и т. Д.

  2. Он не отражает существующий код и не интегрируется в Flash Builder. Программа, которая называется Fiber, предоставляется Adobe (тот же источник), но это совершенно другая вещь, она является проприетарным продуктом, она преследует другие цели (она может генерировать код для языков, кроме Java, например).

Fiber - это в основном экспериментальный продукт, он был введен в Flash Builder 4 (это примерно год назад), и в настоящее время он чрезвычайно сырой. В принципе, это полезно только в качестве иллюстрации или доказательства концепции, но она не была проверена в полевых условиях (и найти добровольцев трудно :)

remoting-config.xml не является специальным именем любого однако, в силу того, что многие из многих копируются, имя распознается как часть services-config.xml (имя, опять же, не имеет особого значения и может быть изменено, однако его обычно называют по этому имени). Эти файлы имеют двойное назначение. Когда приложение Flex скомпилировано, эти файлы могут использоваться компилятором Flex для создания некоторых настроек по умолчанию для RemoteObject (вы, вероятно, не хотите делать это таким образом, если вы не уверены в том, что делаете, но даже тогда , вы, вероятно, не захотите этого делать ...). С другой стороны, эти настройки используются FlexHandler (упомянутый выше), чтобы знать, где он должен ожидать подключения клиента Flash. Позже это особенно сложный вопрос, потому что невозможно отлаживать код Blaze разумным способом, и очень сложно определить, что именно является базовым URL и т. Д. К счастью для вас, вы можете заменить этот абракадабра: <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" с чем-то более сознательным, как <endpoint url="http://server-name/gateway" (т.е. не нужно искать для значений server.name и server.port - это действительно очень трудно найти, где они скрываются

классы, порожденные Fiber (EntityMetadata, _SuperXxx и так далее), в конечном счете,. Это попытка отразить Java-код и привить некоторую аналогичную логику в коде AS3. Увы, люди, которые написали это, не имели понятия о том, как работает AS3, - так что происходит там чистое безумие.

Есть определенные правила, в том, как вы переводите значение объекта Java в Flash:

  1. На любой стороне вы можете добавить дополнительные свойства, которые не существуют на другой стороне. Blaze не будет заполнять их (очевидно), но свойства будут существовать и будут доступны.Недостаток - вы получите кучу ошибок rutnime (подавленных) с обеих сторон. Чтобы этого избежать, на стороне AS3 вы можете отметить нежелательное свойство как [Transient]. Но подумайте дважды, прежде чем это сделать - это признак плохого дизайна. В идеале вам это не нужно. Я не знаю, что такое Java-переход Transient.

  2. У вас не может быть объекта с одноименным названием, но другого типа - такие ошибки не подавляются.

  3. Традиционно для Java свойств логического типа называется isSomething - для Blaze вам придется сделать исключение, или назвать их (get|set)IsSomething, если вы настаиваете ...

объектов Значения создаются Blaze на стороне Java, когда он вызывает функции Java, предназначенные для обслуживания обработчиков. Очевидно, они выглядят как аргументы обработчикам. Объекты Value создаются на Flash-стороне самим Flash-плеером - это создает определенные проблемы, такие как - нет возможности передавать счетчики - в любом случае попытается вызвать конструктор в классе AS3. Допустимы аргументы конструктора, не относящиеся к умолчанию.

При подключении к службе в Flash Builder - пожалуйста, не делайте этого. Никто на самом деле не знает, что именно вы делаете. Код является проприетарным, и никаких обещаний о замораживании функций и т. Д. Не было. На сегодняшний день намного проще для тех, кто может программировать, другими словами, щелкая мышью, на самом деле писать программный код, а затем делать это пошаговым способом мастера.

Blaze только генерирует объекты ценности во время выполнения - вы можете быть почти уверены в этом. Это предсказуемо, и если произойдет серьезное изменение, вы обязательно получите уведомление :) Blaze не генерирует исходный код.

+0

Как это, что волокна и BlazeDS перераспределить? Этот опрос был в основном запущен из нашего процесса (который я не могу изменить): 1) Извлеките код из репозитория (Subversion в нашем случае), 2) Запустите скрипты Ant для компиляции и т. Д. И 3) Подключитесь к BlazeDS. На шаге 3 Subversion признала, что файлы объектов службы и значения были изменены. Я пытаюсь понять, почему они изменились. –

+0

FYI, много моей (возможно, ошибочной) информации появилось из http://sujitreddy.wordpress.com/category/flex-and-blazeds/, которая, как представляется, предлагает BlazeDS. Так что, возможно, волокно каким-то образом переплетается, и автор этого не сказал. –

+0

Да, как и ссылка, о которой я упоминал, наш 'web.xml' настраивает' RDSDispatchServlet'. –

Смежные вопросы