Я новичок в Flex и BlazeDS, и я пытаюсь реализовать простое приложение, которое использует Flex на передней панели и приложение Spring / Hibernate на задней стороне, с обменом данными между ними по каналу BlazeDS.
Я ищу направление, как лучше и / или проще подойти к этому. У меня пользовательский интерфейс настроен таким образом, что пользователю предоставляется средство выбора файла, в котором они выбирают файл изображения, который хотят загрузить. Когда это выбрано и отправлено (как отправка формы), тогда серверная сторона должна получить данные файла изображения, а также некоторые связанные метаданные, такие как описание и дата, а затем заполнить объект Hibernate / POJO данными файла изображения и соответствующими метаданными. , а затем сохраните объект / POJO в базе данных.
Я нашел несколько примеров того, как вы можете выполнять загрузку и загрузку файлов с помощью здесь сервлетов. и класс FileReference (здесь и здесь), но они не отображаются для решения проблемы с использованием BlazeDS и / или Spring / Hibernate. Я хочу поместить данные файла изображения и связанные метаданные (описание, дату захвата и т. Д.) В объект значения в приложении Flex, а затем отправить его через BlazeDS в службу, предоставляемую моим приложением Spring / Hibernate, работающим на Tomcat. В этой службе я хочу извлечь данные изображения (как фактические данные JPG / PNG / GIF, так и соответствующие метаданные, такие как описание и т. Д.) Из объекта значения, отправленного из приложения Flex, в объект / POJO, который затем сохраняется через Спящий режим в моей базе данных.
Можно ли это сделать, и если да, то как лучше всего это сделать? Я ошибаюсь, полагая, что если я использую BlazeDS, то я каким-то образом обхожу необходимость предоставления HTTP-сервисов, таких как сервлеты, на стороне сервера, и вместо этого я могу использовать свои Java-сервисы как «RemoteObjects»? Обязательно ли существует однозначное соответствие между Java POJO / классом объекта и классом объекта значения Flex при выполнении такого рода передачи? Если да, то существует ли инструмент, который создает соответствующие объекты значений Flex из объектов Java POJO или наоборот.
Заранее благодарим за вашу помощь, комментарии, предложения и т. Д.
--Джеймс
Обновление: код, чтобы прояснить ситуацию:
У меня есть это как объект значения в Flex:
package valueobjects
{
import flash.utils.ByteArray;
[Bindable]
[RemoteClass(alias="com.abc.example.persistence.entity.Image")]
public class Image
{
public var id:Number;
public var captureDate:Date;
public var description:String;
public var imageData:ByteArray;
public function Image() {}
}
Я предполагаю, что это можно использовать как взаимно однозначное сопоставление с классом POJO, используемым моей службой, и классами DAO на стороне сервера, что выглядит следующим образом:
package com.abc.example.persistence.entity;
import java.sql.Blob;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
@Entity(name = "IMAGE")
public class Image
extends AbstractBaseEntity<Long>
{
private String description;
private Date captureDate;
private Blob imageData;
@Column(name = "CAPTURE_DATE", nullable = true)
public Date getCaptureDate()
{
return captureDate;
}
@Column(name = "DESCRIPTION", nullable = true)
public String getDescription()
{
return description;
}
@Column(name = "IMAGE_DATA", nullable = true)
public Blob getImageData()
{
return imageData;
}
public void setCaptureDate(final Date captureDate)
{
this.captureDate = captureDate;
}
public void setDescription(final String description)
{
this.description = description;
}
public void setImageData(final Blob imageData)
{
this.imageData = imageData;
}
}
В моем приложении Flex я заполняю поля объекта Image строкой описания, датой и данными файла изображения (на основе выбора файла пользователя и ввода текста для описания), а затем вызываю метод RemoteObject, который сопоставляется с сервис, работающий на Tomcat. Я делаю вызов службы RemoteObject в моем коде Flex, используя объект значения изображения в качестве аргумента, но метод службы, работающий на стороне сервера, на самом деле ожидает аргумент типа POJO / объекта, и именно здесь я думаю, что какой-то преобразование / преобразование между объектом значения Flex и Java POJO произойдет (в силу настройки псевдонима RemoteClass в объявлении класса объекта значения), но, похоже, этого не происходит, потому что, когда я отлаживаю приложение, служба Java получает только нулевые значения при вызове службы.
В моем приложении Flex у меня есть объект значения FileReference и Image как общедоступные, связываемые переменные:
[Bindable]
public var imageToBeArchivedFileReference:FileReference = new FileReference();
[Bindable]
public var imageToBeArchivedValueObject:valueobjects.Image = new valueobjects.Image();
Также существует обработчик событий для поиска файла, когда пользователь нажимает кнопку выбора файла:
protected function imageFileSelectButton_clickHandler(event:MouseEvent):void
{
var imageFileFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
var fileTypes:Array = new Array();
fileTypes.push(imageFileFilter);
imageToBeArchivedFileReference.addEventListener(Event.SELECT, imageToBeArchived_fileSelectHandler);
imageToBeArchivedFileReference.browse(fileTypes);
}
Существует обработчик событий, который создает объект значения при выборе файла изображения:
private function imageToBeArchived_fileSelectHandler(event:Event):void
{
imageToBeArchivedFileReference.load();
imageToBeArchivedValueObject = new valueobjects.Image()
imageToBeArchivedValueObject.imageData = imageToBeArchivedFileReference.data;
imageToBeArchivedValueObject.description = imageToBeArchivedDescription.text;
imageToBeArchivedValueObject.captureDate = imageToBeArchivedFileReference.creationDate;
}
и есть обработчик событий, который вызывается, когда пользователь нажимает кнопку отправки, чтобы выполнить сохранение / загрузку изображения:
protected function archiveImageButton_clickHandler(event:MouseEvent):void
{
imageArchivalService.archiveImage(imageToBeArchived);
}
На стороне сервера мой класс Java выполняет простое сохранение POJO:
public void archiveImage(final Image image)
{
imageDao.saveOrUpdate(image);
}
Когда я устанавливаю точку останова в приведенном выше методе и смотрю на переменную изображения, она выглядит пустой, поэтому я предполагаю, что преобразование из объекта значения Flex в Java POJO прошло не так, как ожидалось, и что это нечто большее, чем просто добавив псевдоним RemoteClass в класс объекта значения Flex.