К моменту появления понятия «веб-сервисов» в мире уже существовали технологии, позволяющие приложениям взаимодействовать на расстоянии, где одна программа могла вызвать какой-нибудь метод в другой программе, которая при этом могла быть запущена на компьютере, расположенном в другом городе или даже стране. Все этого сокращенно называется RPC (Remote Procedure Calling – удаленный вызов процедур) [1].
В качестве примеров можно привести технологии CORBA, а для Java – RMI (Remote Method Invoking – удаленный вызов методов). И все вроде в них хорошо, особенно в CORBA, так как с ней можно работать на любом языке программирования, но чего-то все же не хватало. Вероятней всего, минусом CORBA является то, что она работает через какие-то свои сетевые протоколы вместо простого HTTP, который пролезет через любой firewall [1].
Идея веб-сервиса заключалась в создании такого RPC, который будет засовываться в HTTP пакеты. Так началась разработка стандарта. Базовые понятия этого стандарта:
SOAP. Прежде чем вызвать удаленную процедуру, нужно этот вызов описать в XML файле формата SOAP. SOAP – это просто одна из многочисленных XML разметок, которая используется в веб-сервисах. Все, что мы хотим куда-то отправить через HTTP, сначала превращается в XML описание SOAP, потом засовывается в HTTP пакет и посылается на другой компьютер в сети по TCP/IP [1].
WSDL. Есть веб-сервис, то есть программа, методы которой можно удаленно вызывать. Но стандарт требует, чтобы к этой программе прилагалось описание, в котором сказано, что «да, вы не ошиблись - это действительно веб-сервис и можно у него вызвать такие-то такие - то методы». Такое описание представляется еще одним файлом XML, который имеет другой формат, а именно WSDL. То есть, WSDL – это просто XML файл описания веб-сервиса и больше ничего [1].
Так вот, в Java появился такой API, как JAX-RPC. Это означает, что есть пакет с набором классов, которые инкапсулируют рассматриваемую технологию. JAX-RPC долго развивался от версии к версии и в конечном итоге превратился в JAX-WS. WS, очевидно, означает WebService. Далее появился еще JAX-RS для RESTful веб-сервисов.
1. Web - сервис
Веб-служба - это программа, к которой могут обращаться другие программы через Интернет (http). Например, есть функция, которая предоставляет текст в формате HTML. Цель приложения - это веб-браузер, который отображает результаты, и человек сможет легко прочитать этот текст на странице [2].
С другой стороны, целевой аудиторией веб-сервиса являются другие программы или другие веб-службы, которые потребляют данные, обслуживаемые веб-службой. Обычно вывод осуществляется на стандартном языке, который может быть понят другим программам. Из приведенного выше примера, если веб-служба выводит текст в формате XML, тогда другие веб-службы, которые могут читать или понимать XML, могут использовать этот вывод.
Основным преимуществом веб-службы является то, что приложения могут быть написаны на любом языке, но они могут обмениваться данными и обмениваться данными друг с другом через веб-службу. Программные приложения, написанные на разных языках программирования и работающие на различных платформах, могут использовать веб-службы для обмена данными через Интернет (HTTP). Это взаимодействие (например, между Java и Python, или приложениями Windows и Linux) связано с использованием открытых стандартов (XML, SOAP, HTTP) [2].
SOAP (простой протокол доступа к объектам);
UDDI (универсальное описание, обнаружение и интеграция);
WSDL (язык описания веб-сервисов).
Рассмотрим виды веб-служб, в первую очередь, существуют два типа веб-служб, простой протокол доступа к объектам (SOAP) и репрезентативный перенос состояний (REST).
Веб-служба SOAP принимает запрос в формате XML и генерирует вывод в формате XML.
Веб-служба REST более универсальна и может принимать XML, а также JSON в качестве запроса и генерирует вывод в XML, а также в JSON или даже HTML [2].
2. Java Standard Edition
Java Platform, Standard Edition, сокращенно Java SE (ранее Java 2 Standard Edition или J2SE) — стандартная версия платформы Java 2, предназначенная для создания и исполнения апплетов и приложений, рассчитанных на индивидуальное пользование или на использование в масштабах малого предприятия. Не включает в себя многие возможности, предоставляемые более мощной и расширенной платформой Java 2 Enterprise Edition (J2EE), рассчитанной на создание коммерческих приложений масштаба крупных и средних предприятий [3].
Пакет java.lang содержит фундаментальные классы и интерфейсы, близко привязанные к языку и системе во время выполнения. Сюда входят корневые классы, которые формируют иерархию классов, типы, привязанные к определению языка, основные исключения, математические функции, классы поддержки многопоточности, функции безопасности, а также классы, позволяющие получить информацию относительно операционной системы, на которой выполняется программа [3].
Основные классы в java.lang:
Object — этот класс является корнем иерархии классов в Java;
Enum — базовый класс для перечислимого типа (с версии J2SE 5.0);
Class — класс является основным в подсистеме интроспекции Java;
ClassLoader — абстрактный класс, определяет, как загружаются классы. Приложение может создавать подклассы, расширяющие ClassLoader, реализуя его методы. Это позволяет загружать классы другими способами, нежели тот, которым выполняется обычная загрузка в системе времени выполнения Java;
Throwable — класс является базовым для иерархии классов исключений;
Error, Exception, RuntimeException — базовые классы для каждого подтипа исключений;
Thread — класс, содержащий операции над потоками исполнения;
String — класс для представления строк и их значений;
StringBuffer и StringBuilder — классы для работы со строками (StringBuilder с версии J2SE 5.0);
Comparable — интерфейс для поддержки обобщённого сравнения и упорядочения объектов (с версии J2SE 1.2);
Iterable — интерфейс для поддержки улучшенного цикла for (с версии J2SE 5.0);
Process, Runtime, SecurityManager, System — выполняют «системные операции». Управляют динамической загрузкой классов, созданием внешних процессов, получением информации об окружающей среде (например, времени суток), и следят за выполнением политик безопасности;
Math и StrictMath — содержат основные математические функции, такие, как вычисление синуса, косинуса и квадратного корня (StrictMath с версии J2SE 1.3);
Классы-обёртки над примитивными типами, которые превращают их в объекты;
Классы исключений для основных исключительных ситуаций языка и среды исполнения.
Все классы из пакета java.lang автоматически подключаются в каждый исходный файл программы. Явное подключение не требуется [3].
java.lang.annotation - в этом пакете определен интерфейс Annotation, а также перечисления ElementType и RetentionPolicy.
java.lang.instrument - пакет определяет средства, которые могут быть использованы для добавления инструментария для разных аспектов выполнения программ. Он определяет интерфейсы Instrumentation и ClassFileTransformer, а также класс ClassDefinition.
java.lang.management - пакет предоставляет поддержку управления виртуальной Машиной Java и исполняющим окружением. Используя средства пакета, вы можете просматривать и управлять различными аспектами выполнения программы.
java.lang.ref - предоставляет возможность взаимодействия со сборщиком мусора, благодаря чему программа может быть предупреждена об изменении числа ссылок на объект или о действиях, производимых сборщиком мусора над объектом.
java.lang.reflect - пакет java.lang.reflect обеспечивает механизм отражения — способность программного обеспечения к самоанализу (то есть получению информации об имеющихся в системе классах, их методах, полях и связях). Отражение — важная возможность, необходимая при использовании компонентов, называемых Java Beans [3].
3. Java Standard Edition 8
Выпуск релиза версии Java 8 состоялся в марте 2014 года. По сравнению с версией Java SE 7 вышедшей в 2011 году, в Java 8 добавлены новые возможности — полная поддержка специального синтаксиса - лямбда выражений, stream — потоки, ключевое слово default, новое API, JavaScript - движок и другие обновления [5].
Список нововведений:
Интеграция поддержки Lisp-подобных лямбда-выражений ("замыкания"), развиваемых в рамках проекта Lambda. Расширений стандартных библиотек средствами для параллельного выполнения операций над потоками данных, нацеленных на упрощение написания кода для многоядерных процессоров;
Поддержка компактных профилей для развёртывания на оборудовании с ограниченными ресурсами приложений, которым не требуются все компоненты платформы;
Новая система сборки на основе Autoconf;
Интеграция Nashorn, легковесного и высокопроизводительного движка JavaScript, работающий поверх виртуальной машины Java (JVM);
Новый API для работы с датами и временем. Новые Calendar и Locale API;
Повторяющиеся аннотации (Repeating Annotations), позволяющие применить один и тот же тип аннотации более одного раза в одном объявлении или применении типа;
Тип аннотаций, предоставляющий возможность применения аннотаций везде, где используются типы, а не только при объявлении;
Новый пакет с классами java.util.stream, предоставляющий Stream API с поддержкой операций в стиле функционального программирования над потоками элементов;
Увеличение производительности HashMaps в условиях возникновения коллизий;
Улучшение средств шифрования: Включение по умолчанию TLS 1.2 на стороне клиента. Усиление алгоритмов для шифрования с использованием паролей. Поддержка SNI (Server Name Indication) в JSSE Server для обеспечения доступа через шифрованное соединение к виртуальным хостам на одном IP. Поддержка хэширования SHA-224 и блочного шифра AEAD (Authenticated Encryption with Associated Data). Новый класс java.security.cert.PKIXRevocationChecker для настройки проверки отзыва сертификатов X.509. Поддержка аппаратного ускорения шифрования AES на процессорах Intel;
Многочисленные улучшения в JavaFX, включая новые элементы управления DatePicker и TreeTableView, класс SwingNode для встраивания контента Swing, новая тема оформления Modena, пакет javafx.print с API для вывода на печать, класс WebView, класс ScheduledService, поддержка архитектуры ARM, существенное расширение средств для работы с 3D-графикой (3D-формы, камера, освещение, субсцены, материалы, сглаживание);
Включение в состав Java DB 10.10;
В пакеты java.lang и java.util добавлены средства для параллельной сортировки массивов и функции кодирования/декодирования Base64 [5].
Oracle выпустила JDK 8, готовой к использованию реализации Java SE 8 Platform Specification. Эта версия включает самое крупное обновление модели программирования Java со времени выхода платформы в 1996 году. Пакет JDK 8 разрабатывался при активном участии сообщества OpenJDK Community.
Корпорация Oracle также анонсировала выход комплекса продуктов Oracle Java SE Embedded 8, использующих новые функции Java SE 8 и оптимизированных для встраиваемых систем категории от среднего до высшего класса. Новые версии Java SE 8 и Java ME 8 находятся на прямом пути сближения друг с другом.
Используя единую платформу Java 8 для встраиваемых устройств, настольных систем, серверов центра обработки данных и инфраструктуры облачных вычислений, клиенты смогут разворачивать приложения быстрее, обрабатывать и анализировать данные «на лету» и максимально оперативно реагировать на события [5].
Реализации Oracle Java Embedded, использующие преимущества кросс-платформенности Java, призваны повысить гибкость аппаратных средств, расширить выбор платформ, облегчить переносимость (портируемость) приложений и продлить жизненный цикл продуктов.
Версия Java SE 8 является результатом совместной разработки инженеров Oracle и членов мирового сообщества разработчиков Java через OpenJDK Community и JCP.
Java SE 8 позволяет повысить эффективность труда разработчиков и значительно улучшить производительность приложений за счет уменьшения повторяющихся типовых частей программного кода (boilerplate code), улучшения функций коллекций и аннотаций, упрощения моделей параллельного программирования и оптимизации использования возможностей современных многоядерных процессоров [5].
Главными новинками комплекта средств разработки JDK 8 являются: поддержка лямбда - выражений, развиваемых в рамках проекта Project Lambda (JSR 335); механизм Nashorn JavaScript Engine; набор «компактных профилей» Compact Profiles; а также удаление области памяти "permanent generation" из виртуальной машины HotSpot JVM. А полный список новых функций и возможностей JDK 8 весьма широк.
Платформа разработки Oracle JDK 8 уже продемонстрировала рекордную производительность для четырехсокетных систем на Intel-серверах NEC и двухсокетных систем на серверах Oracle SPARC T5, показав выигрыш в производительности от 12% до 41% по сравнению с JDK 7 на той же конфигурации Oracle (результаты теста NEC; результаты теста Oracle) [5].
Новые функции и усовершенствования клиента Java также доступны как часть новейшей версии JavaFX в составе JDK 8. Нововведения и улучшения в JavaFX включают: встраиваемый стек специализированной графики; новые элементы управления пользовательским интерфейсом; новую тему оформления Modena; функции, позволяющие разработчикам встраивать контент Swing в приложения JavaFX; новые функции 3D-графики; и дополнительную поддержку HTML 5 [5].
Обратная совместимость Java SE 8 с предыдущими версиями платформы позволяет сохранить наработанные приемы разработки программного обеспечения Java и защитить инвестиции в технологии Java [5].
4. Web - сервис в Java SE 8
XML (расширяемый язык разметки) — это мета - язык разметки, широко используемый в настоящее время. XML разработан консорциумом World Wide Web в комитете, возглавляемом Джоном Босаком (Jon Bosak). В настоящее время XML широко используется для передачи данных между программами [4].
Модель обработки XML описывает шаги-операции, которые должно выполнить приложение для обработки полной XML; приложения, которые реализуют такую модель, принято называть XML-парсерами. Можно достаточно просто интегрировать любой XML-парсер в любые Java-приложения с помощью Java API for XML Processing (JAXP). JAXP позволяет приложениям разбирать и преобразовывать XML-документы с помощью API, который не зависит от определенной реализации XML-процессора. Благодаря plug-in- подобному механизму разработчики могут менять реализацию XML-процессора (XML-парсер) на другую без необходимости изменять код самого приложения [4].
Спецификация API Java Standard Edition 8:
java.applet - обеспечивает классы, необходимые, чтобы создать апплет и классы, которые апплет использует, чтобы связаться с его контекстом апплета.
java.awt - содержит все классы для того, чтобы создать пользовательские интерфейсы и для рисования графики и изображений.
java.awt.color - обеспечивает классы для цветовых пространств.
java.awt.datatransfer - обеспечивает интерфейсы и классы для того, чтобы передать данные между и в пределах приложений.
java.awt.dnd - перетащите и Отбрасывание является жестом непосредственного управления, найденным во многих системах графического интерфейса пользователя, который обеспечивает механизм, чтобы передать информацию между двумя объектами, логически связанными с элементами представления в GUI.
java.awt.event - обеспечивает интерфейсы и классы для того, чтобы иметь дело с различными типами событий, запущенных компонентами AWT.
java.awt.font - обеспечивает классы и интерфейс, касающийся шрифтов.
java.awt.geom - обеспечивает Java 2-D классы для определения и выполнения операций на объектах, связанных с двумерной геометрией.
java.awt.im - обеспечивает классы и интерфейсы для входной платформы метода.
java.awt.im.spi - обеспечивает интерфейсы, которые включают разработке входных методов, которые могут использоваться с любой средой выполнения Java.
java.awt.image - обеспечивает классы для создания и изменения изображений. И другие.
ЗАКЛЮЧЕНИЕ
В версии Java SE 8 внедрены значительные усовершенствования, оказывающие влияние на технологии и прикладные программные интерфейсы API, образующие ядро платформы Java. Многие из прежних принципов и приемов программирования на Java больше не нужны, а такие новые средства, как лямбда – выражения, ссылки на методы, повторяемые аннотации, аннотации на типы данных и другие повышают производительность труда программистов.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. info JavaRush [Электронный ресурс] Веб-сервисы. // URL: http://info.javarush.ru/eGarmin/2015/03/14/Веб-сервисы-Шаг-1-Что-такое-веб-сервис-и-как-с-ним-работать-.html(дата обращения 15.12.2017)
2. IMPRIUM [Электронный ресурс] Что такое веб - сервис ? // URL: https://imprium.ru/articles/web-service (дата обращения 15.12.2017)
3. WIKI [Электронный ресурс] Java Platform, Standard Edition// URL: https://www.wikiplanet.click/enciclopedia/RU/Java_Platform,_Standard_Edition (дата обращения 15.12.2017)
4. Java [Электронный ресурс] API Java™ для XML, Обрабатывающего (JAXP) // URL: http://spec-zone.ru/RU/Java/Docs/8/technotes/guides/xml/jaxp/index.html (дата обращения 15.12.2017)
5. ICTONLINE [Электронный ресурс] Новая версия Java SE 8 предлагает существенно обновленные модели программирования // URL: http://ict-online.ru/news/n103778// (дата обращения 15.12.2017)