Статьи

Корпоративные приложения стали проще с JVx

JVx — это инфраструктура корпоративных приложений, позволяющая разработчикам создавать приложения баз данных, используя единый подход к источникам. Принимая соглашение о подходе к настройке, ставшее популярным в Spring, фреймворк претендует на ускорение разработки корпоративных приложений. С небольшой командой Рене Ян предоставил полезную среду, которая позволяет вам завершать проекты с меньшим количеством строк кода . Тем не менее, аспект с одним источником может быть наиболее привлекательным, поскольку у вас есть возможность иметь клиентов Swing, Web и, скорее, Android, для вашего приложения. Я нашел время поговорить с Рене, чтобы узнать больше об этом проекте.

 

DZone: Можете ли вы представить себя и свой опыт развития?

Рене Ян: В данный момент я являюсь менеджером сообщества и руководителем отдела исследований и разработок в SIB Visions. Последние 10 лет я работал над различными программными проектами, такими как Software Architect, Developer и Team Manager. Я сфокусировался на (насыщенных) интернет-и интранет-приложениях для бизнес-процессов. Это классические многоуровневые приложения с базами данных или без них, иногда основанные на браузере, а также приложения для настольных компьютеров.
У меня большой практический (проектный) опыт работы с базами данных, особенно с Oracle и MySql, разработкой серверных и интерфейсных систем с различными технологиями и средами. Чтобы быть более конкретным — работал с GWT, extGWT, Tapestry, Hibernate, Flex, Axis2, Swing, AWT, QT Jambi и многими другими средами, инструментами и технологиями, такими как POI, Oracle Forms, JDT-компилятор. Большая часть моего опыта теперь связана с JVX.

DZone: Так что же такое JVx?

Рене Ян: Enterprise Application Framework — JVx — это полнофункциональная прикладная платформа для платформы Java. Это облегчает разработку профессиональных и эффективных приложений баз данных в короткие сроки и с использованием небольшого количества исходного кода. Архитектура фреймворка основана на модели многоуровневой архитектуры для разработки программных систем и обеспечивает полную поддержку всех уровней. Это были факты, и в деталях это означает:

JVx определяет абстрактный пользовательский интерфейс, который не зависит от технологии. Это простые Java-интерфейсы, которые определяют требования к компонентам и элементам управления пользовательского интерфейса. Зависимая от технологии реализация должна использовать эти интерфейсы, чтобы быть действительной технологией пользовательского интерфейса для JVx. Мы уже реализовали Swing, GWT с extGWT и QT Jambi.

Напишите приложение и запустите его без изменения исходного кода, как приложение Desktop, RIA или Ajax / Html.
На стороне сервера JVx предлагает управление сеансами (даже для настольных приложений), менеджеры безопасности для гибкой аутентификации, провайдер объектов для доступа к бизнес-логике и универсальный API персистентности для доступа к любому источнику данных, например, к базам данных, twitter, xml. Постоянный API предлагает операции CRUD из коробки без реализации дополнительных классов.

JVx определяет связь между клиентом и сервером и имеет реализации для http (s) и в процессе (та же виртуальная машина). Связь поддерживает RPC и использует общий механизм сериализации, который работает независимо от версии JVM. Та же связь уже была реализована с .NET, чтобы показать гибкость.

DZone: Как долго это было в разработке? Над этим работает большая команда?

Рене Ян: Мы начали разработку в октябре 2008 года, но не выбрали лицензию. Первый официальный выпуск версии 0.6 был в октябре 2009 года под лицензией Apache License 2.0. Мы использовали эту версию для программного проекта, который все еще находится в производстве, с этой версией. Очень скоро у нас был список возможностей для 1.0, поэтому мы решили отказаться от версии 1.0, потому что не все функции были реализованы.

Команда … В настоящее время мы 3 разработчика. У нас почти такой же опыт работы с бизнес-приложениями, но разные точки зрения и разные технологические знания, которые очень помогают. Мы с нетерпением ждем любого заинтересованного лица, потому что нужна каждая рука помощи.

DZone: Не могли бы вы поделиться некоторыми примерами кодирования или что связано с созданием приложения с использованием JVX?

Рене Ян: Это долгожданный вызов. Давайте создадим приложение с логином пользователя и простыми операциями CRUD для существующей таблицы базы данных.

Нам нужен класс приложения и расширить предопределенное приложение. Это приложение MDI с фреймами:

public class FirstApplication extends Application {

public FirstApplication(UILauncher pLauncher) {
super(pLauncher);
}

@Override
protected IConnection createConnection() throws Exception {
return new DirectServerConnection();
}

@Override
protected String getApplicationName() {
return "dzone";
}
}

Теперь мы добавляем кнопку на панель инструментов для открытия нашего нового экрана:

    @Override
protected void afterLogin() {
super.afterLogin();

UIToolBar tbMasterData = new UIToolBar();
UIButton butDBEdit = createToolBarButton
("doEdit", null, "Editor",
UIImage.getImage(UIImage.SEARCH_LARGE));

tbMasterData.add(butDBEdit);

getLauncher().addToolBar(tbMasterData);
}

и теперь мы создаем действие для нажатия кнопки:

    public void doEdit() throws Throwable {
DBEditFrame frame = new DBEditFrame(this);
frame.setVisible(true);
}

Может быть, вы задаетесь вопросом о декларации действий. Фреймворк поддерживает стандартную обработку слушателей и динамических слушателей, потому что мы хотели уменьшить исходный код.

Если вы посмотрите на объявление действия, вы увидите предложение Throwable. Каркас имеет центральную обработку исключений и показывает стандартное диалоговое окно с ошибкой в ​​случае возникновения исключения Это не проблема, чтобы изменить поведение по умолчанию.

Теперь нам нужен наш экран CRUD:

public class EditFrame extends UIInternalFrame
{
private Application application;
private AbstractConnection connection;
private RemoteDataSource dataSource = new RemoteDataSource();
private RemoteDataBook rdbContacts = new RemoteDataBook();

public EditFrame(Application pApp) throws Throwable {
super(pApp.getDesktopPane());

application = pApp;

initializeModel();
initializeUI();
}

private void initializeModel() throws Throwable {
//we use a new "session" for the screen
connection = ((MasterConnection)application.getConnection()).
createSubConnection("app.dzone.Edit");
connection.open();

//data connection
dataSource.setConnection(connection);
dataSource.open();

//table
rdbContacts.setDataSource(dataSource);
rdbContacts.setName("contacts");
rdbContacts.open();
}

private void initializeUI() throws Exception {
UIGroupPanel group = new UIGroupPanel();
group.setText("Available Contacts");

UITable table = new UITable();
table.setDataBook(rdbContacts);

group.setLayout(new UIBorderLayout());
group.add(table);

//same behaviour as centered component in BorderLayout
setLayout(new UIBorderLayout());
add(group);

setTitle("Contacts");
setSize(new UIDimension(600, 500));
}
}

Мы создали соединение с нашим сервером (сервер и клиент работает в одном и том же процессе), объект для доступа к данным и таблицу для отображения данных. Наш макет не ракетостроение.

Клиентская сторона готова. Давайте настроим наш сервер для доступа к базе данных:

public class Edit extends Session {

public DBStorage getContacts() throws Exception {
DBStorage dbsContacts = (DBStorage)get("contacts");

if (dbsContacts == null)
{
dbsContacts = new DBStorage();
dbsContacts.setDBAccess(getDBAccess());
dbsContacts.setWritebackTable("CONTACTS");
dbsContacts.open();

put("contacts", dbsContacts);
}

return dbsContacts;
}
}

Мы создаем хранилище, которое читает и пишет из таблицы CONTACTS из нашей существующей базы данных. Последнее, что не хватает, это соединение с нашей базой данных. Мы используем жестко закодированный вариант: вот

так.

    public DBAccess getDBAccess() throws Exception {
DBAccess dba = (DBAccess)get("dBAccess");

if (dba == null)
{
dba = DBAccess.getDBAccess(
"jdbc:hsqldb:hsql://localhost/dzone");

dba.setUsername("sa");
dba.setPassword("");
dba.open();

put("dBAccess", dba);
}

return dba;
}

Наше приложение начиналось как Swing Desktop и веб-приложение Ajax / html:

DZone: Какие подобные платформы существуют, и как JVx отличается от них?

Рене Ян: Существует не так много подобных Java-фреймворков, но, конечно, они есть. Аналогичными средами с открытым исходным кодом являются Eclipse RIENA с Eclipse RAP, Jspresso, Eclipse Scout и некоторыми частями XDev. Я знаю одну коммерческую структуру, которая называется qafe, но у меня нет подробной информации о ней.

JVx имеет все функции, объединенные в одной структуре, и все работает вместе без проблем. Это не всегда так, если вы перепутаете фреймворки. Некоторые из вышеперечисленных фреймворков имеют очень мощные функции, но скучают по другим из других фреймворков. Но я не скажу, что JVx идеален, конечно, у нас много идей.

Некоторые преимущества JVx по сравнению с вышеупомянутыми фреймворками, но не все пункты актуальны для каждой фреймворк:

  • очень маленькая исходная база и низкая сложность
  • нет внешних зависимостей — только commons-fileupload, если вы используете неподписанный RIA
  • не нужно много конфигурационных файлов (один xml с 15 строками)
  • одна модель клиента для всех элементов управления пользовательского интерфейса
  • отношения мастер / деталь для неограниченного числа таблиц или редакторов привязки к данным модели (без дополнительных усилий по реализации)
  • Интерфейс независим от технологий
  • Единственный источник
  • полная исходная документация
  • Работает без изменений на устройствах Android
  • сменный клиент-серверный механизм связи и сериализации
  • разрабатывать локально без сервера приложений и быть уверенным, что он работает на сервере приложений

Если вы знаете другие сопоставимые структуры, пожалуйста, дайте мне знать.

DZone: мобильным было самое популярное использование фреймворка?

Рене Ян: Основная цель JVx — разработка приложений, управляемых данными, с базой данных или без нее. Он не ориентирован на мобильную разработку, но мы разработали JVx, чтобы мобильная разработка была абсолютно возможной. Поскольку Android является поклонником Java, наша платформа работает на этой платформе. В настоящее время у нас нет реализации пользовательского интерфейса, но для мобильных устройств приятно использовать точно такую ​​же бизнес-логику, что и для RIA или веб-приложения, без внедрения / определения дополнительных сервисов.

Мы создали собственный Android-клиент для нашей игры в футбол. Другой клиент, та же структура, та же бизнес-логика, без дополнительных услуг.

Для поддержки простой интеграции пользовательского интерфейса у нас есть Android AddOns для JVx — несколько простых реализаций адаптера для List.

DZone: Он все еще находится в бета-версии, так что вы добавите в него еще до того, как он выйдет в свет?

Рене Ян: JVx не достиг версии 1.0, но последний выпуск GA был 0.8. Это было доступно в октябре 2010. У нас есть следующий график выпуска:

  • Циклы высвобождения GA от 6 месяцев
  • Бета-версии каждый месяц (без фиксированных интервалов). Первая бета-версия следующего выпуска будет доступна через 1 месяц после последнего выпуска GA.
  • 0,9 запланировано на март / апрель 2011
  • 1.0 запланирован на август 2011 года (возможно, раньше)

Первоначальный список возможностей для 1.0 будет достигнут с версией 0.9, но мы расширили список за последние два года с большим количеством запросов от пользователей.
Фактическая дорожная карта доступна на http://support.sibvisions.com.

Вот некоторые полезные функции:

группировка запросов
(теперь клиент запрашивает данные по требованию, но каждый контроллер запрашивает сам. С группировкой запросов мы значительно уменьшаем запросы и повышаем производительность).

Автоматическая оптимизация управления хранилищем ссылок
(мы обнаруживаем связи с базой данных по запросу и отправляем информация для клиента. Клиент автоматически настраивает раскрывающиеся списки. Но мы не кэшируем информацию, и это увеличивает объем памяти. Оптимизация сокращает использование памяти на клиенте и сервере)

Триггеры хранения на стороне сервера
(Мы реализуем триггеры хранения (до вставить, перед обновлением,…) для хранилищ на стороне сервера. Функция сравнима с триггерами базы данных)

Другие полезные функции: автофильтр для управления таблицами, шифрование конфигурации, CallBackListener для удаленного взаимодействия, интеграция диаграмм.

DZone: Какие у вас планы на долгосрочное будущее платформы?

Рене Ян: У Java есть проблема с пользовательским интерфейсом — надеюсь, JVx нет ;-), потому что пользовательский интерфейс не имеет значения.
Мы с нетерпением ждем нового JavaFX и, возможно, это новая технология пользовательского интерфейса для JVx. Но есть и другая альтернатива — Apache Pivot. Мы думаем об интеграции, но не имеем конкретного плана.

Таким образом, мы ищем альтернативные интерфейсы.

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

И последнее, но не менее важное: создайте сообщество и отпразднуйте множество вечеринок.