Семь простых причин использовать AppFuse

Узнайте, как работать более продуктивно, используя инструменты Java с открытым исходным кодом

Начать работу используя различные инструменты для платформы Java с открытым исходным кодом, такие как Spring, Hibernate или MySQL может оказаться не так просто. Начнем с Ant или Maven, добавим немного Ajax вместе с DWR, веб-интерфейс (скорее всего, это будет JSF) -- и вот уже появляются трудности с конфигурированием Вашего приложения. AppFuse избавляет пользователя от головной боли, связанной с интеграцией продуктов с открытым кодом, а так же облегчает процесс тестирования, позволяет создавать полноценный пользовательский интерфейс, упрощает работу с базами данных и поддерживает веб-сервисы, использующие XFire. Более того, сообщество AppFuse является одним из немногих мест, где пользователи различных веб-платформ могут взаимовыгодно и конструктивно общаться друг с другом.

Мэтт Рейбл, лидер в области Open Source, Virtuas Open Source Solutions

Мэтт Рейбл (Matt Raible) является лидером в области работы с Spring и веб-фрэймворками в организации Virtuas Open Source Solutions. Он имеет обширный опыт в работе с проектами с открытым кодом как со стороны пользователя, так и разработчика. Мэтт - автор книги Spring Live издательства SourceBeat Publishing; а так же внес значительный вклад в создание работы Pro JSP Third Edition издательства Apress. Он - регулярный участник конференций, посвященных разработке проектов с открытым кодом, таких как ApacheCon, MySQL User's Conference и OSCON, ведет свой блог на http://raibledesigns.com. Рэйбл окружен компьютерами большую часть своей жизни, даже в юношестве в отдаленных районах штата Монтана. Свободное от работы время он посвящает своей жене и детям.



09.06.2007

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

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

Первая версия AppFuse поддерживала только технологии Struts и Hibernate. С течением времени, я нашел более удобные вэб-фреймворки чем Struts, таким образом, я добавил их поддержку тоже. На сегодняшний день AppFuse поддерживает Hibernate или iBATIS как постояные фреймворки. Для работы с веб-приложениями Вы можете использовать JavaServer Faces (JSF), Spring MVC, Struts, Tapestry, или WebWork.

AppFuse обеспечивает реализацию многих функций, которые могут Вам понадобиться:

  • Аутентификация и авторизация
  • Управление пользователями
  • Функция Remember Me (позволяет сохранять информацию о пользователе при его авторизации, таким образом, ему не надо каждый раз заново вводить свои данные)
  • Восстановление паролей
  • Подписка и регистрация
  • Работа с SSL
  • Электронная почта
  • Функции для работы с URL
  • Поддержка скинов
  • Инструменты для оформления веб-страниц
  • Шаблонные схемы
  • Закачка файлов

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

Рисунок 1 иллюстрирует концепцию дизайна типичного AppFuse-приложения:

Типичное приложение AppFuse
Типичное приложение AppFuse

Листинг 1 иллюстрирует использование командной строки для создания проекта с именем devworks, и содержит соответствующие выходные данные. Этот проект использует WebWork (смотрите раздел Ресурсы для дополнительной информации).

Листинг 1. Создание нового проекта с использованием AppFuse
        alotta:~/dev/appfuse mraible$ ant new
        Buildfile: build.xml

        clean:
        [echo] Cleaning build and distribution directories

        init:

        new:
        [echo]
        [echo] +-------------------------------------------------------------+
        [echo] |    -- Welcome to the AppFuse New Application Wizard! --     |
        [echo] |                                                             |
        [echo] | To create a new application, please answer the following    |
        [echo] | questions.                                                  |
        [echo] +-------------------------------------------------------------+

        [input] What would you like to name your application [myapp]?
        devworks
        [input] What would you like to name your database [mydb]?
        devworks
        [input] What package name would you like to use [org.appfuse]?
        com.ibm
        [input] What web framework would you like to use [webwork,tapestry,spring,js
        f,struts]?
        webwork
        [echo] Creating new application named 'devworks'...
        [copy] Copying 359 files to /Users/mraible/Work/devworks
        [copy] Copying 181 files to /Users/mraible/Work/devworks/extras
        [copy] Copying 1 file to /Users/mraible/Work/devworks
        [copy] Copying 1 file to /Users/mraible/Work/devworks

        install:
        [echo] Copying WebWork JARs to ../../lib
        [copy] Copying 6 files to /Users/mraible/Work/devworks/lib
        [echo] Adding WebWork entries to ../../lib.properties
        [echo] Adding WebWork classpath entries
        [echo] Removing Struts-specific JARs
        [delete] Deleting directory /Users/mraible/Work/devworks/lib/struts-1.2.9
        [delete] Deleting directory /Users/mraible/Work/devworks/lib/strutstest-2.1.3
        [echo] Deleting struts_form.xdt for XDoclet
        [delete] Deleting directory /Users/mraible/Work/devworks/metadata/templates
        [echo] Deleting Struts merge-files in metadata/web
        [delete] Deleting 7 files from /Users/mraible/Work/devworks/metadata/web
        [echo] Deleting unused Tag Libraries and Utilities
        [delete] Deleting 2 files from /Users/mraible/Work/devworks/src/web/org/appfu
        se/webapp
        [echo] Modifying appgen for WebWork
        [copy] Copying 12 files to /Users/mraible/Work/devworks/extras/appgen
        [echo] Replacing source and test files
        [delete] Deleting directory /Users/mraible/Work/devworks/src/web/org/appfuse/
        webapp/form
        [delete] Deleting directory /Users/mraible/Work/devworks/src/web/org/appfuse/
        webapp/action
        [copy] Copying 13 files to /Users/mraible/Work/devworks/src
        [delete] Deleting directory /Users/mraible/Work/devworks/test/web/org/appfuse
        /webapp/form
        [delete] Deleting directory /Users/mraible/Work/devworks/test/web/org/appfuse
        /webapp/action
        [copy] Copying 5 files to /Users/mraible/Work/devworks/test
        [echo] Replacing web files (images, scripts, JSPs, etc.)
        [delete] Deleting 1 files from /Users/mraible/Work/devworks/web/scripts
        [copy] Copying 34 files to /Users/mraible/Work/devworks/web
        [delete] Deleting: /Users/mraible/Work/devworks/web/WEB-INF/validator-rules-c
        ustom.xml
        [echo] Modifying Eclipse .classpath file
        [echo] Refactoring build.xml
        [echo] ----------------------------------------------
        [echo] NOTE: It's recommended you delete extras/webwork as you shouldn't ne
        ed it anymore.
        [echo] ----------------------------------------------
        [echo] Repackaging info written to rename.log
        [echo]
        [echo] +-------------------------------------------------------------+
        [echo] |           -- Application created successfully! --           |
        [echo] |                                                             |
        [echo] | Now you should be able to cd to your application and run:   |
        [echo] | > ant setup test-all                                        |
        [echo] +-------------------------------------------------------------+

        BUILD SUCCESSFUL
        Total time: 15 seconds

Почему WebWork?

Благодаря сообществу Struts, комбинация Struts и WebWork вылилась в новый эффективный веб-фреймворк для платформы Java: Struts 2. Конечно, Spring MVC является замечательным основанным на запросах фреймворком, однако он не поддерживает JSF, в отличие от Struts 2. Основанные на работе с компонентами фрэймворки, такие как JSF и Tapestry, уступают WebWork в интуитивности и простоте работы. (Смотрите раздел Ресурсы для дополнительной информации о Struts 2 и JSF.)

После создания проекта вы увидите структуру директорий похожую на приведенную на рисунке 2. Создание файлов проектов Eclipse и Intellij IDEA является частью этого процесса.

Рисунок 2. Структура директорий проекта
Структура директорий проекта

Данная структура директорий очень близка к рекомендованной Sun для веб-приложений созданных на платформе Java 2, Enterprise Edition (J2EE). В AppFuse версии 2.0 эта структура изменится для соответствия стандартному шаблону директорий проектов Apache Maven (смотрите раздел Ресурсы на предмет ссылок на руководства по обоим структурам). AppFuse также переместится с Ant на Maven 2 для приобретения дополнительных возможностей и поддержки проектных файлов, генерируемых средой разработки. Текущая система, базированная на Ant, требует средств, поддерживающих проектные файлы, в тот момент как Maven 2 позволяет генерировать файлы проектов IDEA, Eclipse и NetBeans, используя файл pom.xml. (Данный файл, расположенный в корневой директории вашего проекта, является основным компонентом, необходимым для создания приложения Maven. Он схож с файлом build.xml, используемым при работе с Ant.)

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

Причина #1: Тестирование

Тестированию редко оказывают достаточно внимания при разработке приложений. Заметьте, я не говорил что на него не обращают внимания при публикации программного обеспечения! Достаточно источников ссылаются на случаи, когда разработка, ориентированная в первую очередь на тесты и высокое покрытие кода, позволяет увеличить качество продукта. К сожалению, тестирование зачастую представляется как что-то, что просто отдаляет время завершения проекта. На самом деле, при использовании методологий, ориентированных на тестирование (разработка тестов перед созданием кода), это значительно сокращает время разработки. Более того, первичное тестирование значительно облегчает поддержку и переработку кода. Если Вы не создаете тесты, Вам необходимо тестировать приложение вручную - а это не самый продуктивный метод. Автоматизация в данной ситуации является ключевым моментом.

Когда Вы начнете использовать AppFuse, Вы, возможно, прочитаете соответствующую документацию на сайте проекта (обратитесь к разделу Ресурсы). Руководство написано таким образом, что Вы пишете тесты в первую очередь; они не будут скомпилированы до тех пор пока не будут созданы соответствующие интерфейс и/или реализация. Если Вам действительно необходимо создавать тесты перед написанием кода, это отличная мотивация. Если Вы создаете код в первую очередь и лишь затем каким-то образом убеждаетесь, что он работает, Вы, возможно, скажете себе, "Кажется, здесь все в порядке - зачем нужны тесты? Я лучше потрачу это время на создание кода!" К сожалению, здесь есть один неприятный момент - при проверке корректности кода каким-то образом Вы можете пропустить некоторые важные моменты, которые были бы автоматически проверены с помощью тестов.

В документации к AppFuse находятся рекомендации по тестированию Ваших приложений на различных логических уровнях, начиная с использования DbUnit(см. Ресурсы) на уровне баз данных для заполнения базы тестовыми данными перед запуском тестов. На уровне доступа к данным (DAO), AppFuse использует класс AbstractTransactionalDataSourceSpringContextTests библиотеки Spring для обеспечения простой загрузки контекстных файлов Spring. Далее, данный класс создает транзакцию для каждого testXXX() метода и откатывает ее при завершении тестового метода. Эта функция упрощает тестирование на уровне доступа к данным и не изменяет данные в базе.

На сервисном уровне, jMock (см. Ресурсы) используется для создания модульных тестов, имитирующих свои DAO-зависимости. Это открывает доступ к быстрым и удобным тестам, подтверждающим корректность Вашей бизнес-логики; Вам нет необходимости беспокоиться о логике более низкого уровня.

Поддержка HtmlUnit

Команда HtmlUnit проделала большой обьем работ в версии 1.8 для обеспечения совместимости с популярными Ajax-платформами типа Prototype или Scriptaculous.

На уровне веб, тесты позволяют убедиться что различные действия (Struts/WebWork), контроллеры (Spring MVC), страницы (Tapestry), и элементы JSF работают именно так, как ожидалось. Файл spring-mock.jar полезен для тестирования всех этих фреймворков, потому что содержит имитированную реализацию API сервлета. Тестирование веб-фреймворков AppFuse было бы сложнее без данной полезной библиотеки.

Пользовательский интерфейс, как правило, наиболее сложная часть разработки веб-приложения. На этот компонент заказчик обращает больше всего внимания - как со стороны внешнего вида, так и потому что работа компонента не всегда соответствует его ожиданиям. Вдобавок, нет ничего хуже чем сообщение об ошибке в демо-версии приложения при демонстрации его заказчику! Ваш продукт может быть замечательным во всех отношениях, но у заказчика обязательно возникнут вопросы по поводу его качества. Не позволяйте такой ситуации произойти. Canoo WebTest поможет Вам протестировать пользовательский интерфейс. Данный продукт использует HtmlUnit для работы с Вашим интерфейсом, позволяет убедиться что необходимые элементы присутствуют на своем месте, заполняет поля форм и даже позволяет протестировать интерфейсы с поддержкой Ajax.(Обратитесь к разделу Ресурсы для дополнительной информации относительно WebTest и HtmlUnit.)

Для упрощения процесса тестирования, инструменты Cargo (см. Ресурсы) автоматизируют запуск и остановку Tomcat для проведения тестов.


Причина #2: Интеграция

Как уже было упомянуто в начале статьи, множество библиотек с открытым исходным кодом уже преинтегрированы в AppFuse. Они делятся на следующие категории:

  • Компиляция, отчеты и генерация кода: Ant, Ant Contrib Tasks, Checkstyle, EMMA, Java2Html, PMD, и Rename Packages
  • Тестовые фреймворки: DbUnit, Dumbster, jMock, JUnit, Canoo WebTest
  • Драйверы баз данных: MySQL и PostgreSQL
  • Основные фреймворки: Hibernate и iBATIS
  • IoC фреймворки: Spring
  • Веб-фреймворки: JSF, Spring MVC, Struts, Tapestry, WebWork
  • Веб-сервисы: XFire
  • Веб-утилиты: Clickstream, Display Tag, DWR, JSTL, SiteMesh, Struts Menu, и URL Rewrite Filter
  • Безопасность: Acegi Security
  • JavaScript и CSS: Scriptaculous, Prototype, а также Mike Stenhouse's CSS Framework

Вдобавок к данным библиотекам, AppFuse использует Log4j для логирования и Velocity для работы с электронной почтой и шаблонами меню. Так же реализована поддержка Tomcat (не входит в пакет AppFuse), и Вы можете использовать версии 1.4 или 5 платформы Java для создания приложений. У Вас есть возможность установки AppFuse на любой J2EE 1.3-совместимый сервер приложений; продукт был протестирован на работу со всеми основными J2EE серверами и со всеми основными контейнерами сервлетов.

Рисунок 3 показывает директорию библиотек созданного ранее проекта devworks. Файл lib.properties контролирует номера версий для каждой зависимости, что означает что Вы можете тестировать новую версию любого из данных пакетов путем копирования файлов в данную директорию и выполнения команды типа ant test-all -Dspring.version=2.0.

Рисунок 3. Зависимости проекта
Зависимости проекта AppFuse

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

Кроме упрощения разработки веб-ориентированных приложений, AppFuse позволяет простым способом интегрировать различные Веб-сервисы в Ваши проекты. В пакет AppFuse интегрирован XFire, однако Вы так же можете работать с Apache Axis (см. Ресурсы для руководства по интеграции с Axis). Фреймворк Spring вместе с XFire значительно облегчают работу с сервисным уровнем Вашего проекта, давая Вам возможность создавать сервис-ориентированные приложения.

Вдобавок ко всему этому, AppFuse не загоняет разработчика в рамки какого-либо определенного API. Он позволяет удобным способом пересобирать и интегрировать наиболее подходящие решения с открытым кодом. Код, содержащийся в AppFuse, отвечает за интеграцию и реализует основные фунции безопасности и удобства использования. В случае возможности, код удаляется в пользу добавления функциональности к одному из AppFuse-зависимых фреймворков. Например, реализованные в AppFuse функции Remember Me и работа с SSL были удалены в пользу похожего фунционала из Acegi Security.


Причина #3: Автоматизация

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

Несмотря на то, что его возможности огромны для некоторых пользователей, он подходит не всем. Множество пользователей AppFuse использует Eclipse или Intellij IDEA для создания и тестирования своих продуктов. Запуск Ant из данных сред разработки возможен, но далеко не настолько продуктивен, как работа с тестами, использующими встроенную в данные среды поддержку JUnit.

К счастью, AppFuse поддерживает запуск самих тестов из сред разработки, но поддержка данной функциональности достаточно сложна для разработчиков. Основной проблемой является то, что XDoclet используется для генерации Hibernate mapping-файлов и некоторых компонентов для веб-фреймворков (таких, как ActionForms и struts-config.xml для Struts). Среды разработки не уведомляются о том, что данный код должен быть сгенерирован, до тех пор пока Вы не сконфигурируете их для работы с Ant или не установите соответствующий XDoclet плагин.

Данный недостаток уведомлений является одной из основных причин перехода AppFuse 2.0 на JDK 5 и Maven 2. JDK 5 и Struts 2 позволят нам корректно работать с XDoclet. Maven 2 позволит генерировать проектные файлы соответсвующей среды разработки, и с данными файлами и динамическими путями к классам, управление Вашим проектом упростится. Текущая система, построенная на Ant, также производит компоненты для различных уровней (включая dao.jar, service.jar, и webapp.war), таким образом переход на модель Maven будет резонным шагом.

Вдобавок к Ant (и богатому набору инструментов для создания, тестирования, инсталляции и генерации отчетов), в AppFuse реализована поддержка технологии CruiseControl. CruiseControl является Continuous Integration приложением, которое позволяет автоматически запустить все Ваши тесты в случае изменения кода в репозитории. Директория extras/cruisecontrol содержит файлы, необходимые для быстрой и простой установки Continuous Integration для вашего основанного на AppFuse проекта.

Установка Continuous Integration является одной из первых вещей, которые необходимо выполнить в цикле разработки программного обеспечения. Она не только мотивирует программистов к созданию тестов, но и способствует работе в команде.


Причина #4: Безопасность и расширяемость

AppFuse изначально разрабатывался как часть демонстрационного приложения для книги Pro JSP издательства APress. Это приложение демонстрировало работу со многими функциями безопасности, а так же упрощение разработки с использованием Struts. Множество данных функций безопасности не существует в концепции безопасности J2EE. Аутентификация с использованием контейнеров была достаточно простой, однако не существовало таких функций, как Remember Me, подсказки к паролям, работа с SSL, подписка и управление пользователями. Более того, возможность защиты методов, основанная на роли пользователя, была невозможна в окружении, не использующем EJB.

С самого начала, все данные функции были реализованы в AppFuse на основе технологии CMA. Я слышал об Acegi Security, когда впервые приступил к изучению Spring в начале 2004 года. Я сравнил число строк в XML-файле, требуемом Acegi (175), с необходимым числом строк в файле web.xml для CMA (20). Я пришел к выводу что реализация Acegi слишком сложна и прекратил работу с ней.

Полтора года спустя, после написания главы, рассказывающей об использовании Acegi Security, для другой книги, Spring Live, я изменил свое мнение. Acegi требует огромное количество XML, но она действительно проста, когда Вы ее поймете. Когда в результате мы заменили многие реализованные в AppFuse функции, используя Acegi Security, это привело к значительному сокращению количества кода.

Acegi Security является лучшей вещью, когда-либо происходившей с моделью безопасности J2EE. Она позволяет реализовывать множество функций, не являющихся частью модели безопасности Servlet API, такие как аутентификация, авторизация, ролевая защита методов, Remember Me, шифрование паролей, работа с SSL, переключение пользователей, и некоторые другие. Она так же позволяет хранить реквизиты пользователей в XML файле, в базе данных, в LDAP, или в отдельной системе, например Yale's Central Authentication Service (CAS) или SiteMinder.

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

Комбинация простоты разработки, легко тестируемого кода и преимуществ использования Spring IoC и Acegi Security - основные причины того, что работать с AppFuse - одно удовольствие. Данные фреймворки позволяют легко создавать чистый, тестируемый код. AppFuse поддерживает множество проектов с открытым кодом, и добавление зависимостей позволяет легко интегрировать различные уровни Вашего приложения между собой.


Причина #5: Создание кода с использованием AppGen

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

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

  • Генерация обьектов Java из таблиц баз данных (используя инструменты Middlegen и Hibernate)
  • Генерация пользовательского интерфейса для этих обьектов
  • Генерация тестов для обьектов доступа к данным, менеджеров, контроллеров, действий и пользовательского интерфейса

Когда Вы запускаете AppGen, Вам предлагается работа с таблицами БД или Plain Old Java Objects (POJO), и AppGen генерирует соответствующий код. Если Вы наберете в командной строке ant install-detailed, AppGen установит POJO-специфичные обьекты DAO и менеджеры с соответствующими тестами. Запуск ant install позволит Вашим классам веб-уровня использовать исходные DAO и менеджер, используемый по умолчанию.

Для иллюстрации работы с AppGen, я создал таблицу, приведенную в листинге 2, в MySQL базе данных проекта devworks:

Листинг 2. Создание таблицы базы данных с именем cat
        create table cat (
        cat_id int(8) auto_increment,
        color varchar(20) not null,
        name varchar(20) not null,
        created_date datetime not null,
        primary key (cat_id)
        ) type=InnoDB;

Из директории extras/appgen выполните ant install-detailed. Полный листинг результатов выполнения команды слишком велик для данной статьи, но первая часть приведена в листинге 3:

Листинг 3. Запуск команды AppGen
$ ant install-detailed
        Buildfile: build.xml

        init:
        [mkdir] Created dir: /Users/mraible/Work/devworks/extras/appgen/build
        [echo]
        [echo] +-------------------------------------------------------+
        [echo] |             -- Welcome to the AppGen! --              |
        [echo] |                                                       |
        [echo] | Use the "install" target to use the generic DAO and   |
        [echo] | Manager, or use "install-detailed" to general a DAO   |
        [echo] | and Manager specifically for your model object.       |
        [echo] +-------------------------------------------------------+

        [input] Would you like to generate code from a table or POJO? (table,pojo)
        table
        [input] What is the name of your table (i.e. person)?
        cat
        [input] What is the name, if any, 
        of the module for your table (i.e. organization)?

        [echo] Running Middlegen to generate POJO...

Для использования сгенерированного для таблицы cat кода, необходимо изменить src/dao/com/ibm/dao/hibernate/applicationContext-hibernate.xml и добавить в него Cat.hbm.xml файл для Hibernate. Листинг 4 иллюстрирует, как должен выглядеть ваш модифицированный компонент sessionFactory:

Листинг 4. Добавление Cat.hbm.xml в компонент sessionFactory
        <bean id="sessionFactory" class="...">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
        <list>
        <value>com/ibm/model/Role.hbm.xml</value>
        <value>com/ibm/model/User.hbm.xml</value>
        <value>com/ibm/model/Cat.hbm.xml</value>
        </list>
        </property>
        ...
        </bean>

После выполнения ant setup deploy, появится возможность работать с таблицей cat из установленного приложения:

Рисунок 4. Список cat
Сгенерированный экран мастера
Рисунок 5. Форма cat
Сгенерированный экран деталей

Данные, содержащиеся на скриншотах выше, созданы как часть процесса генерации кода.


Причина #6: Документация

Вы можете найти руководства к каждой конфигурации AppFuse на шести языках: китайском, немецком, английском, корейском, португальском и испанском. Под конфигурацией я в данный момент понимаю различные комбинации фреймворков, такие как Spring MVC и iBATIS, Spring MVC и Hibernate, или JSF и Hibernate. Возможны несколько комбинаций пяти веб-фреймворков и двух постоянных. Кроме данных руководств, AppFuse предлагается с восемью переводами описания основного функционала. Список доступных языков включает китайский, голландский, немецкий, английский, французский, итальянский, португальский и испанский.

Вдобавок к основным руководстам, множество дополнительной документации (см. Ресурсы) было добавлено для описания интеграции с различными базами данных, серверами приложений и другими технологиями с открытым кодом (вкючая JasperReports, Lucene, Eclipse, Drools, Axisи DWR).


Причина #7: Сообщество

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

"Мы считаем себя не просто группой проектов с общим сервером, но так же и сообществом разработчиков и пользователей."

Сообщество AppFuse значительно выросло с момента создания AppFuse как проекта SourceForge (часть struts.sf.net) в 2003 году. С перемещением на java.net в марте 2004 года, оно стало популярным проектом там, и было наиболее посещаемым проектом с января по март 2005 года. Сегодня оно все еще популярно (см. Ресурсы для доступа к статистике проектов java.net), но теряет почву из-за множества проектов, спонсированных Sun.

В конце 2004, Натан Андерсон (Nathan Anderson) стал первым участником сообщества, кроме меня. Множество других добавилось с тех пор, и все участники внесли свой вклад тем или иным путем, помогая сделать сообщество AppFuse более энергичным и веселым.

Наша почтовая рассылка дружелюбна и мы стараемся следовать принципу "нет глупых вопросов". Единственный "RTFM" в наших архивах был от пользователя, а не от разработчика. Определенно, мы верим в философию открытого исходного кода Apache. Цитируя моего хорошего друга Брюса Шнайдера (Bruce Snyder), "Мы пришли из-за кода и остались из-за людей." В настоящее время, большинство разработчиков являются также и пользователями, и у нас определенно получается конструктивно общаться. Вдобавок, большинство документации было создано участниками сообщества, таким образом, сообщество имеет ценный опыт и знания.


Заключение

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

С выходом AppFuse 2.0 мы планируем перейти на JDK 5 (без потери поддержки 1.4) и Maven 2. Данные инструменты упростят разработку, инсталлирование и совершенствование проектов с использованием AppFuse. Мы планируем использовать некоторые особенности Maven 2 по обработке совместных зависимостей, а так же в новую версию будут добавлены библиотеки appfuse-hibernate-2.0.jar и appfuse-jsf-2.0.jar. Данные библиотеки будут описаны в файле pom.xml и будут отвечать за обработку остальных взаимных зависимостей. Вместо того чтобы держать базовые классы AppFuse в своем проекте, Вам будет достаточно просто расширить соответсвующие классы из JAR-файлов, как при работе с обычным фреймворком, что сделает разработку гораздо проще и подтолкнет многих пользователей AppFuse к осуществлению желаемых изменений в проекте.

Как ничто другое, AppFuse поможет вам находиться на острие разработки веб-приложений на Java вместе с нами!

Ресурсы

Научиться

Получить продукты и технологии

  • AppFuse на java.net: Скачайте различные дополнения к AppFuse.
  • WebWork: Простой в использовании веб-фреймворк.
  • DbUnit: Узнайте больше о данном дополнении к JUnit.
  • jMock: Создание динамических mock-обьектов для упрощения модульного тестирования.
  • Canoo WebTest: Автоматизация тестирования интрефейса веб-приложений.
  • HtmlUnit: Отличная поддержка Javascript в WebTest.
  • Cargo: Автоматический старт и остановка ваших контейнеров.
  • Greenbox: Среда разработки.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Технология Java, Open source
ArticleID=230364
ArticleTitle=Семь простых причин использовать AppFuse
publish-date=06092007