Это статья из двух частей ( часть вторая ), которая продемонстрирует, как использовать 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 .