Статьи

Пример Java EE 6 — Galleria

Вы когда-нибудь задумывались, где найти хорошие примеры сквозных примеров сборки с помощью Java EE 6? У меня есть. Большая часть информации, которую вы найдете в сети, очень проста и не решает реальных проблем. Это верно для учебника по Java EE 6. Все остальные вещи, как и большинство из того, что публикует Адам Бин, представляют собой очень узкие примеры, которые также не указывают на более полное решение.

Итак, мне было очень приятно наткнуться на более сложный пример, сделанный Винет Рейнольдс. Он называется « Java EE 6 Galleria », и вы можете скачать исходный код из bitbucket. Vineet — разработчик программного обеспечения, участвующий в проекте Arquillian; более конкретно, он внес исправления ошибок и работал над несколькими запросами функций для Arquillian Core, а также интеграции GlassFish, WebLogic и Tomcat для Arquillian. Здесь я впервые встретил его имя. И вслед за аркиллианскими ребятами он чуть ближе и прямо направит меня к этому примеру. Огромное спасибо Vineet за руку помощи во время моих первых попыток начать работу. Следите за ним, если вам нравится твиттер @VineetReynolds .

Вот краткое объяснение его предыстории, и это также серия из серии о том, как запускать ее в разных настройках, и указание на некоторые дополнительные детали под капотом. Это основное введение.

О Галерее

Общее описание проекта следующее: Java EE 6-Galleria — это демонстрационное приложение, демонстрирующее использование JSF 2.0 и JPA 2.0 в проекте Java EE с использованием Domain Driven Design. Он был написан, чтобы служить образцом для доменного проектирования в Java EE 6. Доменная модель приложения не является анемичной и состоит из объектов JPA. Затем объекты используются в сессиях EJB, которые действуют как прикладной уровень. Фасеты JSF используются на уровне презентации с использованием Mojarra и PrimeFaces. Проект стремится обеспечить всестороннее покрытие за счет использования как модульных, так и интеграционных тестов, написанных в JUnit 4. Модульные и интеграционные тесты для EJB и модель предметной области опираются на контейнерный API EJB 3.1. Интеграционные тесты для уровня представления опираются на проект Arquillian и его расширение Drone (для выполнения тестов Selenium).

Доменное проектирование с использованием Java EE 6

DDD как архитектурный подход возможен в Java EE 6. Это связано, прежде всего, с изменениями, внесенными в EJB 3.x и введением JPA. Улучшения, внесенные в спецификации EJB 3.x и JPA, позволяют моделировать домен и прикладной уровень в Java EE 6 с использованием DDD. Основная идея здесь состоит в том, чтобы спроектировать приложение, гарантирующее, что службы персистентности внедряются в уровень приложения и используются для доступа / сохранения объектов в контексте транзакции, установленном уровнем приложения.

Уровень домена

Приложение на данный момент содержит четыре объекта домена — Пользователь, Группа, Альбом и Фото, которые совпадают с объектами JPA в логической модели данных .

Слой репозитория

Помимо логической модели данных вы можете найти четыре репозитория — UserRepository, GroupRepository, AlbumRepository и PhotoRepository. Каждый для одной из четырех сущностей домена. Даже если DDD требует, чтобы у вас были репозитории только для агрегированного корня, а не для всех сущностей домена, он разработан таким образом, чтобы позволить прикладному уровню получать доступ к сущностям домена «Альбом и фотография» без необходимости перемещаться по альбомам и фотографиям через UserRepository. Репозитории являются сеансными компонентами без сохранения состояния без интерфейса и построены с использованием шаблона универсальной службы CRUD, опубликованного Адамом Бьеном .

Прикладной уровень

Прикладной уровень предоставляет услуги, которые должны использоваться уровнем представления. Он также отвечает за управление транзакциями, а также служит барьером отказов для нижележащих уровней. Прикладной уровень координирует работу с репозиториями домена и объектами домена для достижения желаемых целей предоставляемых сервисов. В некотором смысле этот уровень эквивалентен уровню обслуживания в традиционных приложениях. Прикладной уровень предоставляет свои сервисы через интерфейсы UserService, GroupService, AlbumService и PhotoService, а также отвечает за проверку предоставления доменных объектов из вышеперечисленных слоев, прежде чем координировать действия среди объектов в доменном слое. Это делается с помощью ограничений JSR-303 для доменных объектов.

Как это выглядит

И вот как выглядит этот пример, если вы используете его на последней версии GlassFish 3.1.2. Хотите настроить это самостоятельно? Ждите следующего поста или попробуйте сами;)

Ниже мы собираемся настроить пример как он есть непосредственно с последними версиями GlassFish 3.1.2, Hibernate и Derby.

подготовка

Настройтесь на какую-то конфигурацию. Установите Grep последнюю версию NetBeans 7.1 (в версию Java EE уже включена необходимая версия GlassFish 3.1.2 ) и установите ее. Я также предполагаю, что у вас есть приличный Java SDK 7 (6 тоже подойдет). В зависимости от стратегии развития вам также понадобятся Mercurial Client и Maven. По крайней мере, Maven также включен в NetBeans, так что … я имею в виду … зачем делать вашу жизнь сложнее, чем она есть сейчас? 😉

Среды

Еще несколько слов об окружающей среде. Этот пример был настроен для поддержки различных сред. Начиная с простой среды «разработки», вам также необходимо настроить «тестовую» и последнюю, но не менее важную «рабочую» среду. Все различные среды обрабатываются профилями maven, поэтому вам, возможно, придется немного настроить в течение следующих минут.

Создайте экземпляры базы данных

Первое, что нужно сделать, это решить, куда положить все свои вещи. В примерах используется дерби из коробки, и поэтому вы должны либо установить Java DB (часть JDK), либо использовать экземпляр дерби GlassFish, который предварительно сконфигурирован для NetBeans. Давайте усложним это и предположим, что мы используем установку Java DB, которая поставляется с вашим JDK. Продолжайте, откройте приглашение CMD и перейдите к папке% JAVA_HOME% и далее вниз по папке / bin базы данных. Выполните сценарий «startNetWorkServer» и следите за запуском экземпляра derby. Теперь откройте другое приглашение CMD и перейдите в папку db / bin и выполните сценарий «ij». Это должно придумать подсказку ”ij>. Теперь введите следующую строку подключения:

1
connect 'jdbc:derby://localhost:1527/GALLERIATEST;create=true';

Эта команда соединяет вас с экземпляром derby и создает базу данных GALLERIATEST, если она еще не существует. В примере Galleria в качестве инструмента управления изменениями базы данных используется удобный небольшой инструмент под названием dbdeploy . Это позволяет вам делать постепенные обновления физической модели базы данных, которые отслеживаются в таблице изменений. (Подробнее об этом позже в серии). Вы должны создать таблицу изменений:

  CREATE TABLE changelog (
   change_number DECIMAL (22,0) NOT NULL,
   complete_dt TIMESTAMP NOT NULL,
   apply_by VARCHAR (100) NOT NULL,
   описание VARCHAR (500) НЕ NULL
 );

 ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY KEY (номер_смены);

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

И если вам не нравится этот подход. Запустите NetBeans, перейдите на вкладку служб, выберите «Новое соединение» и добавьте новое сетевое соединение Java DB с хостом: localhost, порт: 1527 и База данных: GALLERIATEST; create = true. Установите для пользователя и пароля значение «APP» и нажмите «Test Connection». Выберите APP в качестве схемы для вашей новой БД. И вы сделали!

Создайте домен GlassFish

Мы запускаем это с последней версии GlassFish. Первое, что нужно сделать сейчас, — это создать новый домен. Перейдите в каталог установки GlassFish и перейдите к glassfish3 / bin и выполните следующее:

  asadmin create-domain --portbase 10000 --nopassword тестовый домен

Это создает новый тестовый домен для вас. Теперь перейдите в эту папку домена («glassfish3 / glassfish / domains / test-domain») и откройте файл config / domain.xml.

Теперь мы собираемся добавить созданную базу данных derby в качестве пула соединений к вновь созданному домену GlassFish. Перейдите к элементу <resources> и добавьте следующий пул соединений и jdbc-resource под последний закрывающий элемент </ jdbc-connection-pool>:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
 <jdbc-connection-pool driver-classname="" datasource-classname="org.apache.derby.jdbc.ClientDataSource40" res-type="javax.sql.DataSource" description="" name="GalleriaPool" ping="true">
      <property name="User" value="APP"></property>
      <property name="DatabaseName" value="GALLERIATEST"></property>
      <property name="RetrieveMessageText" value="true"></property>
      <property name="Password" value="APP"></property>
      <property name="ServerName" value="localhost"></property>
      <property name="Ssl" value="off"></property>
      <property name="SecurityMechanism" value="4"></property>
      <property name="TraceFileAppend" value="false"></property>
      <property name="TraceLevel" value="-1"></property>
      <property name="PortNumber" value="1527"></property>
      <property name="LoginTimeout" value="0"></property>
    </jdbc-connection-pool>
    <jdbc-resource pool-name="GalleriaPool" description="" jndi-name="jdbc/galleriaDS"></jdbc-resource>

Теперь найдите элемент: <config name = ”server-config”> и внутри него найдите последнюю запись <resource-ref. Добавьте туда следующую строку:

1
  <resource-ref ref="jdbc/galleriaDS"></resource-ref>

Последнее, что нужно сделать, пока мы не будем готовы запустить наш экземпляр. Нам нужно добавить JDBC Realm для примера Galleria. снова найдите <config name = ”server-config”> и внутри него найдите </ auth-realm>. Под этим положите следующее:

01
02
03
04
05
06
07
08
09
10
11
12
  <auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="GalleriaRealm">
      <property name="jaas-context" value="jdbcRealm"></property>
      <property name="encoding" value="Hex"></property>
      <property name="password-column" value="PASSWORD"></property>
      <property name="datasource-jndi" value="jdbc/galleriaDS"></property>
      <property name="group-table" value="USERS_GROUPS"></property>
      <property name="charset" value="UTF-8"></property>
      <property name="user-table" value="USERS"></property>
      <property name="group-name-column" value="GROUPID"></property>
      <property name="digest-algorithm" value="SHA-512"></property>
      <property name="user-name-column" value="USERID"></property>
    </auth-realm>

Обязательно не помещайте новую область под default-config. Это не будет работать. Хорошо. Давайте получим источники 🙂

Получение исходного кода и открытие его в NetBeans

Vineet размещает пример Galleria на bitbucket.org. Итак, вы должны пойти туда и посетить проект java-ee-6-galleria . Существует три способа перенести источники на локальный жесткий диск. Либо через командную строку hg:

  hg clone https://bitbucket.org/VineetReynolds/java-ee-6-galleria

или через загрузку веб-сайта (вверху справа «получить источники») или напрямую через NetBeans. Вам нужен клиент Mercurial для вашей ОС для первого и третьего варианта. Я использую TortoiseHg для Windows. Это необходимо установить и настроить с помощью NetBeans, прежде чем выполнять следующие действия. Давайте попробуем последний вариант здесь. Выберите «Команда> Клонировать других». Введите URL хранилища и оставьте имя пользователя / пароль пустыми. Нажмите «Далее» два раза (нам не нужно менять пути по умолчанию;)) и выберите родительский каталог, в который нужно вставить материал. Нажмите «Готово» и пусть клиент Mercurial сделает всю работу. Вам предлагается открыть найденные проекты после его завершения. Это должно выглядеть примерно как на картинке справа. Если у вас возникли проблемы с подключением, обязательно обновите настройки прокси.

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

Добавление профиля разработки

Далее следует добавить некоторые вещи в Maven pom.xml проекта galleria-ejb. Откройте его и прокрутите вниз до раздела <profile>. Вы найдете два (сонар и производство). Мы собираемся добавить профиль разработки, добавив в него следующие строки (не забудьте настроить пути GlassFish для вашей среды):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<galleria.derby.testInstance.jdbcUrl>jdbc:derby://localhost:1527/GALLERIATEST</galleria.derby.testInstance.jdbcUrl>
<galleria.derby.testInstance.user>APP</galleria.derby.testInstance.user>
<galleria.derby.testInstance.password>APP</galleria.derby.testInstance.password>
<galleria.glassfish.testDomain.user>admin</galleria.glassfish.testDomain.user>
<galleria.glassfish.testDomain.passwordFile>D:/glassfish-3.1.2-b22/glassfish3/glassfish/domains/test-domain/config/local-password</galleria.glassfish.testDomain.passwordFile>
<galleria.glassfish.testDomain.glassfishDirectory>D:/glassfish-3.1.2-b22/glassfish3/glassfish/</galleria.glassfish.testDomain.glassfishDirectory>
<galleria.glassfish.testDomain.domainName>test-domain</galleria.glassfish.testDomain.domainName>
<galleria.glassfish.testDomain.adminPort>10048</galleria.glassfish.testDomain.adminPort>
<galleria.glassfish.testDomain.httpPort>10080</galleria.glassfish.testDomain.httpPort>
<galleria.glassfish.testDomain.httpsPort>10081</galleria.glassfish.testDomain.httpsPort>
</properties>
</profile>

ОК. Как вы можете видеть, пара вещей определена здесь. И профиль активирован по умолчанию. Вот и все. Пока что.

Тестирование проекта ejb-Galleria

Попробуем запустить тестовые сценарии в проекте ejb-Galleria. Щелкните правой кнопкой мыши и выполните команду «clean and build». Следуйте выводу консоли, чтобы увидеть, что на самом деле происходит. Мы собираемся исследовать это немного дальше с одним из следующих постов. Сегодня мы делаем это только для того, чтобы все было правильно настроено. Это должно закончиться с:

  Выполнено тестов: 49, сбоев: 0, ошибок: 0, пропущено: 0
 СТРОЙ УСПЕХ

Это «Грин-бар» 🙂 Поздравляем!

Постройте и разверните проект

Теперь перейдите в NetBeans «Инструменты> Параметры> Разное> Maven» и установите флажок «Пропускать тесты для любых выполнений сборки, не связанных напрямую с тестированием». Вернитесь в главное окно и щелкните правой кнопкой мыши по проекту Galleria и сделайте очистку и постройте там.

  Реактор Резюме:

 Galleria ................................. УСПЕХ [0.431s]
 galleria-ejb ............................. УСПЕХ [5.302s]
 galleria-jsf ............................. УСПЕХ [4.486s]
 Galleria EAR ............................. УСПЕХ [1.308s]
 -------------------------------------------------- ----------
 СТРОЙ УСПЕХ
 -------------------------------------------------- ----------
 Провел на форуме: 11.842с

Хорошо. Теперь давайте запустим домен GlassFish. Перейдите к вашей установке GlassFish и найдите папку glassfish3 / bin. Откройте там командную строку и запустите:

  тестовый домен стартового домена asadmin

Вы можете увидеть запуск домена. Теперь откройте браузер и перейдите по адресу http: // localhost: 10048 / . Через несколько секунд вам будет показана консоль администратора вашего сервера GlassFish. Теперь вам нужно установить Hibernate. Выберите «Инструмент обновления» (внизу слева) и перейдите на вкладку «Доступные дополнения». Выберите «Спящий режим» и нажмите «Установить» (вверху справа). Остановите сервер после его установки и перезапустите его с помощью команды выше. Снова откройте консоль администратора и нажмите «Приложения». Нажмите маленькую кнопку «развернуть» вверху и найдите «java-ee-6-galleria-galleria-ear / target / galleria-ear-0.0.1-SNAPSHOT.ear». Нажмите «ОК» (вверху справа). Вы сделали через несколько секунд. Теперь переключитесь на http: // localhost: 10080 / Galleria /, и вы увидите экран приветствия. Поздравляю. Вы настраиваете пример Galleria на GlassFish! Зарегистрируйтесь, войдите в систему и немного поиграйте с приложением!

Следующие части этой серии расскажут вам о деталях приложения. Я собираюсь покрыть тесты и общие понятия. И мы также собираемся изменить и JPA-провайдера и базу данных в будущем посте.

Хотите знать, что нужно для того, чтобы запустить его на последней версии WebLogic 12c? Читать дальше!

Ссылка: Пример Java EE 6 — Galleria — Часть 1 и Пример Java EE 6 — Запуск Galleria на GlassFish 3.1.2 — Часть 2 от нашего партнера JCG