Jboss Seam – мощная платформа с открытым кодом, предназначенная для разработки сложных интернет-приложений на языке программирования Java. Seam включает в себя такие технологии как AJAX, JSF, JPA, EJB 3.0 и BPM. Из своего опыта могу сказать, что работать с Seam очень удобно. В этом фреймворке уже реализовано много задач, с которыми чассто встречается разработчик. Seam иногда поражает небольшим количеством кода, с помощью которого реализуются сложные задачи.

Начать работать с Jboss Seam очень просто. Для этого вам всего лишь необходимо установить Jboss Application Server, который можно найти здесь, а также фреймворк Seam.  Каркасы приложений можно создать с помощью seam gen – утилиты командной строки. Так же, для работы с этим фреймворком существуют плагины для среды разработки Eclipse. Подробнее о них можно узнать по адресу http://www.jboss.org/tools . В данной статье приложение будет разрабатываться с помощью этих плагинов.

Начало работы с Jboss Seam

Давайте создадим каркас простого приложения в среде Eclipse. Для этого, после установки Jboss Tools, переключимся в перспективу «Seam». Далее, выберем в меню File->New->Seam web project. В появившемся меню введем название проекта (с маленькой буквы), создадим новую среду выполнения и новый сервер, на котором будет работать наше приложение. В качестве среды и сервера, необходимо выбрать Jboss AS той версии, которую вы установили. В качестве конфигурации выберите «Dynamic web project with Seam 2.1″. Если вы установили другую версию Seam – выберите ее. Нажав кнопку «далее», пропускаем несколько экранов – в них мы оставим конфигурацию по умолчанию. Интерес для нас представляет экран, на котором находятся настройки Seam. В поле Seam Runtime укажите путь к директории с установленным Jboss Seam. В группе настроек базы данных выберите подходящий вам сервер и введите настройи доступа выбрав необходимый JDBC драйвер. Проверьте соединение с базой данных. В группе Code Generation введите имена пакетов для вашего проекта. Нажмите кнопку «Finish». Конфигурация завершена.

В нижней части экрана выберите вкладку «Jboss server view». На ней вы увидите созданных в процессе конфигурации сервер. Запустите его. Теперь, в браузере вы можете увидеть вновь созданное приложение:

Скелет приложения, созданный с помощью Seam gen

Seam entity

Для создания новой модели данных воспользуйтесь пунктом меню File->New->Seam entity. Вы увидите окно, где можно указать параметры создаваемой сущности. Достаточно ввести только имя класса. Остальные поля будут заполнены автоматически. Для данного примера я создал сущность Article – статья. После завершения операции, в папке src/hot можно увидеть класс ArticleHome, предназначенный для работы со списком статей и ArticleList, предназначенный для редактирования параметров статьи. В папке src/main будет находится класс Article – сама модель данных. Код этого класса необходимо изменить таким образом, чтобы он соответствовал вашим задачам. В моем случае я избавился от полей name и version. Вместо них добавил title и text. Код этого класса выглядит следующим образом:

@Entity
public class Article implements Serializable {
	private static final long serialVersionUID = 1L;
	private Long id;
	private String title;
	private String text;

	@Column(length = 200)
	@NotEmpty
	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	@Column(length = 3000)
	@NotEmpty
	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	@Id
	@GeneratedValue
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

}

В папке WebContent появились страницы списка статей и редактирования статьи – articleList.xhtml и article.xhtml. Изменим код страницы articleList.xhtml таким образом, чтобы на этой странице выводились только заголовки статей, являющиеся ссылками на страницу редактирования отдельной статьи:

<h:dataTable id="articleList" var="article"
	value="#{articleList.resultList}"
	rendered="#{not empty articleList.resultList}">
	<h:column>
		<f:facet name="header">Title</f:facet>
		<s:link id="article" value="#{article.title}" propagation="none"
			view="/article.xhtml">
			<f:param name="articleId" value="#{article.id}" />
		</s:link>
	</h:column>
</h:dataTable>

Код страницы редактирования статьи необходимо тоже изменить:

<rich:panel>
	<f:facet name="header">Edit article</f:facet>

	<s:decorate id="titleField" template="layout/edit.xhtml">
		<ui:define name="label">Title</ui:define>
		<h:inputText id="title" required="true"
			value="#{articleHome.instance.title}" />
	</s:decorate>

	<s:decorate id="textField" template="layout/edit.xhtml">
		<ui:define name="label">Text</ui:define>
		<h:inputTextarea id="text" required="true"
			value="#{articleHome.instance.text}" cols="23" rows="10" />
	</s:decorate>

	<div style="clear: both" />

</rich:panel>

После перезапуска сервера, перейдя на страницу articleList.seam можно увидеть список статей и добавить новую:

Список статей

Приложение на Seam за 5 минут!

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

Более подробно Seam будет рассмотрен в следующих статьях.