Продолжается подписка на наши издания! Вы не забыли подписаться?

Java EE встречает Web 2.0

Авторы: Константин Плотников (cap@isg.axmor.com)
Axmor
Артем Папков (artem@us.ibm.com)
IBM
Джим Смит (jamessmi@us.ibm.com)
IBM
Опубликовано: 21.10.2008

С использованием платформы Java ЕЕ создано множество удачных корпоративных приложений. Но принципы, на которых основывается Java EE, не рассчитаны на эффективную поддержку приложений Web 2.0. Глубокое понимание расхождений между принципами Java EE и Web 2.0 поможет вам принять обоснованные решения об использовании подходов и средств, способных до некоторой степени преодолеть эти расхождения. Эта статья объясняет, почему Web 2.0 и стандартная платформа Java EE являются проигрышной комбинацией, и демонстрирует, почему асинхронная, управляемая событиями архитектура лучше подходит для приложений Web 2.0. Здесь также описываются фреймворки и API, которые пытаются приспособить платформу Java к Web 2.0 с помощью асинхронного дизайна.

Принципы и допущения Java EE

Платформа Java EE была создана для поддержки разработки B2C- и B2B-приложений. Компании открыли для себя Интернет и начали использовать его для улучшения существующих бизнес-процессов. Их приложения часто взаимодействовали с существующими корпоративными интегрированными системами (enterprise integration system, EIS). Примеры использования в наиболее распространенных тестах, измеряющих производительность и масштабируемость Java EE-серверов – ECperf 1.1, SPECjbb2005 и SPECjAppServer2004 (см. Ресурсы) – отражают эту направленность на B2C, B2B и EIS. Аналогично, стандартный демонстрационный пример Java PetStore является типичным приложением для электронной торговли.

Тесты отражают много явных и неявных допущений о масштабируемости Java EE-архитектуры:

Проблемы производительности и масштабирования

Изменение ландшафта в Web 2.0

Java EE встречает SOA

SOA + B2C + Web 2.0 = высокая латентность

Большая интерактивность

Высокая латентность и клиенты с узким каналом

Больше контента

Постоянные соединения

Более высокий риск Slashdot-эффекта

Проблемы латентности

Асинхронный путь

Преимущества асинхронных API: модель-прототип

Общие решения

Параллелизм по требованию и неблокирующий ввод/вывод (NIO)

Staged event-driven architecture (SEDA)

Язык программирования Е

Фреймворк AsyncObjects

Waterken's ref_send

Frugal Mobile Objects

Actor-ы в Scala

API для работы с сервлетами и вводом/выводом

JSR 203 (NIO.2)

Glassfish Grizzly NIO

Continuations в Jetty 6

Apache Tomcat 6 Comet API

JAX WS 2.0 и Apache Axis2 Asynchronous Web Service Client API

Заключение

Необходимость в асинхронных Java-компонентах уже признана, а область асинхронных приложений активно разрабатывается. Два основных открытых движка сервлетов (Tomcat и Jetty) предоставляют некоторую поддержку по крайней мере для сервлетов, чьим разработчикам приходится особенно трудно. Java-библиотеки начинают предоставлять асинхронные интерфейсы, у этих интерфейсов нет общей темы, и их трудно сделать совместимыми друг с другом из-за проблем с управлением потоками и других расхождений. Это создает потребность в контейнерах, способных содержать множество разных асинхронных компонентов от разных разработчиков.

Сейчас пользователи стоят перед выбором из вариантов, каждый из которых имеет свои достоинства и недостатки. Apache MINA – это пример библиотеки, предоставляющей поддержку некоторых популярных сетевых протоколов, и способной быть неплохим выбором, если требуется использовать эти протоколы. В Apache Tomcat 6 имеется хорошая поддержка паттерна взаимодействия Comet, что делает его хорошим выбором, если асинхронные взаимодействия ограничены этим паттерном. Если вы создаете приложение с нуля, и ясно, что от существующих библиотек оно особо не выиграет, хорошим выбором может быть фреймворк AsyncObjects, поскольку он предоставляет множество удобных интерфейсов. Этот фреймворк может пригодиться и для создания оберток для существующих библиотек асинхронных компонентов.

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

Ресурсы


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

Copyright © 1994-2016 ООО "К-Пресс"