20 марта 2013 г.

Создание EJB при помощи maven и Idea

Используются: maven 3, IntelliJ Idea 12 Ultimate, Enterprise Java Bean 3.1, JBoss 7.1

Давайте создадим EJB в виде maven-проекта при помощи Idea. Выберите File - New Project. В открывшемся окне выберите Maven Module.


В поле Project name укажите имя проекта. В имени проекта принятно использовать только строчные буквы. Если в названии присутствует несколько слов, вместо пробелов ставятся дефисы. Например: another-yet-project. Затем жмём кнопку Next.

Обратите внимание, что в открывшемся окне в первых двух строках (Add as module to и Parent) сняты галочки и ничего не указано. Это связано с тем, что мы создаём самостоятельный maven-проект. Если бы создавали его как модуль другого проекта, эти две строки содержали бы информацию о родительском maven-проекте.

ArtifactId - имя вашего проекта в maven. Соглашения об именах такие же, как и на предыдущем шаге. Можно оставить то, что будет указано по умолчанию.

GroupId - имя группы для нескольких взаимосвязанных проектов. Принято также писать строчными буквами, пробелы заменяя точками. В качестве имени группы можно выбрать общий для проектов java-пакет. Например, com.blogspot.developer.remarks.


Затем отмечаем галочку Create from archetype. Архетип - это структура конфигурационных файлов и каталогов в maven, принятая для данного типа компонентов. Свои архетипы есть для EJB, EAR, WAR, SAR и т.п. Нам же нужно выбрать в списке ejb-javaee6.

Скорее всего, у вас может не оказаться в списке этого архетипа. Тогда вам нужно его добавить. Нажмите кнопку Add archetype. В появившемся окне укажите в соответствующих полях следующие значения:
<dependency>
<groupId>org.codehaus.mojo.archetypes</groupId>
<artifactId>ejb-javaee6</artifactId>
<version>1.5</version>
</dependency>
Эти значения можно взять с search.maven.org, выполнив поиск по имени необходимого архетипа. Нажмите ОК.


Затем жмём Next.

В третьем окне менять ничего не нужно. Только проконтролируйте, что в поле Maven home directory указан правильный путь до maven. Впрочем, эту настройку можно будет изменить и потом. Жмём Finish.

В результате будет создана необходимая структура проекта, а также ключевой файл для maven - pom.xml. В этом файле уже будет указана достаточная для сборки информация.


Рассмотрим файл pom.xml поподробнее.
    <groupId>com.blogspot.developer.remarks</groupId>
    <artifactId>another-yet-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>ejb</packaging>
    <name>another-yet-project</name>
groupId, artifactId - это ровно то, что мы указывали ранее. version имеет значение SNAPSHOT - т.е. временная версия ПО, находящегося в разработке. packaging - ejb говорит maven о том, что на выходе требуется jar-файл с ejb.
    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
Секция, которая содержит свойства проекта. Вы можете добавить туда любые свойства, которые вам нужны (аналог property-файлов). Чаще всего там указывают различные номера версий. Имя свойства записывается строчными буквами. Пробелы заменяются точками.
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
Секция dependencies содержит зависимости (библиотеки кода) для данного проекта. Здесь указана только одна зависиомость - API Java версии Enterprise Edition. Scope - provided свидетельствует о том, что данная зависимость будет предоставлена средой исполнения (сервером приложений JBoss), поэтому не нужно включать её в jar-файл. Вы можете добавлять любые зависимости, которые вам необходимы. Множество зависимостей можно найти на search.maven.org.

Далее идёт секция build, которая содержит плагины, используемые при сборке.

maven-ejb-plugin - плагин, который позволяет настроить сборку ejb.

Давайте добавим в наш проект простейший EJB. Создадим клиентский интерфейс SimpleBeanRemote, а затем и реализацию SimpleBean.

Интерфейс:
import javax.ejb.Remote;
@Remote
public interface SimpleBeanRemote {
    String getMessage();
}
Реализация:

import javax.ejb.Stateless;
@Stateless
public class SimpleBean implements SimpleBeanRemote {
@Override
public String getMessage() {
return "This message was generated by simple ejb";
}
}

Наш EJB не делает ничего особенного. У него есть единственный метод, который возвращает одну и ту же строку. Аннотацией @Remote помечается интерфейс, который будет использоваться клиентом. Аннотация @Stateless указывает на то, что данный EJB не сохраняет своё состояние между вызовами его методов. Поведение EJB с такой аннотацией аналогично созданию нового экземпляра класса при каждом вызове любого из его методов.

Настало время собрать jar-файл. Для этого перейдём на вкладку Maven Projects.


С точки зрения maven сборка нашего приложения имеет несколько фаз, которые указаны в списке Lifecycle. Они выполняются последовательно друг за другом, начиная от фазы validate (clean сюда не входит, его нужно вызывать отдельно) и до выбранного этапа.

Основные фазы жизненного цикла сборки приложений в maven:
  1. clean - удалить все ранее сгенерированные maven'ом файлы; используется, как правило, только при серьёзных изменениях в исходниках
  2. validate - проверка проекта и доступности всей необходимой информации
  3. compile - компиляция исходников
  4. test - на этом шаге вызываются unit-тесты, если они есть; эти тесты исключаются из самой сборки
  5. package - упаковка скомпилированного кода в необходимый формат дистрибутива
  6. install - публикация дистрибутива в локальном репозитории; проект становится доступным для других локальных проектов
  7. deploy - публикация дистрибутива в удалённом репозитории; проект становится доступным для других разработчиков в вашей команде
Дважды щёлкните на фазе install - если всё было сделано правильно, в папке target в корне проекта вы получите готовый файл another-yet-project-1.0-SNAPSHOT.jar, который можно разместить на сервере приложений.

Если вы используете jboss 7.1, то вам нужно скопировать этот файл в папку $JBOSS_HOME/standalone/deployments и запустить сервер из папки $JBOSS_HOME/bin командой
./standalone.sh
В логах сервера вы увидите следующие строки:

java:global/another-yet-project-1.0-SNAPSHOT/SimpleBean!com.blogspot.developer.remarks.SimpleBeanRemote
java:app/another-yet-project-1.0-SNAPSHOT/SimpleBean!com.blogspot.developer.remarks.SimpleBeanRemote
java:module/SimpleBean!com.blogspot.developer.remarks.SimpleBeanRemote
java:jboss/exported/another-yet-project-1.0-SNAPSHOT/SimpleBean!com.blogspot.developer.remarks.SimpleBeanRemote
java:global/another-yet-project-1.0-SNAPSHOT/SimpleBean
java:app/another-yet-project-1.0-SNAPSHOT/SimpleBean
java:module/SimpleBean

Данные строки свидетельствуют о том, что компонент был успешно развёрнут на сервере.

4 комментария:

  1. А в каких папках должны лежать интерфейс и его реализация? Так сложно было сделать скрин структуры проекта?

    ОтветитьУдалить
  2. Оо, как это здорово: сделала все по туториалу и сразу вот так работает, без дополнительных проблем! Впервые в моей жизни!
    Спасибо!

    ОтветитьУдалить
  3. Как обратится к этому EJB ?Можно ли обратится из браузера?

    ОтветитьУдалить
  4. Блин не работает, ай ай ай

    ОтветитьУдалить