Разработка java компания – Обучение Java-программист: курс программирования на джава, java developer курс | GeekBrains — образовательный портал | GeekBrains

Содержание

Эволюция создания веб-приложений на Java / JUG Ru Group corporate blog / Habr

История развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.



Статья не претендует на академическую полноту и точность. Интерпретация всех изложенных фактов и приведённые примеры отражают исключительно знания, точку зрения и заблуждения автора статьи. Целью написания является попытка получения целостной картины имеющегося текущего положения для веб-приложений на Java. Кроме того, изложенная информация может быть использована читателем в качестве отправной точки для дальнейших самостоятельных исследований.

Код примеров находится в репозиториях на GitHub: демонстрация каждой библиотеки и фреймворка и приложение из завершающей части статьи. На момент написания статьи в первом репозитории 37 примеров, со временем их список будет пополняться.

Хронология появления технологий, библиотек, фреймворков и их популярность


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

Информация о популярности взята из двух источников. Первым источником является индекс популярности веб-фреймворков RebelLabs компании ZeroTurnaround. Последнее его обновление было в конце 2017 года и сопровождалось двумя блогпостами до этого: первый и второй. Автор второго блогпоста, Simon Maple, перешёл в компанию Snyk, продолжив заниматься сбором и анализом подобной полезной статистики. Вторым источником является его исследование, опубликованное в журнале Java Magazine, November/December 2018 (вопрос 17).

В начало таблицы добавлен набор спецификаций, в конец таблицы — невошедшие в индекс популярности фреймворки, но которые всё же хотелось упомянуть.


На первой временной шкале данные из таблицы приведены в том же порядке, что и в таблице. Имеющиеся группы расположены по степени популярности. В группах (спецификация,
Spring
, JSF, JAX-RS, MicroProfile) элементы упорядочены в хронологическом порядке их появления. На любую из картинок можно щёлкнуть для её увеличения.

На второй временной шкале та же самая информация упорядочена по дате появления первой версии всех элементов. Легко увидеть, что в 2001 году, например, для написании веб-приложения можно было выбрать только из двух существующих основных фреймворков — Tapestry и Struts. В начале 2014 года никак невозможно было использовать Spring Boot (его первая официальная версия вышла позже) и уже не имело смысла использовать Seam (он прекратил существование).

Круговая диаграмма показывает индекс популярности фреймворка по данным RebelLabs на конец 2017 года. Каждый из фреймворков в индексе участвует один раз, то есть общая сумма процентов составляет 100. На второй диаграмме демонстрируется результат исследования из Java Magazine, 2018. В исследовании задавался вопрос, какие веб-фреймворки используются, разрешалось выбрать более одного в ответе. По этой причине каждый процентный показатель независим от другого и их нельзя суммировать.

Спецификации


Краеугольный камень существования всех библиотек — стандарты и спецификации, на которых они базируются. Спецификации существуют в виде Java Specification Requests (JSR), разрабатываемых в ходе формальной процедуры, называемой Java Community Process (JCP).

Список JSR, относящихся к Java Enterprise Edition, находится здесь. Ниже в таблице представлены выбранные из них только две наиболее значимые спецификации — Servlet и Java EE (последняя является набором из других спецификаций). Первые версии спецификаций принимались не в рамках JCP, поэтому они не имеют номеров JSR.

С 12 сентября 2017 года Java EE передана под управление Eclipse Foundation и в настоящее время именуется Jakarta EE. На смену

JCP в качестве процесса разработки и принятия спецификаций пришёл Jakarta EE Specification Process.


Использование HTTP-сервлетов


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

В первом примере (модуль helloworld-web-servlet-xml) в дескрипторе развёртывания (deployment descriptor) web.xml указан класс, унаследованный от абстрактного класса HttpServlet со своей реализацией метода doGet(). Впервые файл web.xml дескриптора развёртывания был упомянут в спецификации Servlet 2.2 (1999 год).

Во втором примере (модуль helloworld-web-servlet-annotation) файл дескриптора развёртывания web.xml отсутствует. Над тем же классом-наследником от абстрактного класса HttpServlet присутствует аннотация

WebServlet, появившаяся в Servlet 3.0 (2011 год).

Третий пример (модули helloworld-web-servlet-interface-jar и helloworld-web-servlet-interface-war) чуть более сложен. В нём показывается использование реализации интерфейса ServletContainerInitializer, также появившегося в Servlet 3.0. В первом модуле helloworld-web-servlet-interface-jar по-прежнему нет файла дескриптора развёртывания web.xml, есть класс-наследник от абстрактного класса HttpServlet. Servlet 3.0 позволяет посредством реализации интерфейса ServletContainerInitializer добавлять компоненты сервлетов программно, в т.ч. выполняя регистрацию сервлетов. Класс-реализация интерфейса ServletContainerInitializer с помощью концепции Service Provider Interface (SPI) конфигурируется путём указания его имени в файле META-INF/services/javax.servlet.ServletContainerInitializer. Первый модуль создаёт файл JAR. Файл WAR создаёт второй модуль helloworld-web-servlet-interface-war, в списке зависимостей у него указан первый модуль. Подобный подход реализации интерфейса

ServletContainerInitializer используют фреймворки JSF и Spring в своих классах FacesInitializer и SpringServletContainerInitializer, соответственно.

В Servlet 3.0 также появились асинхронные сервлеты, в Servlet 3.1 (2013 год) — неблокирующий ввод-вывод, в Servlet 4.0 (2017 год) — поддержка HTTP/2.

Эпоха до появления Spring


Apache Tapestry — настоящий долгожитель среди фреймворков для построения веб-приложений. Его первая версия была выпущена в 2000 году, новые версии продолжают выходить и сейчас. При проектировании Tapestry были позаимствованы идеи из WebObjects, веб-фреймворка, появившегося несколькими годами до этого. В приложениях с применением Tapestry (пример — в модуле helloworld-web-tapestry) используется модульная архитектура и связывание (binding) компонентов пользовательского интерфейса веб-страниц с соответствующими им Java-классами.

Apache Struts появился практически одновременно с предыдущим фреймворком, в мае 2000 года, и тоже продолжает развиваться до сих пор. В примере на его основе (модуль helloworld-web-struts) можно видеть в файле дескриптора развёртывания web.xml указание в качестве фильтра класса StrutsPrepareAndExecuteFilter. Данный класс служит диспетчером запросов, выбирающим соответствующее запросу действие (action). Apache Struts также, как и Tapestry, основан на шаблоне проектирования MVC.

В марте 2004 года вышла спецификация JavaServer Faces и последовательно две её реализации: сейчас называющаяся Eclipse Mojarra (предыдущие названия — Sun JSF Reference Implementation, JSF RI, Mojarra, Oracle Mojarra) и Apache MyFaces. Основным подходом, подкреплённым спецификацией, является использование компонентов. Оба примера (модули helloworld-web-jsf-mojarra и helloworld-web-jsf-myfaces) абсолютно идентичны друг другу, за исключением библиотек-зависимостей. Приложения определяют и отображают на веб-страницах версию реализации спецификации JSF, наименование реализации (Mojarra или MyFaces) и версию реализации.

Июнь 2005 и выход первой версии фреймворка Wicket, идеологически похожего на Tapestry и JavaServer Faces. Компоненто-ориентированный подход и связывание HTML-шаблонов веб-страниц с Java-классами. С июня 2007 года фреймворк относится к Apache Software Foundation, сменив название на Apache Wicket. Пик популярности фреймворка пришёлся примерно на 2008-2009 годы, затем последовал постепенный спад интереса к нему. Новые версии продолжают выходить, пример приложения можно увидеть в модуле helloworld-web-wicket.

В октябре 2005 года вышла первая версия Grails, фреймворка для построения веб-приложений, написанного на JVM-языке Groovy. Как следует и из названия продукта, на его создание оказал сильное влияние Ruby on Rails — фреймворк, написанный на языке Ruby. Также основан на шаблоне MVC. Отличительной особенностью является использование в качестве шаблонов файлов представления GSP (Groovy Server Pages). Пример (модуль helloworld-web-grails) создан, собирается и может быть запущен с помощью Grails Maven Plugin, плагина для Maven.

Spring MVC, Spring Boot и Spring WebFlux


Первая версия Spring Framework, включающая Spring MVC, появилась в декабре 2005 года. Классом HTTP-сервлета в нём служит DispatcherServlet. Далее приводятся несколько примеров в хронологическом порядке появления возможностей (новых версий спецификации Servlet, выпуска сначала Spring Boot в апреле 2014 года, потом — Spring WebFlux в сентябре 2017 года), которые в них использованы.

В первом примере (модуль helloworld-web-spring-mvc-xml) в файле дескриптора развёртывания web.xml указан в качестве сервлета DispatcherServlet. В контроллере с единственным методом, обрабатывающим GET-запрос, присутствуют соответствующие аннотации (Controller и RequestMapping). Представлением (view) служит JSP-файл.

Во втором примере (модуль helloworld-web-spring-mvc-java) файл дескриптора развёртывания web.xml отсутствует и используется возможность, появившаяся в Servlet 3.0, выполнять конфигурирование программно. Совместно применяется класс, унаследованный от AbstractAnnotationConfigDispatcherServletInitializer (в конечном итоге задействуется реализация интерфейса ServletContainerInitializer с SPI), и JavaConfig (конфигурация с помощью программного кода с аннотацией Configuration).

В третьем примере (модуль helloworld-web-spring-boot-mvc) демонстрируется значительное упрощение проекта при сохранении той же функциональности благодаря появлению Spring Boot. Кроме класса контроллера дополнительно существует лишь один класс, унаследованный от SpringBootServletInitializer и аннотированный SpringBootApplication.

Четвёртый пример (модуль helloworld-web-spring-boot-webflux) показывает вместе со Spring Boot применение Spring WebFlux, добавленного в Spring Framework относительно недавно. Spring WebFlux использует реактивные принципы и Project Reactor. Из двух основных подходов (функциональный стиль и основанный на аннотациях) в примере участвует первый.

После появления Spring, 2000-е годы


Разработка Vaadin началась в 2002 году в виде дополнения к другому фреймворку, Millstone 3. В течение 2006 года созданное было оформлено в виде законченного коммерческого продукта. До мая 2009 года имел наименование IT Mill Toolkit, только после этого момента став Vaadin. В конце 2007 года его ранее самостоятельно реализованная клиентская часть была заменена на Google Web Toolkit (GWT). В примере (модуль helloworld-web-vaadin) видно, что имеется лишь один файл Java-класса, в котором программно создаются все компоненты пользовательского интерфейса, скрывая при этом низкоуровневые технические подробности.

Весьма интересный продукт, Google Web Toolkit (GWT), появился в мае 2006 года, последняя версия вышла два года назад. Для написания серверной и клиентской части предоставляется возможность использовать один и тот же язык Java. Специальный компилятор преобразует клиентский код на Java в JavaScript. Пример состоит из трёх модулей — helloworld-web-gwt-client (клиентская часть), helloworld-web-gwt-server (серверная часть) и helloworld-web-gwt-shared (код, общий для клиентской и серверной частей). При разработке можно с помощью удобного плагина для Maven запускать клиентскую часть в режиме Super Dev Mode, в котором так называемый Code Server позволяет легко перекомпилировать изменившийся Java-код.

Seam начал свою жизнь в мае 2007 года и прекратил существование в 2012 году. Был основан на Enterprise JavaBeans (EJB3) и JavaServer Faces (JSF). Разрабатывался компанией JBoss, бывшей тогда уже частью Red Hat. Предлагал различные любопытные концепции (например, bijection, для которой существовали соответствующие аннотации). Сайт фреймворка всё ещё существует, но в некоторых его разделах какие-то ссылки уже не являются актуальными. Пример приложения находится в модуле helloworld-web-seam.

Первый вариант спецификации Java API for RESTful Web Services (JAX-RS) вышел в 2008 году (JSR 311), позднее спецификация обновлялась (JSR 339, JSR 370). Наиболее популярные реализации JAX-RS — фреймворки Apache CXF (первая версия — апрель 2008 года), RESTEasy (сентябрь 2008 года), Jersey (май 2010 года) и Restlet (январь 2013 года). Примеры их использования находятся, соответственно, в модулях helloworld-web-jaxrs-apache-cxf, helloworld-web-jaxrs-resteasy, helloworld-web-jaxrs-jersey и helloworld-web-jaxrs-restlet.

Play Framework появился в мае 2008 года. Написан на JVM-языке программирования Scala. Позволяет создавать веб-приложения на его основе как на Scala, так и на Java. Своеобразной особенностью разработчиков Play является приверженность инструменту сборки sbt. По этой причине для написания примера (модуль helloworld-web-play) пришлось приложить некоторые усилия для сборки под Maven, применив для этого соответствующий плагин.

2010-е годы, новейшее время


В 2011 году была выпущена первая версия чудесного микрофреймворка Spark, появившегося под влиянием Sinatra, написанного на Ruby. Ему присущи лаконичность, легковесность и минимализм синтаксиса. Пример (модуль helloworld-web-sparkjava) демонстрирует, как буквально в пару строчек можно написать полноценное приложение. Возможностей фреймворка вполне может хватить, если не требуется чего-то слишком сложного в своём приложении.

В 2011 году появился Vert.x, событийно-ориентированный фреймворк, работающий на JVM. Написан под значительным влиянием Node.js, первоначально назывался Node.x. Имеет многоязычную природу, позволяя при применении фреймворка использовать Java, JavaScript, Groovy, Ruby, Ceylon, Scala или Kotlin. Основан на библиотеке Netty, обладает множеством отличительных особенностей и достоинств. Пример находится в модуле helloworld-web-vertx.

Декабрь 2011 года стал начальным временем для существования Dropwizard, авторы которого позиционируют свой продукт как нечто промежуточное между библиотекой и фреймворком. Три основные части, из которых он состоит — это библиотеки Jetty (HTTP), Jersey (JAX-RS) и Jackson (JSON). Продолжает развиваться и в настоящее время, имея даже некоторую популярность. Пример (модуль helloworld-web-dropwizard) показывает типичную структуру веб-приложения на основе Dropwizard.

Ratpack — ещё один фреймворк (кроме Spark), вдохновлённый библиотекой Sinatra и написанный, в значительной степени, на JVM-языке Groovy. В названии обыграна связь Фрэнка Синатры с т.н. крысиной стаей («rat pack»). Первая версия фреймворка была выпущена в 2013 году, новые версии продолжают выходить. Основан на библиотеке Netty, быстрый, минималистичный, простой в использовании, хорошо масштабируемый. Пример можно увидеть в модуле helloworld-web-ratpack.

Октябрь 2013, появление любопытного проекта JHipster, генератора каркаса веб-приложений. Для построения клиентской части поддерживается JavaScript-фреймворки Angular, React и Vue (последний поддерживается пока в экспериментальном режиме). Основой серверной части служит Spring Boot. Для сборки проекта может быть выбран Maven или Gradle. Пример сгенерированного с помощью JHipster приложения находится в модуле helloworld-web-jhipster.

В августе 2014 года вышла первая версия фреймворка Rapidoid, простого, быстрого и модульного. Рекомендуемый модуль, с которого использование фреймворка рекомендуется начать, включает взаимодействие по HTTP, библиотеки Hibernate, Hibernate Validator, MySQL Connector и Logback. При возрастании потребностей используемый набор модулей может быть расширен. Пример (модуль helloworld-web-rapidoid) позволяет оценить минимализм кода, требуемый для получения простого веб-приложения.

Март 2016, выход фреймворка Lagom. Авторы данного программного продукта позиционируют его применение для разбиения старых монолитных приложений на реактивные микросервисы, хорошо масштабирующиеся при их эксплуатации. Фреймворк основан на Akka и Play Framework. Для разработки своих приложений могут быть использованы языки программирования Java или Scala. Пример на основе Lagom находится в модулях helloworld-web-lagom-api и helloworld-web-lagom-impl.

Уже совсем недавнее время, в мае 2017 года выходит легковесная и простая библиотека Javalin. Её создатели сами указывают в благодарностях авторов уже упоминавшихся фреймворков Sinatra и Spark. Библиотека ориентирована на языки Java и Kotlin. Гарантирует отсутствие аннотаций и необходимости наследования каких-либо классов библиотеки, как можно более лаконичный код, поддержку WebSocket, HTTP/2 и асинхронных запросов. Пример на её основе можно увидеть в модуле helloworld-web-javalin.

Восходящая звезда среди веб-фреймворков, первая версия для которой появилась всего год назад, в октябре 2018 года, — Micronaut. Поддерживает JVM-языки программирования Java, Groovy и Kotlin. Существенное его преимущество — быстрый старт приложений на его основе и малое потребление памяти. Это обеспечивается внедрением зависимостей на этапе компиляции, а не во время исполнения. Ещё одна из особенностей — отличная поддержка реактивного программирования, возможно использование библиотек RxJava, Reactor и Akka. Пример (модуль helloworld-web-micronaut) демонстрирует построение простого приложения на основе Micronaut.

MicroProfile


Из-за существующей тяжеловесности Java EE у ряда компаний появилась потребность для реализации микросервисов разработать легковесный набор спецификаций, что и было сделано — в сентябре 2016 года увидел свет MicroProfile 1.0. Первоначально набор включал лишь три спецификации (CDI, JAX-RS и JSON-P). Постепенно потребности возрастали, к версии 3.0 список спецификаций значительно вырос.
В настоящее время существуют веб-фреймворки, удовлетворяющие
MicroProfile
в разной степени. Для демонстрации было выбрано семь из них, ниже приведено соответствие версий фреймворков версиям MicroProfile. Полная информация обо всех существующих фреймворках, реализующих MicroProfile, находится здесь.

К первой группе фреймворков относятся те, которые уже существовали на момент выхода MicroProfile 1.0: TomEE (время выпуска первой версии — апрель 2012), Hammock (февраль 2014), Thorntail (ранее называвшийся WildFly Swarm, январь 2016) и KumuluzEE (апрель 2016). Наиболее часто соответствие новому набору спецификаций достигалось для них исключением из существующего продукта всего лишнего. Примеры использования находятся в модулях helloworld-web-microprofile-tomee, helloworld-web-microprofile-hammock, helloworld-web-microprofile-thorntail и helloworld-web-microprofile-kumuluzee.

Во вторую группу фреймворков входят появившиеся позднее выхода первой версии MicroProfile: Payara Micro

(июль 2017), Open Liberty (сентябрь 2017) и Helidon (сентябрь 2018). Для данных фреймворков становилось возможным обратное — с самого начала реализации, например, Helidon разрабатывался специально для соответствия MicroProfile, поэтому не имеет в своём составе ничего лишнего. Примеры построения приложений можно видеть в модулях helloworld-web-microprofile-payara, helloworld-web-microprofile-openliberty и helloworld-web-microprofile-helidon.

Сервлет-контейнеры и серверы приложений


Веб-приложения исполняются в специализированном программном обеспечении, реализующем соответствующие спецификации (например, Servlet API). Ниже приведены наиболее популярные на данный момент сервлет-контейнеры и серверы приложений. Процент популярности также взят из результатов исследования (вопрос 20).

Временная шкала показывает время жизни каждого из программных продуктов таблицы. Можно видеть последовательность их появления и время выпуска последних версий.

Всё чаще сейчас используется контейнеризация при развёртывании и публикации приложений, поэтому применение серверов приложений становится всё менее актуальным.

Использование в приложениях языков, отличных от Java


В последнее время наметилась тенденция создания гибридных приложений, в качестве одной из составных частей которых присутствует код на Java. В соответствии с тенденцией в журнале Java Magazine, основной темой которого был язык программирования Java, в колонке главного редактора в номере January/February 2017 было провозглашено «The Polyglot Future» и включение в зону интересов языка JavaScript.

В уже упомянутом выше исследовании в вопросе номер 16 интересовались, какие не JVM-языки используются в JVM-приложениях. Лидером (57%) стал JavaScript, применяемый во фронтенде. Учитывая тот факт, что часть веб-приложений не имеют GUI вовсе (сервисы, микросервисы, службы), можно с уверенностью сказать, что использование JavaScript-фреймворков для графического интерфейса в

Java-приложениях носит массовый характер.

Пример типичного сегодняшнего Java-приложения


Для демонстрации типичного веб-приложения на Java с графическим интерфейсом была написана программа с эмуляцией базовых функциональных возможностей Twitter: аутентификация, управление учётными записями (создание, редактирование, удаление, поиск по подстроке), главная страница (свойства учётной записи, лента сообщений), создание твитов, подписаться/отписаться.

Бекенд написан с использованием Spring Boot, фронтенд — с помощью популярного JavaScript-фреймворка Angular. В Java-части приложения максимально представлены составные части семейства Spring: Spring MVC, Spring Boot, Spring Security, Spring Test, Spring Boot Admin. REST API бекенда визуализируется с помощью Swagger.

Для тестирования применяются совершенно обычные для подобного приложения JUnit, Spring Test, Mockito, TestContainers (unit- и интеграционное тестирование Java-части) и Jasmine с Protractor (unit- и end-to-end-тестирование для JavaScript и Angular).

Аналогичную архитектуру и набор использованных фреймворков (Spring Boot и Angular) имеет игра Угадай спикера, упоминавшаяся в недавнем обзоре конференции TechTrain 2019.

Выводы


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

Код примеров и программ, упоминавшихся в статье, находится на GitHub: первый, второй и третий репозитории.

Доклады прошедших конференций JUG Ru Group по теме статьиSpring:
  • «Spring the Ripper», Евгений Борисов (JPoint 2014: видео, презентация)
  • «Spring Data? Да, та!», Евгений Борисов (Joker 2014: видео, презентация)
  • «Spring Puzzlers: тонкости и нюансы работы Spring», Евгений Борисов (Joker 2014: видео)
  • «Spring Puzzlers — Начало», Барух Садогурский и Евгений Борисов (JPoint 2015: видео, презентация)
  • «The Bootiful Application», Josh Long (
    Joker 2015
    : видео, презентация)
  • «Твой личный Spring Boot Starter», Кирилл Толкачёв и Александр Тарасов (JPoint 2016: видео, презентация)
  • «Spring – Глубоко и не очень», Евгений Борисов (JPoint 2017: видео, презентация)
  • «Проклятие Spring Test», Кирилл Толкачев и Евгений Борисов (JPoint 2017: видео, презентация)
  • «Boot yourself, Spring is coming», Кирилл Толкачев и Евгений Борисов (Joker 2017: видео)
  • «Дизайн реактивной системы на Spring 5/Reactor», Максим Гореликов (Joker 2017: видео)
  • «Spring Framework 5.0 on JDK 8 & 9», Juergen Hoeller (JPoint 2018: видео, презентация)
  • «Spring Framework 5: feature highlights and hidden gems», Juergen Hoeller (JPoint 2018: видео, презентация)
  • «Camel microservices with Spring Boot and Kubernetes», Claus Ibsen (JPoint 2018: видео, презентация)
  • «Spring Boot и Xtend: сеанс чёрной магии c разоблачением», Андрей Когунь (JPoint 2018: видео, презентация)
  • «Boot yourself, Spring is coming», Кирилл Толкачев и Евгений Борисов (JPoint 2018: видео часть 1 и часть 2, презентация)
  • «Spring Boot 2: чего не пишут в release notes», Владимир Плизга (Joker 2018: видео, презентация)
  • «The Proxy fairy and the magic of Spring», Victor Rentea (JPoint 2019: видео, презентация)
  • «Нас Spring Boot, а мы крепчаем: невыносимая легкость AOT-компиляции Spring-приложений», Никита Липский (JPoint 2019: видео, презентация)
  • «Reactive или не reactive, вот в чем вопрос», Кирилл Толкачёв и Евгений Борисов (JPoint 2019: видео, презентация)
  • «Перевод Spring Boot-микросервисов с Java 8 на 11: что может пойти не так?», Владимир Плизга (JPoint 2019: видео, презентация)

Play:
  • «50 оттенков Play!», Андрей Солнцев (Joker 2015: видео)

Vaadin:

Vert.x:
  • «Vert.x: руководство по эксплуатации», Владимир Красильщик (Joker 2015: видео)
  • «Vert.x: Красавица и Чудовище», Владимир Красильщик (Joker 2016: видео, презентация)
  • «Реактивное программирование на Vert.x », Антон Ленок (JPoint 2018: видео, презентация)

Micronaut:
  • «Micronaut vs Spring Boot, или Кто тут самый маленький?», Кирилл Толкачёв и Максим Гореликов (Joker 2018: видео, презентация)

MicroProfile:

Java и JavaScript:


UPD: В репозиторий добавлены примеры использования Quarkus (модуль helloworld-web-quarkus) и ActFramework (модуль helloworld-web-actframework), т.е. примеров стало 39.
25-26 октября 2019 года в Санкт-Петербурге состоится конференция для Java-разработчиков Joker 2019, на которую до 1 октября можно дешевле купить билеты.

8-9 ноября 2019 года в Москве пройдёт конференция для JavaScript-разработчиков HolyJS 2019 Moscow, на которую до 1 октября тоже действуют скидки на покупку билетов.

Международный рейтинг JAVA разработчиков. Разработка на JAVA в ТОП-20 компаний

  Вход / Регистрация
  • WEB
    • Топ страны

    • Россия
    • Беларусь
    • Украина
    • Польша
    • США
    • Англия
    • Нидерланды
    • Франция
    • Германия
    • Австралия
    • Канада
    • Испания
    • Бразилия
    • Италия
    • Индия
    • Румыния
    • More  
    • Топ города

    • Москва
    • Санкт Петербург
    • Минск
    • Киев
    • Лондон
    • Амстердам
    • Нью Йорк
    • Берлин
    • Варшава
    • еще  
    • Технологии

    • PHP
    • Typo3
    • Magento
    • Drupal
    • Joomla
    • OpenCart
    • PrestaShop
    • CS-Cart
    • JavaScript
    • MODx
    • AngularJS
    • Backbone
    • Bootstrap
    • WordPress
    • Django
    • Node.js
    • Responsive
    • YII
    • Zend
    • Symfony
    • CodeIgniter
    • Laravel
    • Phalcon
    • Custom CMS
    • Ruby on Rails
    • Python
    • Sitecore
    • More  
  • Mobile
    • Топ страны

    • Россия
    • Беларусь
    • Украина
    • Польша
    • США
    • Англия
    • Нидерланды
    • Франция
    • Германия
    • Австралия
    • Канада
    • Испания
    • Бразилия
    • Италия
    • Индия
    • Румыния
    • еще  
    • Топ города

    • Москва
    • Санкт Петербург
    • Минск
    • Киев
    • Лондон
    • Амстердам
    • Нью Йорк
    • Берлин
    • Варшава
    • еще  
    • Технологии

    • JAVA
    • JavaScript
    • Objective C
    • iOS
    • Android
    • Windows Phone
    • Hybrid
    • Wearable
    • еще  
  • Software
    • Страны

    • Россия
    • Беларусь
    • Украина
    • Польша
    • США
    • Англия
    • Нидерланды
    • Франция
    • Германия
    • Австралия
    • Канада
    • Испания
    • Бразилия
    • Италия
    • Индия
    • Румыния
    • еще  
    • Города

    • Москва
    • Санкт Петербург
    • Минск
    • Киев
    • Лондон
    • Амстердам
    • Нью Йорк
    • Берлин

CUBA — платформа для быстрой разработки бизнес-приложений на Java / Haulmont corporate blog / Habr

Если вы занимаетесь разработкой софта для предприятий, то возможно уже написали собственную платформу. Которая позволяет вам быстро создавать UI и логику для работы с данными, содержит общую для ваших проектов функциональность: управление правами пользователей, генератор отчетов, BPM и тому подобное, и имеет архитектуру, позволяющую легко сопровождать и масштабировать приложение. Если еще не успели написать, предлагаем познакомиться с нашей разработкой — платформой CUBA.

Платформа существует более четырех лет, но до сих пор она использовалась в довольно узком кругу разработчиков нашей компании и партнеров. Мы успели сделать на ней два тиражируемых продукта и больше десятка заказных проектов. И вот настал момент, когда после длительной подготовки, мы решились выпустить ее в виде продукта, доступного всем желающим.

Для начала приведу краткий список основных возможностей. Подробности разумеется можно узнать на сайте.

  • Декларативное создание UI: компоновка экранов в XML, инициализация и обработка событий в классах Java.
  • Библиотека data-aware визуальных компонентов. Есть все стандартные, плюс специфические, например, универсальный фильтр данных, поля выбора связанных сущностей с разнообразными возможностями, таблица с группировками.
  • Экраны работают в веб (AJAX) и в десктоп (Swing) клиентах. Исходники общие.
  • Метаданные — расширенная информация о модели данных. Проектирование модели данных «от сущностей к таблицам».
  • Мягкое удаление записей в БД.
  • Управление правами доступа на уровне операций с сущностями, их атрибутов и отдельных экземпляров, экранов и компонентов UI.
  • Подключаемая при необходимости функциональность: генератор отчетов, модуль бизнес-процессов с визуальным редактором, полнотекстовый поиск, работа с кредитными картами.
  • «Из коробки» поддерживаются PostgreSQL, MS SQL Server, Oracle, HSQL.
  • Стандартный деплоймент на любом веб-контейнере.
  • Горизонтальное масштабирование на кластере серверов, можно отдельно средний слой, отдельно веб-серверы.

Ну и для того, чтобы всем этим было удобно пользоваться, мы сделали Студию. Это отдельное приложение, которым пользуется разработчик параллельно с обычной Java IDE. Студия предоставляет графический интерфейс к механизмам платформы, позволяя мышкой накликать модель данных, сгенерировать DDL-скрипты для БД, нарисовать экраны в WYSIWYG-редакторе, сделать заготовки сервисов среднего слоя. Использование Студии не обязательно, но сильно облегчает многие вещи, особенно на начальном этапе проекта.

Кому это может пригодиться?

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

Кроме того, проверенным вариантом является использование платформы в качестве backend распределенной системы. В этом случае на платформе создается средний слой с основной бизнес-логикой и UI для сотрудников, а сайты и мобильные приложения для внешних пользователей выступают клиентами среднего слоя.

Используя платформу, можно сосредоточиться в основном на бизнес-логике, так как большинство инфраструктурных задач уже решены. Соответственно, сделать проект быстрее и меньшими усилиями.

Условия использования CUBA описаны на нашем сайте. Бесплатный вариант есть.

Документация есть.

История

Теперь хочу рассказать о зарождении и эволюции платформы. Собственно, в основном речь пойдет о технологиях, так что станет примерно понятно, как CUBA устроена.

С чего все началось. Наша компания создавалась для того, чтобы делать информационные системы для предприятий. Разные системы для разных предприятий, и чем больше, тем лучше. То, что писать мы будем на Java, не вызывало сомнений в силу предыдущего положительного опыта, независимости от ОС, наличия великолепной IDE, широкого выбора фреймворков всех уровней и тому подобного. В то же время мы понимали, что делать каждый проект с нуля, пользуясь только тем, что дают Java и доступные фреймворки, сложно и неэффективно. Значительная часть функциональности корпоративных систем пересекается, независимо от особенностей бизнеса. Да и ту часть, которая уникальна в каждом приложении, мы хотели делать проще и быстрее. К сожалению (или к счастью), мы не нашли ничего готового в мире Java, что удовлетворяло бы нашим требованиям, никакой подходящей «платформы для быстрого создания бизнес-приложений», и как водится, решили написать свою.

Начали со среднего слоя — взяли JBoss с EJB3, в качестве ORM прикрутили OpenJPA. Почему не Hibernate — это тема для отдельной статьи, постараемся со временем ее написать. Научили OpenJPA работать с мягким удалением прозрачно для разработчика, чтобы не надо было ничего дописывать в запросы и контролировать результаты.

Написали свой фреймворк метаданных, необходимый нам для реализации универсальных механизмов, таких как визуальные компоненты, настраивающие свои свойства в зависимости от типа атрибута сущности, который они отображают. На основе метаданных сделали механизм декларативного объявления графов сущностей (мы их называем “представления” — views). Такой механизм нужен для того, чтобы с любого уровня приложения можно было запросить данные и указать, какой объектный граф сейчас требуется, т.е. с какими атрибутами и связанными сущностями мы хотим в данный момент работать.

Начали работать над security: пользовательская сессия, сами пользователи, роли и права доступа. Поломали голову над тем, как реализовать контроль доступа на уровне строк (row-level security). Остановились на том, что предикаты ограничений должны группироваться в отдельную от ролей иерархическую структуру. Всё управление security, разумеется, сразу делали динамическим в смысле возможности настройки в runtime.

Сложным был выбор технологии для веб UI. Нам нужно было поверх какого-то фреймворка создать свой слой абстракции для разделения компоновки и кода экранов, а также для реализации набора визуальных компонентов, работающих с сущностями с помощью наших метаданных. Кроме того, мы планировали в будущем сделать реализацию этого же слоя на базе десктопного Swing. В общем, хотелось, чтобы прикладной код не зависел ни от каких технологий, кроме Java и наших собственных. В итоге, для веб клиента выбрали Vaadin (тогда он назывался ITMill). Альтернатив было немного, ну и в любом случае сейчас не жалеем о выборе, так как фреймворк мощный и активно развивается. Хотя набили много шишек, попытаемся о них рассказать в отдельной статье.

Таким образом у нас появился GenericUI — модуль платформы для создания экранов на XML и Java. Он состоит из загрузчиков экранов, библиотеки визуальных компонентов и источников данных (datasources), связывающих компоненты с моделью данных. Первым, что мы написали на GenericUI, были экраны управления security самой платформы. Ну а потом начали делать первое приложение — это была заказная система документооборота. Надо сказать, что GenericUI позволяет работать в обход себя, напрямую с компонентами нижележащего UI-фреймворка. Поначалу мы этим активно пользовались, так как возможностей GenericUI часто не хватало. Со временем, в результате развития платформы, необходимость в таком “низкоуровневом” кодировании почти отпала, 99% прикладного кода работает только с обобщенными интерфейсами.

Через некоторое время пришла идея отказаться от JBoss и реализовать всю инфраструктуру на Spring. Замечательная функциональность и расширяемость Spring дала нам возможность реализовать нужные механизмы более просто и надежно. Плюс мы обрели независимость от сервера, а также время старта приложения на Tomcat от 5 до 15 секунд, что в разы быстрее, чем было на JBoss.

Несмотря на приемлемое время рестарта приложения, иногда необходимо деплоить части приложения на лету, без остановки сервера. Поэтому мы реализовали возможность динамической компиляции и загрузки классов из специального каталога. Более того, cейчас Студия постоянно отслеживает изменения в проекте и подбрасывает в этот каталог исходники UI, что очень помогает при разработке экранов — можно увидеть результат изменений без рестарта, логина, поиска экрана в меню и т.д.

Настала пора наращивания функциональности — в приложениях нужны были управление бизнес-процессами и полнотекстовый поиск. Раздувать основную часть платформы мы не стали, а разбили ее на несколько проектов, которые используются приложениями при необходимости.

После Workflow и Full Text Search начали разработку собственного генератора отчетов. До этого использовали JasperReports, но он нас не устраивал, во-первых из-за слишком трудоемкого процесса создания шаблонов, а во-вторых из-за сложностей с выводом результатов в Excel. Реализовали простую идею: отдельно описывать логику извлечения данных, отдельно создавать шаблон в Excel, Word или HTML. Такой подход себя оправдал, и недавно мы даже выделили ядро генератора в отдельный open-source проект под названием YARG для использования вне платформы. Про него обязательно будет статья на Хабре.

Система сборки довольно долгое время базировалась на Ant-скриптах. Причем, если сторонние библиотеки загружались из репозитория в бинарном виде, то платформа подключалась к прикладному проекту только в виде исходников, напрямую из SVN. Такой подход имел преимущества на этапе становления платформы — любой программист при работе над своим проектом мог легко поправить что-то в платформе и просто закоммитить свои изменения. В определенный момент мы перешли на стандартный вариант, когда бинарные артефакты и исходники платформы загружаются в проект так же, как и остальные зависимости — из Maven-репозитория. Заодно заменили Ant на Gradle, который позволил нам заключить основной код сборки в плагине, а скрипты проектов сделать максимально лаконичными, но при этом произвольно расширяемыми.

Когда мы начали делать Sherlock — продукт для такси, потребовался десктопный клиент. Тогда и появилась вторая реализация GenericUI-компонентов на Swing. В результате весь UI продукта (более 300 экранов) доступен и в веб и в десктоп вариантах с одинаковой функциональностью, отличия только в отзывчивости интерфейса и нюансах работы с клавиатуры.

Также для тиражируемых продуктов мы придумали механизм расширений, который позволяет адаптироваться к требованиям заказчиков. Расширение — это, по сути, проект нового приложения, в котором продукт используется как платформа. Таким образом нам удается добиваться максимальной кастомизации под заказчика без изменения кода основного продукта. Сохраняется и возможность обновления версий продукта — для этого достаточно привести расширение в соответствие новой версии и пересобрать его.

В определенный момент времени появилась идея сделать платформу доступной разработчикам за пределами нашей компании. Два года назад CUBA была взята на вооружение еще двумя ИТ-компаниями, которые сделали на ее основе довольно крупные проекты: систему обработки электронных сообщений граждан Правительства Москвы и федеральный Электронный регистр онкобольных Республики Казахстан. Это окончательно убедило нас в том, что CUBA может быть полезной не только нам, и мы начали подготовку к публичному релизу.

C этого момента началась работа над Студией, которая позволяет снизить порог входа для начала разработки на платформе и дает возможность более удобно решать рутинные задачи. Мы сделали Студию веб приложением, что дает интересные возможности применения — от теоретической способности работы в облаке до вполне практической возможности быстро подключиться к проекту коллеги и, например, помочь ему разобраться в проблеме. Кроме Студии в помощь разработчику написали плагин к IntelliJ IDEA для навигации по специфическим для CUBA элементам проекта.

Планы на будущее

На данный момент CUBA перешла из фазы интенсивного роста и постоянных изменений в более спокойную стадию эволюции. Естественно, в первую очередь это непрерывный процесс различных локальных доработок и устранения дефектов. Кроме того, мы планируем в ближайшее время заняться доделкой модуля отображения диаграмм — там появятся компоненты для отображения карты и интерактивные диаграммы на JavaScript, которые будут управляться, как и все остальные GenericUI-компоненты, из серверного Java-кода. После этого, скорее всего, займемся вопросами деплоймента CUBA-приложений в облаке у PaaS-провайдеров.

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

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

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

На Хабре мы планируем публиковать статьи о различных аспектах устройства платформы и о проблемах, которые нам приходилось решать. Надеюсь, что будет интересно.

Разработка программ на Java с использованием JDK

Логотип OTN
Щелкните для получения дополнительных сведений

Для написания апплетов и приложений Java требуются такие средства разработки, как JDK. JDK включает следующие компоненты: среда выполнения Java, компилятор Java и API Java. Начало работы не представляет трудности ни для опытных, ни для начинающих программистов.


Где можно загрузить JDK?

Чтобы загрузить последнюю версию комплекта разработчика Java Development Kit (JDK), перейдите в раздел загрузки JDK.
Разработчики также могут посетить сообщество для разработчиков Java Oracle Technology Network for Java Developers и получить исчерпывающую информацию о технологии Java, включая документацию и обучающие материалы.

Начинающим пользователям Java

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

Как получить сертификат Java?

Сертификат обучения технологии Oracle Java является наглядной демонстрацией технических навыков, увлеченности профессией и высокого уровня мотивации, — качеств, которые высоко ценятся и высоко оплачиваются работодателями. Признанные во всей отрасли возможности обучения и получения сертификатов по технологии Java Oracle позволяют гарантировать наличие навыков, необходимых для эффективного выполнения задач в ИТ-организации.
» Подробнее о Сертификации Java

Java Magazine

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

Академия Oracle

Академия Oracle предоставляет учреждениям школьного, профессионального и высшего образования полный портфель программного обеспечения, учебные курсы, хостинговые технологии, факультативное обучение, поддержку и ресурсы сертификации для использования в учебных целях. Эти ресурсы можно включать в состав курсов по информатике и бизнесу, чтобы учащиеся приобрели необходимые навыки до начала профессиональной деятельности в той или иной отрасли. Академия Oracle обучает более 1,5 миллионов человек в 95 странах. Недавно Академия Oracle расширила свою учебную программу и включила в нее курсы по Java. Дополнительную информацию можно найти на веб-сайте Академия Oracle — программирование на языке Java.

Подробнее о технологии Java

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

От портативных компьютеров до центров сбора данных, от игровых консолей до суперкомпьютеров, используемых для научных разработок, от сотовых телефонов до сети Интернет — Java используется повсюду!

  • Java используется на 97% корпоративных настольных ПК
  • Java используется на 89% настольных ПК в США
  • 9 млн разработчиков на Java в мире
  • Инструмент номер 1 среди разработчиков
  • Программа номер 1 среди разработчиков
  • Java используется в 3 млрд мобильных телефонов
  • Java входит в комплект поставки 100% всех проигрывателей дисков Blu-ray
  • Используется 5 млн Java Card
  • Java используется в 125 млн ТВ-устройств
  • 5 из 5 основных производителей оригинального оборудования включают в комплект поставки Java ME

Почему разработчики программного обеспечения выбирают Java

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

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

Некоторые способы, используемые разработчиками программного обеспечения для изучения Java

Во многих колледжах и университетах преподаются курсы по программированию на платформе Java. Академия Oracle предоставляет учреждениям школьного, профессионального и высшего образования полный портфель программного обеспечения, учебные курсы, хостинговые технологии, факультативное обучение, поддержку и ресурсы сертификации для использования в учебных целях, а также поддержку Java для сотен тысяч студентов. Разработчики также могут повысить свою квалификацию в области программирования на Java с помощью материалов, доступных на веб-сайте Oracle для разработчиков Java, подписки на информационные рассылки, посвященные технологии Java, и журнал Java Magazine, использования учебных пособий по Java и центров программирования для начинающих разработчиков Java, а также участия в веб-, виртуальных или проводимых инструкторами учебных курсах и сертификациях.

Сеть Oracle Technology Network — самое большое в мире сообщество разработчиков приложений, администраторов баз данных, системных администраторов/разработчиков и архитекторов, использующих стандартные технологии в сочетании с продуктами Oracle. Это сообщество также содержит информационную базу java.oracle.com, наиболее полный официальный источник технической информации о Java. Членство в сообществе бесплатно, присоединяйтесь сегодня! (В разделе ‘Участие в сообществах’ вашего профиля установите флажок ‘Oracle Technology Network’.)

Java для начинающих разработчиков

Юные разработчики начинают изучать языки программирования с самого раннего возраста. С помощью визуальных инструментов обучения, таких как Alice, Greenfoot и BlueJ, новое поколение может научиться программировать на языке Java и на легких в использовании языках программирования, разработанных на основе Java.

Что такое JavaFX

JavaFX работает на основеJava. На платформе JavaFX разработчики могут создавать и развертывать полнофункциональные интернет-приложения (RIA), одинаково стабильно функционирующие на различных платформах. JavaFX расширяет возможности Java, позволяя разработчикам использовать любые библиотеки Java в приложениях JavaFX. Разработчики могут расширить свои возможности в Java и воспользоваться технологией презентаций, обеспечиваемой JavaFX для создания увлекательных визуальных образов.

Дополнительные сведения о технологии JavaFX можно получить на веб-сайте JavaFX.

В начало


Java на производстве — Control Engineering Russia

Современным технологиям естественно присущ потенциал совершенствования того, что было сделано до их появления. В этой статье речь пойдет о введении в 1995 г компанией Sun Microsystems программного обеспечения и языка программирования, что сопровождалось такими усовершенствованиями, как независимость от платформы/операционной системы, возможность многократного использования программных приложений, поддержка связи Web-узлов и опора на промышленные стандарты.

За этим последовали довольно скромные успехи, несмотря на то, что произошло поразительное по масштабу развертывание Интернет и Web-коммуникаций в промышленности. Именно это в настоящее время определяет привлекательность технологии Java для передачи информации внутри сети между производственным участком и системой управления предприятием. Но для того, чтобы технология Java была более успешной, необходимо решить ряд проблем, связанных с реальным временем и детерминизмом.

Программное обеспечение, основанное на технологии Java, имеет ряд преимуществ для пользователей в промышленности. Поль Беннисон, отвечающий за вопросы развития предприятия в компании Schneider Electric-IAC Services, на первое место ставит независимость от аппаратной платформы и операционной системы. В этой связи он отмечает совместимость Java с платформами Microsoft Windows/Intel и другими широко распространенными альтернативами, такими как ARM и процессор AMD 64-bit Opteron, а также операционные системы Linux и VxWorks. Далее он поясняет, что ”врожденная поддержка” технологией Java таких ИТ стандартов передачи информации внутри предприятия как SQL, XML, Web-службы, открытые каналы связи БД и т.д. также помогают перекинуть мост между производством и руководством предприятия.

В качестве еще одного преимущества Беннисон отмечает „масштабируемую, модульную модель развертывания” Java. Так, например, она может улучшить возможность существующей системы ПЛК фиксировать и передавать данные о процессе/производстве на управляемое оборудование. „Кроме того, эта информация сразу доступна как локальным, так и удаленным пользователям. Это позволяет своевременно осуществлять поддержку решений, которые визуально представляются оператору на портативный браузер или как предупреждение по электронной почте, или непосредственно на удаленную систему диспетчерского управления предприятием”, – отмечает Беннисон.

Он также добавляет: „В 1996 г. компания Schneider Electric была одним из первых поставщиков средств промышленной автоматизации, который сделал программное обеспечение Java, Ethernet и Web-службы основными функциональными возможностями, встроенными в уровень управления архитектуры автоматизации, называемый теперь Transparent Ready”. На сегодняшний день во все оборудование автоматизации и управления, произведенное компанией, встроены агенты диагностики Java для удаленного мониторинга приборов. Таким образом, как утверждают в компании Schneider, любой пользователь на предприятии может получить информацию через HTTP, диагностику через разрешающий браузер Java и определяемые пользователем Web-страницы, если он находится в зоне ограничения межсетевого экрана компании и конфигурации обеспечения ИТ безопасности.

Объединяем оборудование предприятия

На этой демонстрации контроллер автоматизации на основе технологии Java (JAC) от Mitsubishi/Cyberonix, установленный на предприятии, получает сообщение о снижении запаса компакт-дисков от заказчика и посылает команду на пополнение запасов работу Mitsubishi RV-1A (вставка). После этого робот автоматически собирает необходимое количество дисков и передает их в отдел отгрузки

По утверждению доктора Бернарда Трэверсета, старшего технического руководителя в компании Sun Microsystems, среди новых разработок создателя Java Sun Microsystems можно назвать платформу Java 2 Enterprise Edition (J2EE), включающую Java Connector Architecture (JCA). Она расширила возможности интеграции программного обеспечения с оборудованием предприятия на основе различных протоколов на основе TCP/IP. Раньше приложения J2EE давали пользователям интерфейс на основе Web через HTML и HTTP, однако слишком общий интерфейс с браузером „тонкого” клиента был недостаточно надежным для типичной производственной среды. „Теперь, с использованием Java Server Faces, J2EE может гарантировать более мощные интерфейсы на основе той же технологии „тонкого” клиента”, – говорит доктор Трэверсет.

 

Он также отмечает, что протоколы Web-служб представляют развивающийся стандарт связи B2B, которому должны соответствовать серверы приложения J2EE для того, чтобы гарантировать возможность взаимодействия сетей. Более того, Web-службы (WS) и их принципы совместимы с распределенными архитектурами типичного промышленного оборудования. Таким образом, WS становятся эффективной моделью связи между цехами и управлением предприятия для выполнения таких задач, как графики/состояние производства, требования к материалам, информация о качестве и материально-техническое обеспечение.

На обзорной Web-странице показана SCADA-система на базе Java, являющаяся ключевой для управления и интеграции производства центрифуг для фармации, выпускаемых компанией Heinkel (Swedesboro, Нью Джерси, США). Сервер приложений работает на базе модуля JVM FactoryCast в ПЛК Quantum от Schneider Electric и помогает увеличить срок службы SCADA-системы в 2-3 раза по сравнению с традиционной системой

Трэверсет также упоминает версию 5.0 J2SE (Standard Edition) компании Sun и её библиотеку новых утилит взаимосовместимости. С её помощью совершенствуются „структурные компоненты потока” Java с целью более эффективного использования технологии Java в алгоритмах управления комплексными процессами, моделирования и автоматизации. J2SE 5.0 также способствует повышению качества функционирования и масштабируемости Java, так как сокращает время запуска и использование памяти. Эти особенности, по словам Трэверсета, „повышают жизнеспособность Java на небольших компьютерах, которые обычно применяются на производстве”.

Джон Бэйер, руководитель подразделения архитектуры программного обеспечения в компании Rockwell Automation, считает J2EE несомненным достижением в технологии Java в большей степени благодаря тому, что она упрощает создание интерфейсов Web-служб, жизненно необходимых для разработки распределенных производственных приложений. Наряду с таким преимуществом как популярность Java в качестве языка интеграции для MES-приложений, Бэйер называет переносимость Java на различные платформы, что позволяет применять один и тот же код в различных конфигурациях. Он также отмечает такую особенность технологии Java, как возможность её установки в небольших устройствах (и портативных вычислительных блоках), которые полезны на производстве.

По мнению Бенни Энгера, вице-президента подразделения по разработке программного обеспечения в компании GE Fanuc Automation, преимущества технологии Java (и схем XML) являются ключевыми для стратегии взаимодействия с бизнес-системами и мобильными устройствами. Выгода, которую получают пользователи, заключается в том, что снижаются издержки на интеграцию, расширяется функциональность и сокращается время отклика. Энгер объясняет это тем, что пользователи могут получать, анализировать и реагировать на события с самых разных устройств. В этом заключается расширение стратегии Proficy в GE Fanuc.

Энгер утверждает, что новое программное обеспечение, которое будет разработано GE Fanuc, позволит, например, загружать рабочие наряд-заказы на телефоны с двухсторонней связью, поддерживаемые Java. Это свяжет пользователей с рабочими нарядами и позволит обновить состояние сервера Proficy.

Майк Хьюстон, разработчик приложений компании Visiprise Inc., поставщика программного обеспечения управления производством, согласен с тем, что независимость от платформы, совместимая прикладная среда J2EE и поддержка стандартов дополняют список новых полезных возможностей технологии Java. Независимость от платформы дает пользователям возможность выбора оборудования и операционной системы по их желанию, в то время как J2EE предлагает рабочую среду с программным интерфейсом приложения (API) и общим языком разработки.

„Большая часть серверов J2EE, использующихся в промышленности, создают условия для быстрой и надежной работы производственных программ, – отмечает Хьюстон. – Java представляет собой открытую базовую платформу со встроенной поддержкой многих стандартов”. Серверы приложений обычно поддерживают такие стандарты как XML, HTTP, WS и др. для того, чтобы облегчить интеграцию с системами управления станками, ERP и другими системами. Visiprise Manufacturing, MES-программа компании на основе J2EE, предназначена для того, чтобы служить инструментом связи между системами цеха и предприятия.

В Visiprise также отмечают, что настройка и поддержка модулей программы, написанных на языке Java, легче по сравнению с менее открытой средой. „Работа с кодом Java идет быстрее и, в большинстве случаев, она более экономична”, – добавляет к сказанному Хьюстон.

Работа в реальном времени, безопасность

При внедрении в производство системы управления немаловажным вопросом является вопрос работы в реальном масштабе времени (RT). Самое простое объяснение реального времени сводится к тому, что для выполнения этого требования реакция системы управления должна обязательно быть получена в точных временных границах, установленных приложением.

Бэйер из компании Rockwell говорит о развитии приложений реального времени с использованием технологии Java, однако он советует особое внимание уделять процессу. При этом он называет две основные проблемы, которые вызывают беспокойство. Во-первых, с целью ускорения работы в приложениях реального времени часто используется компилированная Java. В этом случае надежные коды Java должны быть написаны так, чтобы они были ближе к операционной системе, поскольку, как объясняет Бэйер, интерпретацию виртуальной машины Java (JVM) нельзя использовать в RT части программы. Во-вторых, для функции управления памятью Java (сборка мусора) может потребоваться добавление слоя реального времени, который предоставляется поставщиками программного обеспечения (см. приложение „Основы Java” для получения дополнительной информации по вопросам JVM и „сборки мусора”). „Для работы в реальном времени необходимо рассмотреть полностью всю среду прикладной системы. Проблемы с языком представляют только часть общей картины”, – добавляет Бэйер.

В плане предложений Java для приложений реального времени компания Sun Microsystems сосредоточивает основное внимание на надежной обработке децентрализованных данных, что чрезвычайно важно для производственного процесса, и дополняет характеристики датчиков разнообразными усовершенствованными функциями, такими как синхронизация времени до субмикросекундного уровня. API Распределенный сбор данных и управление Java (Java Distributed Data Acquisition and Control – JDDAC) из программы Java System RFID компании Sun „действительно связывает любой датчик” с администратором событий RFID (RFID Event Manager). Трэверсет отмечает: „JDDAC гарантирует, что датчики и исполнительные устройства обладают такой характеристикой как самоописание и легко поддерживаются как объединенные в сеть объекты”.

В процессе решения проблем работы в режиме реального времени экспертная группа производителей программ от организации Java Community Process (JCP) разрабатывает спецификации Real-Time для Java (RTSJ), которые наряду с другими свойствами включают RT-потоки и асинхронные события. Компания Sun Microsystems недавно выпустила реализацию RTSJ. И все же в настоящее время необходима доработка RT-приложений для работы в режиме реального времени, особенно для встроенных систем. Примером может служить детерминированная сборка мусора. Другой организацией, которая активно занимается разработками в области RT Java, является Open Group.

Хотя внутрицеховая сеть менее доступна и более защищена, чем сети предприятия, она все же подвержена кибератакам. Для защиты от несанкционированного доступа, как поясняет Беннисон из компании Schneider Electric, требуется многочисленные средства, к ним относятся цифровая сертификация, шифрование на уровне защищенного сокета (SSL) и, конечно, соответствующие уровни доступа законного пользователя. В этом могут оказать помощь характеристики технологии Java.

По словам Беннисона „платформа Java позволяет встроить защиту на уровне модульности отдельного устройства управления. Встроенный сервер Java и Virtual Machine (или защищенный шлюз) ограничивают доступ к источнику информации”. Поскольку весь трафик проходит через защищенный шлюз, то отсутствует прямой доступ к отдельному устройству управления. Информация поступает от безопасных Web-серверов, доступных при соответствующих правах доступа. Беннисон утверждает, что представления Web-страницы обеспечивают доступ, разрешая вмешательство оператора с полной записью изменений.

Он выделяет три уровня масштабируемой конфигурации безопасности технологии Java. Безопасный означает использование безопасного шлюза, ограничивающего трафик, невозможность прямого доступа к устройству, невозможность доступа без авторизации и регистрацию всего доступа. Открыты только необходимые порты; все неиспользуемые порты защищены. „Модель „песочницы” Java (защищенной среды исполнения) гарантирует, что не произойдет загрузки вредоносного кода, переполнения буфера и тому подобных событий”, – добавляет к сказанному Беннисон.

Более безопасный уровень относится к модели „Web-служб”, в которой доступ осуществляется с помощью одного протокола (HTTP), ограничивающего варианты атаки. Модель „песочницы” работает так же, как и описанная выше. Управление внесением исправлений необходимо только в очень редких случаях. Самый безопасный уровень означает, что применяется зашифрованный доступ к любой части системы. Могут использоваться безопасный HTTP, физическая/биометрическая идентификация, отпечатки пальцев и другие методы.

В компании Sun полагают, что охват соединениями всего предприятия и производство по жесткому графику делают завод уязвимым и, соответственно, влекут за собой необходимость расширения мер безопасности и обеспечения связи. Трэверсет предлагает несколько возможных вариантов решения этой проблемы. Явное ограничение возможностей исполнения программы Java в соответствии с требуемым профилем („песочницей”) помогает ограничить потенциальное повреждение вычислительной системы. Неукоснительная аутентификация пользователей и систематический контроль их доступа к специфическим функциям и данным – это еще один шаг, так же, как и тщательное ведение контрольного журнала. Введение API для всех основных каналов, а также методов шифрования на основе сообщений повышают уровень защиты данных во время их передачи.

 

Продукты, приложения

Для развития современной технологии необходимо сотрудничество. Партнер Sun, компания Mitsubishi Electric Corp. из Японии, в сотрудничестве с технологической компанией Cyberonix Inc. из США создала контроллер автоматизации на основе технологии Java (JAC). Производимый в настоящее время JAC использует драйверы связи/адаптеры, написанные на языке Java, для соединения различных автоматических устройств в цехе и связи цеха и отдела обработки документации или для других приложений восходящего потока данных. Один порт Ethernet 10/100 Мбит/с осуществляет передачу восходящего потока, в то время как четыре последовательных порта (3 – для RS-232, 1 – для RS-485) обеспечивают прохождение нисходящего потока данных. Для передачи сообщений используется XML или другие общие форматы. На первом фото в этой статье представлена демонстрационная версия интеграции Java в производственную цепочку поставок. Здесь JAC работает как встроенный информационный шлюз реального времени, обеспечивающий пополнение истощившихся запасов компакт-дисков и связь с роботом Mitsubushi RV-1A, регуляторами Q-Platform, серворегуляторами J2 и устройствами передачи восходящего потока данных.

В компании Schneider Electric отмечают удачное решение в области технологии Java, которое используется в компании Heinkel USA (производитель центрифуг для фармации, работающих под регулирующим воздействием). Сообщается, что встроенные ПЛК-модули Quantum с JVM увеличивают эксплуатационный ресурс одноузловой SCADA-системы производства компании Heinkel до 10 лет по сравнению с максимальным сроком службы традиционной SCADA-системы, не превышающим 3 – 5 лет. Замена подтвержденного приложения SCADA предполагает большие затраты. „Надежное Web-приложение снижает стоимость подтверждения и продлевает срок службы приложения SCADA. Таким образом, затраты на обеспечение работы и обслуживания центрифуги снижаются на всем протяжении ее жизненного цикла”, – утверждают в компании Schneider.

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

Первое знакомство с основами технологии Java

Технология Java представляет собой многопоточную, ориентированную на применение и развитие среду, в которой используется объектно-ориентированный язык, сходный по синтаксису с C или C++, однако она упрощает и совершенствует характеристики этих языков. Программы, написанные на Java, являются масштабируемыми и переносимыми на различные аппаратные платформы и операционные системы. Конструкция Java поддерживает распределенную архитектуру, основанную на использовании Web и Интернета. Она, в основном, работает как сервер, загружающий приложения по запросу клиента. Java также поддерживает различные протоколы шифрования и аутентификации.

Отличительной особенностью Java является то, что программы не запускаются напрямую на собственной операционной системе (ОС). Вместо этого Виртуальная машина Java (JVM) располагается между платформой и ОС как „интерпретатор”, что позволяет программам исполняться на любой компьютерной системе, имеющей специфическую JVM. Компилятор Java сначала переводит программу в байтовый код, а затем JVM интерпретирует ее в соответствии со специфической платформой. Эта особенность является одной из мер укрепления безопасности системы, поскольку прежде чем поступить на центральный процессор, апплеты Java отображаются в защищенной области памяти или „песочнице”. Для повышения эффективности таких приложений, как системы реального времени (RT), возможен обход JVM. В этом случае JIT-компилятор (компилятор реального времени) переводит программы в машинный код непосредственно во время работы приложения. Однако это происходит за счет снижения переносимости.

Другой специфической чертой технологии Java является автоматическая „сборка мусора” (GC) или управление памятью, когда учитывается любая область памяти, не задействованная программой. С одной стороны это освобождает разработчиков от решения этой немаловажной задачи, но с другой – вносит неопределенность в приложения реального времени, так как невозможно предсказать продолжительность циклов алгоритмов GC. Для поддержки приложений реального времени используются различные динамические и детерминированные методы сборки мусора, планирование потоков и другие методы очистки .

Facebook

Twitter

Вконтакте

Google+

Лекции Технотрека. 1 семестр. Разработка на Java (весна 2016) / Mail.ru Group corporate blog / Habr

Продолжаем публикацию наших свежих образовательных курсов. За 14 лекций Технотрека вы получите необходимые навыки и опыт в области разработки на Java, узнаете синтаксис и основные библиотеки языка, начнете понимать объектно-ориентированный подход, сможете декомпозировать сложные задачи.

Курс ведут Рустам Кильдиев, Java/Scala-разработчик мобильного ПО, и Дмитрий Архангельский, инженер-разработчик в Одноклассниках.



Вводное занятие, на котором кратко дается описание всего курса. Основная задача курса — не просто научить синтаксису, а дать практические навыки и понимание основ. Курс выстроен так, чтобы, выполняя небольшие задачи, написать проект «Бэкенд к мессенджеру».


На втором занятии объясняются типы данных, операции над примитивами, ссылочные типы, пул строк и строковые литералы, массивы и другие конструкции языка.


Говорим о том, что такое класс и объект. Разбираемся в основах объектно-ориентированного подхода. Наследование и композиция. Рассматриваем, как я для чего используется инкапсуляция. Подробно разбираем раннее и позднее связывание (полиморфизм). В конце занятия рассмотрим основные принципы дизайна архитектуры приложения (SOLID).


Рассказывается про обработку ошибок в Java, исключения (сущность, которая хранит информацию об ошибке). Даются основы Reflection API, возможности пакета java.lang.reflect, рассматривается пример получения информации о классе в рантайме.


Типы коллекций, итератор, реализации списка, стек, интерфейс Map, ковариантность и контравариантность типов, выбор структуры данных, подходящей для задачи.


Лекция о многопоточности: зачем она нужна, где используется и почему она зачастую является источником ошибок.


Лекция посвящена нововведениям в Java 8, которые упрощают разработку. Появилось три ключевые особенности: lambda-функции, стримы (дают возможность писать в функциональном стиле) и optinal (специальная обертка над объектом, призванная устранить головную боль всех джавистов, под названием NullPointerException). Дается и объяснение поведения специфичных классов (анонимных, локальных и внутренних).


Мессенджер (который мы и должны разработать в итоге) сам по себе является прослойкой бизнес-логики. Весь смысл мессенджера в сообщениях, хранении истории, хранении юзер-листов, логинов и паролей. В лекции объясняется, как получить доступ к различным БД из Java-приложений.


Разговариваем про сокеты и сетевое взаимодействие. Рассматривается простой клиент-сервер, показана работа с кодом клиентской и серверной частей сокета.


Библиотека JUnit, подключение, примеры использования. Основы юнит-тестирования.


Продолжение шестой лекции. Блокировки потоков, схема условного ожидания, Java Memory Model (когда запись, сделанная одним потоком, будет видна другому потоку).


NIO — new input-output API. Лекция про API для работы с сетью, со стримами и файлами. Получение событий из канала, источники событий для селектора, селектор и буфер, отличия NIO от IO.


Говорим о качестве ПО, совокупности мероприятий для обеспечения уровня качества продукта, проверки соответствия между реальным и ожидаемым поведением программы.


Заключительная лекция, в которой коснемся темы устройства CPU, скорости работы с памятью, синхронизации данных между процессорами и кешами процессоров, объектов, описанных спецификацией Memory model.

Рекомендуемая литература и сайты:

  • Брюс Эккель — Философия Java (4th edition)
  • Кей С. Хорстманн, Гари Корнелл, «Java. Библиотека профессионала, Том 1. Основы»,
  • Кей С. Хорстманн, Гари Корнелл, «Java. Библиотека профессионала. Том 2. Расширенные средства программирования
  • Joshua Bloch — Effective Java (2nd Edition) 2nd Edition
  • skipy.ru
  • ibm.com/developerworks/ru/java/
  • habrahabr.ru/hub/java/

Плейлист всех лекций находится по ссылке. Напомним, что актуальные лекции и мастер-классы о программировании от наших IT-специалистов в проектах Технопарк, Техносфера и Технотрек по-прежнему публикуются на канале Технострим.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *