Итак, мне было очень приятно наткнуться на более сложный пример, сделанный Винет Рейнольдс. Он называется « 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