Tapestry

Tapestry (с англ. — «гобелен, тканое полотно») — объектно-ориентированный Java фреймворк для создания веб-приложений, реализующих модель MVC. Tapestry был создан Howard Lewis Ship (рус. Говард Льюис Шип) и продолжает активно развиваться. Фреймворк является проектом верхнего уровня в организации Apache Software Foundation. Основной акцент в Tapestry сделан на продуктивность разработчика, лёгкость использования, невозможность программистами создания больших кусков «glue code». Tapestry использует модульный подход к веб-разработке, используя биндинг между компонентами (объектами) пользовательского интерфейса на веб-странице и соответствующими им java-классами. Эта компонентно-ориентированная архитектура почерпнула большое количество идей из WebObjects[англ.][3].

Apache Tapestry
Логотип программы Apache Tapestry
Тип Веб-фреймворк
Разработчик Apache Software Foundation
Написана на Java
Операционная система Кроссплатформенное ПО
Первый выпуск 2000[1] и 11 февраля 2013[2]
Последняя версия 5.8.3 (16 июля 2023; 16 месяцев назад (2023-07-16))
Репозиторий git-wip-us.apache.org/re…
Состояние Active
Лицензия Apache License 2.0
Сайт tapestry.apache.org
Логотип Викисклада Медиафайлы на Викискладе

Текущим стабильным релизом Tapestry является версия 5.3.8. Версия 4 и более ранние довольно похожи, в то время как версия 5 содержит значительные изменения.

В Tapestry 4 веб-приложения разбиваются на страницы и компоненты. Страницы описывают уровень компонент, в то время как компоненты определяют функциональность. Этот подход разделяет цельное веб-приложение на легкоуправляемые фрагменты кода, которые управляют взаимодействием с пользователем, бизнес логикой и состоянием[англ.]. Компоненты также делятся на базовые (core) и дополнительные (supplemental). Базовые компоненты являются основными «строительными кирпичами» приложения, такие как валидаторы форм, средства для построения интерфейса или объекты состояния. Дополнительные компоненты определяют, каким образом группа базовых компонент может взаимодействовать с другими базовыми компонентами в группе.

Шаблоны компонентов в Tapestry представляют собой XHTML файлы. Как правило, маппинг между java-классами и XHTML-объектами, которыми они управляют описывается в XML файле. Взаимодействие между backend'ом (java класс) и frontend'ом (XHTML объект) осуществляется с помощью OGNL. Разметка страницы производится иным образом, нежели в PHP, ASP, и JSP, в которых используются специальные теги для разделения переменных шаблона и кода.

Разработка пятой версии Tapestry началась вскоре после релиза версии 4. Разработчики поняли, что оригинальная архитектура, основанная на наследовании от базовых классов, затрудняет улучшение и развитие фреймворка с сохранением обратной совместимости в каждом релизе. Кроме того, она не позволяла решить большое количество проблем преследовавших разработчиков которые использовали данный фреймворк. Новый подход (и новая кодовая база) основывался на POJO, аннотациях и конвенции об именовании. Аннотации и конвенции об именовании практически полностью вытеснили файлы дескрипторов в формате XML предыдущих версий. Единственный XML файл требуемый проектом — web.xml. Кроме того, была устранена необходимость в перекомпилировании, архивировании, деплое и перезапуске сервлетов при каждом изменении в коде. Данная возможность получила название «живая перезагрузка классов» («live class reloading»). Все перечисленные возможности делают Tapestry 5 необычайно гибкой платформой для разработки веб-приложений.

Version 5 объединяет фреймворки Prototype и script.aculo.us со специфическими библиотеками Tapestry для поддержки технологии Ajax. Начиная с версии 5.4 Tapestry использует более современную библиотеку jQuery.

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

Tapestry 5.2 объединяет спецификацию JSR 303 (валидация данных) со своими внутренними механизмами проверки. Живая перезагрузка классов (Live class reloading) была усовершенствована, и теперь также поддерживает перезагрузку реализаций сервисов (под сервисом имеется в виду связка интерфейса и класса реализации).

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

Tapestry 5.4 находится в активной разработке и доступна только в виде исходного кода. Релиз несет серьезные изменения в работе с JavaScript. Tapestry 5.4 включает в себя RequireJS, асинхронный загрузчик JavaScript, на основе которого строится вся работа с JS файлами (модулями и библиотеками). Также новый релиз поддерживает автоматическую компиляцию LESS файлов. Обновлён пользовательский интерфейс — Tapestry использует Twitter Bootstrap UI фреймворк.

Связанные проекты

править
  • Tapestry 4 используется во фреймворке Trails Framework.
  • В Tapestry 5 по умолчанию доступна Blackbird консоль для отладки JavaScript[4]. Начиная с версии 5.3 консоль Blackbird убрана из фреймворка без замены[5].
  • Tapestry5-jQuery[6] — проект заменяет Prototype на jQuery и предлагает множество компонентов из jQuery UI[7]
  • Множество других компонентов и библиотек доступны на сайте фреймворка[8].
  • Поддержка IDE — для Tapestry 5 доступны плагины для Eclipse и IntelliJ IDEA.
  • Tapestry JumpStart — демонстрация возможностей фреймворка без использования дополнительных плагинов, и объяснение принципов его работы.[9]

Интеграция с другими фреймворками

править

В Tapestry 5 по умолчанию предусмотрена интеграция с

  • Twitter Bootstrap UI фреймворк. Доступен начиная с версии 5.4.
  • RequireJS JS фреймворк асинхронной загрузки JS модулей. Доступен начиная с версии 5.4.
  • jQuery JS библиотека. Доступен начиная с версии 5.4.
  • Spock фреймворк для модульного тестирования, написанный на Groovy. Базовый артефакт в maven repository: tapestry-spock.
  • Hibernate для поддержки ORM
  • Spring для внедрения зависимостей, DI англ. Dependency Injection
  • Spring-Boot для запуска внутри embedded-контейнера и поддержки двусторонней связи между tapestry и spring сервисами
  • Spring Security (ранее Acegi) для обеспечения безопасности
  • JBoss Seam для упрощения реализации бизнес логики
  • prototype/scriptaculous — со стороны пользователя (англ. frontend) Tapestry использует связку из двух JavaScript фреймворков.

Примечания

править
  1. https://books.google.at/books?id=sOVB8BFWbNAC&pg=PA1&lpg=PA1&dq=apache+tapestry+2000+webobjects&source=bl&ots=365LFI52VE&sig=ACfU3U0OlzVzGCezJvKb5s04kwmUkh-Wnw&hl=de&sa=X&ved=2ahUKEwi_1Pyl2MznAhUzpHEKHc4NDGoQ6AEwAnoECAkQAQ#v=onepage&q=apache%20tapestry%202000%20webobjects&f=false
  2. https://projects.apache.org/json/projects/tapestry.json
  3. Tapestry in Action — Preface Архивная копия от 26 ноября 2009 на Wayback Machine by Howard Lewis Ship
  4. Apache Tapestry — Tapestry Ajax Support Архивировано 1 июля 2010 года.
  5. SymbolConstants (Tapestry API Documentation). Дата обращения: 11 сентября 2012. Архивировано 22 декабря 2012 года.
  6. Tapestry5-jQuery. Дата обращения: 11 сентября 2012. Архивировано из оригинала 2 сентября 2012 года.
  7. jQuery UI — Home. Дата обращения: 11 сентября 2012. Архивировано 29 февраля 2012 года.
  8. Community — Apache Tapestry. Дата обращения: 11 сентября 2012. Архивировано 29 августа 2012 года.
  9. JumpStart Home. Дата обращения: 11 сентября 2012. Архивировано 1 сентября 2012 года.

Литература

править
  • Igor Drobiazko. Tapestry 5 - Rapid web application development in Java. — Сентябрь, 2012. — 396 p. (недоступная ссылка)
  • Alexander Kolesnikov. Tapestry 5: Building Web Applications: A step-by-step guide to Java Web development with the developer-friendly Apache Tapestry framework. — Packt Publishing, January 15, 2008. — 280 p. — ISBN 1847193072.
  • Howard M. Lewis Ship. Tapestry in Action. — Manning, March 2004. — 580 p. — ISBN 1932394117.
  • Ka Iok Tong. Enjoying Web Development with Tapestry. — 3rd. — January 1, 2007. — 497 p.

Ссылки

править