10-й год подряд я посещал DevoxxBe . Это моя любимая конференция по Java, но график разговоров не всегда оптимален: иногда я хочу увидеть 2 отличных выступления одновременно! Так, в Хакергартене в Devoxx, между посещением переговоров, некоторые из нас начали создавать веб-приложение для улучшения графика. Мы называем прототип OptaConf, и он находится под лицензией Apache.
Последние 4 года я работаю в своем уголке мира (OptaPlanner, Drools и т. Д.), Поэтому мой опыт работы с другими корпоративными технологиями Java (JEE) становится немного устаревшим. Презентации (например, в Devoxx) позволяют мне оставаться на связи с постоянно меняющимся корпоративным миром Java, но ничто не сравнится с получением личного опыта написания реалистичного веб-приложения.
Я написал бэкэнд. Интерфейс был любезно предоставлен другими посетителями Хакергартена: Икшелем, Дэвидом, Анной Марией, Селестино и Федерико. Особая благодарность организатору Хакергартена Андресу за то, что он собрал нас вместе и других участников Хакергартена (иногда руководит проектом по конкретной технологии), чтобы помочь нам преодолеть подводные камни.
Backend
Написание бэкэнда оказалось легким делом с использованием технологий JEE 7:
- Простой Java для моделирования классов домена , таких как
Speaker
,Room
и т. Д. - JAXRS для предоставления службы REST для предоставления данных в веб-интерфейс.
- Это было буквально так же просто, как добавить несколько аннотаций (
@GET
,@Path
, …) и короткую запись вweb.xml
. Brilliant. - Для получения дополнительной информации см. Документацию RESTEasy .
- Это было буквально так же просто, как добавить несколько аннотаций (
- JsonReader для импорта данных переговоров из API Devoxx CFP, который затем преобразуется в классы нашего домена.
- Я не использовал JAXRS для чтения этого потока REST, потому что JsonReader предоставляет мне DOM-подход к данным, который я затем напрямую сопоставляю с нашими классами домена, без необходимости моделировать их класс домена (которые нам больше не нужны) ,
- Спасибо Аруну и образцам JEE 7 за то, что они указали мне направление, подходящее для этой работы.
- OptaPlanner для оптимизации графика
- Это также было очень легко для меня!
- Для получения дополнительной информации см. Документацию OptaPlanner .
- CDI, чтобы склеить все это вместе
- Это было немного сложнее: хотя первоначальный
@Inject
работал хорошо, использование производителя для предоставления фиктивных тестовых данных (до того, как был написан импорт Devoxx CFP) заставило меня остановиться на нескольких ловушках:- Есть две аннотации с именем
@Produces
и я автоматически импортировал неправильную. - У меня была неоднозначная зависимость между производителем и исходным объектом, поэтому мне пришлось прибегнуть к добавлению
@Vetoed
к исходному объекту…
- Есть две аннотации с именем
- Для получения дополнительной информации см . Документацию Weld .
- Это было немного сложнее: хотя первоначальный
- WildFly 8 для развертывания веб-приложения.
- Это так быстро, это потрясающе. Запуск и развертывание нашего веб-приложения займет около 3 секунд.
- Плагин maven-wildfly-plugin для развертывания веб-приложения из командной строки:
- Просто убедитесь, что сначала запущен сервер wildfly: если это не так, сообщение об ошибке не совсем ясно .
- IntelliJ для развертывания взорванного веб-приложения прямо из моей IDE
- Он использует плагин сервера приложений JBoss, который доступен только для IntelliJ Enterprise, но не для IntelliJ Community.
- Сначала надо исправить досадную ловушку: взорванный каталог должен заканчиваться на
.war
.
- Для получения дополнительной информации см. Веб-сайт WildFly .
- JPA Hibernate для сохранения данных
- Это еще не было реализовано. По истечении вашего сеанса (через 30 минут) ваши данные в настоящее время теряются.
В общем, это хорошо сработалось. Менее чем за 1 день работы я смог реализовать весь бэкэнд: импортировать Devoxx, оптимизировать его и представить как сервис REST. Конечно, помогли эксперты, чтобы немедленно решить подводные камни.
Что мне действительно понравилось, так это конфигурация pom.xml
. Это целое дерево зависимостей, чтобы все эти технологии были доступны:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
< dependencies > < dependency > < groupId >org.optaplanner</ groupId > < artifactId >optaplanner-core</ artifactId > < version >6.2.0.CR1</ version > </ dependency > < dependency > < groupId >javax</ groupId > < artifactId >javaee-api</ artifactId > < version >7.0</ version > < scope >provided</ scope > </ dependency > </ dependencies > |
Внешний интерфейс
Я не работал над внешним интерфейсом, поэтому трудно комментировать (но это не остановит меня). У нас было 3 воплощения. Все использовали AngularJS, некоторые с беседкой и прочее. Лично я чувствую, что все технологии веб-интерфейса неуклюжи: каждый год появляется новая реклама, и мы все должны перейти на нее. Некоторые (например, Флекс) перешли от шумихи к смерти менее чем за год.
Как бы то ни было, в стороне от всего этого, ребята из внешнего интерфейса проделали отличную работу, особенно вклад Селестино очень хорошо визуализировал расписание:
До: оригинальное расписание Devoxx 2014
Выше оригинальное расписание Devoxx 2014 для среды. Каждый трек (представляющий собой набор связанных выступлений) имеет свой цвет фона.
Обратите внимание, что в первом временном интервале одновременно происходит две беседы в Web и HTML5 (фиолетовые). А во втором временном интервале одновременно идут два разговора о облаке и BigData (коричневые). И нет никаких методологических переговоров (зеленый) в среду! Это означает, что переговоры по методологии почти неизбежны в четверг … о, ужас!
После: POC оптимизировал график Devoxx 2014
Выше график после того, как он оптимизирован с OptaPlanner для среды. Обратите внимание, как теперь я могу смотреть все разговоры целого трека, не пропуская ни одного. Эта оптимизация уже учитывает конфликты докладчиков.
Дополнительные ограничения должны легко добавляться, такие как:
- Популярные разговоры получают больше комнаты
- Отслеживание стабильности помещения: чтобы свести к минимуму людей, которым приходится менять комнаты
- Нет 2 рок-спикеров одновременно
- Рок-звезды получают лучшие временные интервалы
- Социальные спикеры не получают утренние слоты
- … и многое другое
Нам просто нужно больше входных данных, таких как: какие выступления популярны, какие ораторы — рок-звезды,…
Вывод
С другой стороны, это стало намного проще. Джи 7 просто работает. Это намного проще, чем его предшественники. Большинство грубых краев исчезло. Для полного раскрытия: я работаю в Red Hat, поэтому я придерживался их реализаций всякий раз, когда был выбор.
Однако, на фронте … выбор технологий настолько велик, что я не хочу что-то действительно рекомендовать: все они отстойные, все по-своему. Либо вы пишете много непонятного JavaScript, либо имеете дело с длинной монолитной компиляцией, либо вы застряли с чрезмерно сложным, болтливым жизненным циклом. И это только первые 3 фреймворка для веб-интерфейса!
Ссылка: | Создание прототипа корпоративного веб-приложения в Devoxx Hackergarten от нашего партнера по JCG Джеффри Де Смета в блоге OptaPlanner . |