Статьи

JavaFX и шов с фламинго

Это статья из двух частей ( часть вторая ), которая продемонстрирует, как использовать JavaFX и Seam с платформой Flamingo RIA . В статье предполагается, что у вас есть базовые знания о JavaFX и Seam.

JavaFX был выпущен в декабре 2008 года и получил свое одобрение и неодобрение, как и любая новая крупная технология. Я позволю вам решить, в какой лагерь вы входите. Я считаю, что JavaFX — отличная технология для создания многофункциональных интернет-приложений. Он не собирается заменять браузер (приложения AJAX), но есть случаи, когда JavaFX лучше подходит для пользовательских интерфейсов на основе AJAX. Сказав это, я критически оцениваю то, что практически не упоминается JavaFX и интеграция на стороне сервера. Есть множество примеров форм, движущихся и подпрыгивающих. Есть также примеры игр, но ни одна не показывает какую-либо интеграцию на стороне сервера уровня предприятия. Приложения уровня предприятия обычно основаны на формах.В этой статье показано, как Flamingo восполняет этот пробел, позволяя легко подключать JavaFX с серверными компонентами Seam или Spring.

JavaFX

JavaFX — это новая многофункциональная клиентская платформа для создания и доставки многофункциональных интернет-приложений, которые работают на виртуальной машине Java. JavaFX Script, один из его основных компонентов, является новым декларативным языком для создания многофункциональных интерфейсов. В этой статье я буду ссылаться на JavaFX Script как на JavaFX.

Хотя я сказал, что все новое, это не совсем так. Один из способов взглянуть на JavaFX — это возрождение и улучшение Апплетов (если вы не помните Апплеты, то тем лучше для вас). Проблемы со старой установкой во время выполнения, размером загрузки во время выполнения и медленным запуском приложения существовали со старыми апплетами, проблемы, которые теперь исправлены в JavaFX. JavaFX предоставляет декларативный способ определения пользовательского интерфейса, простую установку и обновление во время выполнения и более быстрое время запуска приложения.

Кроме того, приложения JavaFX могут быть развернуты и запущены внутри браузера (среда выполнения Java установлена ​​как плагин) через Java Web Start и автономные приложения. Учитывая, что приложения JavaFX компилируются и выполняются внутри виртуальной машины Java, пользователь может получить более богатый пользовательский интерфейс, в отличие от стандартного сценария веб-браузера, в котором интерпретируются разметка (HTML) и JavaScript.

JBoss Seam

Seam — это облегченный фреймворк, цель которого — упростить разработку Java EE. Точнее говоря, это значительно упрощает разработку, объединяя JSF и JBoss RichFaces с EJB3, JPA или Hibernate. Из коробки Seam работает с JSF и RichFaces. (GWT поддерживает также.)

JavaFX со швом

Один вопрос, который остается без ответа, — как мы можем использовать JavaFX с Seam. Другими словами, как создать пользовательский интерфейс с JavaFX (развернуть его как Applet, Web Start или даже автономно) и подключить его к стороне сервера, на которой работает JBoss Seam? Поскольку JavaFX легко интегрируется с любым классом Java (в конце концов, он основан на Java), мы можем создать собственный протокол связи для общения с Seam. Я почти уверен, что большинство из вас улыбалось этой идее. Кто хотел бы начать строить свой собственный протокол связи? К счастью, решение существует. Решение фактически существует с июня 2008 года. Теперь, когда JavaFX является более зрелой и набирает обороты, это идеальное время для пересмотра решения.

Фламинго

Exadel Flamingo — это инструмент для простой загрузки JavaFX с серверной частью Seam / Spring. (Помните, что в этой статье мы сконцентрируемся на Seam.) У него есть три основных функции:

Инструменты CRUD

Flamingo предоставляет возможность быстро сгенерировать приложение типа CRUD с сущностями, базой данных и пользовательским интерфейсом. Это важно, потому что создание веб-проекта Java EE стало довольно сложной задачей. Существует так много разных способов настройки проекта и множество зависимостей для разрешения. С помощью инструментов Flamingo вы можете не только быстро создавать новый проект, но и создавать фрагменты приложения по запросу в течение цикла разработки. Если вы когда-либо использовали инструмент seam-gen для создания проекта Seam, то Flamingo предоставляет аналогичные инструменты.

Интеграционная библиотека

Он служит связующим звеном между клиентом JavaFX и кодом сервера Seam, работающим за кулисами, поэтому разработчики могут сосредоточиться на бизнес-задачах вместо того, чтобы писать «простой» код. Кроме того, связь между JavaFX и Seam осуществляется через двоичные протоколы. (Они наиболее эффективны.) Для связи JavaFX с сервером используется протокол Гессена.

Клиентские компоненты

Это невизуальные клиентские компоненты, которые облегчают разработку, обеспечивая проверку, привязку и возможность вызова методов в компонентах Seam. Давайте посмотрим на эти компоненты более подробно.

ServiceFactory

ServiceFactory (com.exadel.flamingo.javafx.ServiceFactory) помогает легко создавать прокси-объекты на стороне клиента. После создания прокси-объектов можно вызывать любые методы компонента Seam. Например, в клиенте JavaFX:

ServiceFactory.setUrl("http://localhost:8080/flamingods/seam/resource/hessian/");
RegisterAction registerAction = (RegisterAction) ServiceFactory.getService(RegisterAction.class, "registerAction");

RegisterAction — это интерфейс на стороне клиента, а registerAction — это имя компонента Seam. Теперь вы можете вызывать любые методы на компоненте registerAction из клиента.

SeamServiceFactory

SeamServiceFactory (com.exadel.flamingo.javafx.SeamServiceFactory) очень похож на ServiceFactory, но, кроме того, создает прокси-объект клиента, который автоматически поддерживает диалоги Seam при выполнении вызова сервера. Вы можете запустить / остановить преобразование Seam, запущенное на сервере.

Например, чтобы запустить / остановить преобразование на стороне клиента:

 public static void start() { 
((RegisterAction)SeamServiceFactory.getService
(RegisterAction.class, "RegisterAction")).start();
}
public static void stop() {
((RegisterAction)SeamServiceFactory.getService
(RegisterAction .class, "RegisterAction")).stop();
}

RegisterAction — это интерфейс на стороне клиента. А на стороне сервера это простой компонент Seam:

@Name("registerAction") 
public class ConversationStarter {

@Out
private ConversationObject conversationObject;

@Begin
public void start() {
conversationObject = new ConversationObject();
}
@End
public void stop() {
}
}

переплет

Как следует из названия, этот компонент позволяет связываться с компонентом Seam в одном из контекстов Seam от клиента JavaFX.

Код сервера:

@DataModel
private ArrayList <Car> carList;

Код клиента: 

ArrayList <Student> carList = (ArrayList<Car>)getBindingManager().getObject("carList");

Автомобиль является интерфейсом на стороне JavaFX. Также возможно зафиксировать объект, измененный в JavaFX, обратно в контекст Seam:

Код клиента:

getBindingManager().commit("user", newUser);

На сервере пользовательский компонент будет найден в одном из контекстов Seam и заменит newUser.

Проверка

Этот компонент позволяет проверять вводимые пользователем данные по аннотациям Hibernate Validator на сервере. Шовный компонент с аннотациями Hibernate Validator:

@Name ("user") 
public class User {

@Length(min=3, max=40)
private String name;
...
}

На стороне клиента Flaming предоставляет встроенный компонент проверки JavaFX. В приведенном ниже коде пользователь является именем компонента Seam, а имя является свойством компонента (см. Выше):

message = FlamingoServiceFactory.getHessianEntityValidator().
validate("user.name", inputText.text);

Резюме

Вторая часть этой серии покажет, как шаг за шагом построить пример, в котором мы используем JavaFX и Seam. Надеемся, что эта статья показала вам, насколько просто, легко и прозрачно создавать полнофункциональные клиенты JavaFX, подключенные к корпоративным серверам, таким как Seam.

Он является автором «Практических
RichFaces» (Apress) и соавтором RichFaces DZone RefCard . Он написал множество статей, провел обучение и представил на многих конференциях и вебинарах о технологиях RichFaces и RIA. Макс ведет блог о технологиях RichFaces, JavaFX и RIA на http://mkblog.exadel.com .