Это рабочее пространство состоит из примеров Java EE 7 и модульных тестов. Они распределены по разным каталогам, по одному для каждой технологии/JSR.
Некоторые образцы/тесты имеют документацию, в противном случае читайте код. Книга Java EE 7 Essentials ссылается на большинство этих примеров и дает пояснения. Не стесняйтесь добавлять документы и отправлять запрос на включение.
Образцы тестируются на Payara, GlassFish, Wildfly и других платформах с использованием экосистемы Arquillian.
Краткую инструкцию по клонированию, сборке, импорту и запуску примеров на локальном компьютере @radcortez предоставляет в этом примере видео https://www.youtube.com/watch?v=BB4b-Yz9cF0.
В данный момент времени может быть активен только один профиль контейнера, иначе возникнут конфликты зависимостей.
Доступно 16 профилей контейнеров для 6 разных серверов:
Пайара и ГлассФиш
payara-ci-managed
Этот профиль установит сервер Payara и запустит сервер для каждого образца. Полезно для CI-серверов. Используемую версию Payara можно установить с помощью свойства payara.version
. Это профиль по умолчанию, и его не нужно указывать явно.
payara-embedded
Этот профиль использует встроенный сервер Payara и работает в той же JVM, что и TestClass. Полезно для разработки, но имеет недостаток, связанный с запуском сервера для каждого образца.
payara-remote
Этот профиль требует, чтобы вы запустили сервер Payara вне сборки. Затем каждый образец будет повторно использовать этот экземпляр для запуска тестов. Полезно для разработки, чтобы избежать затрат на запуск сервера за образец.
Этот профиль поддерживает некоторые тесты для установки места установки Payara с помощью системного свойства glassfishRemote_gfHome
. Например
-DglassfishRemote_gfHome=/opt/payara171
Это используется для отправки команд asadmin для создания ресурсов контейнера, таких как пользователи в хранилище удостоверений.
glassfish-embedded
Этот профиль использует встроенный сервер GlassFish и работает в той же JVM, что и TestClass. Полезно для разработки, но имеет недостаток, связанный с запуском сервера для каждого образца.
glassfish-remote
Этот профиль требует запуска сервера GlassFish вне сборки. Затем каждый образец будет повторно использовать этот экземпляр для запуска тестов. Полезно для разработки, чтобы избежать затрат на запуск сервера за образец.
Этот профиль поддерживает некоторые тесты для определения места установки GlassFish с помощью системного свойства glassfishRemote_gfHome
. Например
-DglassfishRemote_gfHome=/opt/glassfish41
Это используется для отправки команд asadmin для создания ресурсов контейнера, таких как пользователи в хранилище удостоверений.
WildFly
wildfly-ci-managed
Этот профиль установит сервер Wildfly и запустит его для каждого образца. Полезно для CI-серверов. Используемую версию WildFly можно установить с помощью свойства wildfly.version
.
wildfly-embedded
Этот профиль практически идентичен профилю, управляемому wildfly-ci. Он установит тот же сервер Wildfly и снова запустит этот сервер для каждого образца, но вместо этого использует встроенный соединитель Arquillian для его запуска в той же JVM. Полезно для CI-серверов. Используемую версию WildFly можно установить с помощью свойства wildfly.version
.
wildfly-remote
Этот профиль требует, чтобы вы запустили сервер Wildfly вне сборки. Затем каждый образец будет повторно использовать этот экземпляр для запуска тестов. Полезно для разработки, чтобы избежать затрат на запуск сервера за образец.
wildfly-swarm
В этом профиле используется WildFly Swarm, который позволяет создавать uberjars, содержащие достаточное количество сервера приложений WildFly. Здесь включенные части WildFly выбираются на основе проверки приложения и поиска фактически используемых API-интерфейсов Java EE. Используемую версию WildFly Swarm можно установить с помощью свойства wildfly.swarm.version
.
ТомEE
tomee-ci-managed
Этот профиль установит сервер TomEE и запустит этот сервер для каждого образца. Полезно для CI-серверов. Этот профиль не может подключиться к работающему серверу.
Обратите внимание, что используемая версия TomEE должна присутствовать в доступном репозитории maven. Значения по умолчанию в этом профиле предполагают, что адаптер arquillian и сервер TomEE имеют одинаковую версию. Например, оба 7.0.0.
Чтобы использовать сервер TomEE, который недоступен в maven Central, один из способов использовать его для примеров — установить его в локальный файл .m2 следующим образом:
Клонировать репозиторий TomEE:
git clone https://github.com/apache/tomee
cd tomee
При необходимости переключитесь на нужную версию, затем соберите и установите в .m2:
mvn clean install -pl tomee/apache-tomee -am -Dmaven.test.skip=true
mvn clean install -pl arquillian -amd -Dmaven.test.skip=true
Убедитесь, что установленная версия (см. pom.xml в проекте TomEE) соответствует tomee.version
в разделе свойств в корневом файле pom.xml проекта примеров.
tomee-embedded
Этот профиль использует встроенный сервер TomEE и работает в той же JVM, что и TestClass.
Свобода
liberty-managed
Этот профиль будет запускать сервер Liberty для каждого образца и, при необходимости, подключаться к работающему серверу, который вы можете запустить вне сборки (с тем ограничением, что этот сервер должен запускаться на хосте, поскольку тесты выполняются с использованием одного и того же пользователя). ).
Чтобы подключиться к работающему серверу, системное свойство org.jboss.arquillian.container.was.wlp_managed_8_5.allowConnectingToRunningServer
должно быть установлено в значение true. Например
-Dorg.jboss.arquillian.container.was.wlp_managed_8_5.allowConnectingToRunningServer=true
Этот профиль требует, чтобы вы указали место установки Liberty с помощью системного свойства libertyManagedArquillian_wlpHome
. Например
-DlibertyManagedArquillian_wlpHome=/opt/wlp
Для этого профиля также требуется, чтобы функция localConnector была настроена в файле server.xml, и если все тесты должны запускаться, функция javaee-7.0. Например,
< featureManager >
< feature >javaee-7.0</ feature >
< feature >localConnector-1.0</ feature >
</ featureManager >
В более старых версиях Liberty (до 16.0.0.0) для попытки выполнения тестов JASPIC необходим чит-код, который создает группу во внутреннем реестре пользователей Liberty:
< basicRegistry id = " basic " >
< group name = " architect " />
</ basicRegistry >
Этот чит не нужен для последних версий Liberty (16.0.0.0/2016.7 и выше)
liberty-ci-managed
Этот профиль загрузит и установит сервер Liberty и запустит сервер для каждого образца. Полезно для CI-серверов. Обратите внимание, это не настоящий встроенный сервер, а обычный сервер. Теперь он называется «встроенным», поскольку отдельная установка не требуется, поскольку он загружается автоматически.
Веблогика
weblogic-remote
Этот профиль требует запуска сервера WebLogic вне сборки. Затем каждый образец будет повторно использовать этот экземпляр для запуска тестов.
Этот профиль требует, чтобы вы указали место установки WebLogic с помощью системного свойства weblogicRemoteArquillian_wlHome
. Например
-DweblogicRemoteArquillian_wlHome=/opt/wls12210
Предполагается, что имя пользователя и пароль по умолчанию — «admin» и «admin007» соответственно. Это можно изменить с помощью системных свойств weblogicRemoteArquillian_adminUserName
и weblogicRemoteArquillian_adminPassword
. Например
-DweblogicRemoteArquillian_adminUserName=myuser
-DweblogicRemoteArquillian_adminPassword=mypassword
кот
tomcat-remote
Этот профиль требует запуска обычного сервера Tomcat (8.5 или 9) вне сборки. Затем каждый образец будет повторно использовать этот экземпляр для запуска тестов.
Tomcat поддерживает примеры, в которых используются сервлеты, JSP, язык выражений (EL), WebSocket и JASPIC.
Этот профиль требует, чтобы вы включили JMX в Tomcat. Это можно сделать, добавив следующее в [tomcat home]/bin/catalina.sh
:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote=true "
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false "
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=localhost "
Этот профиль также требует, чтобы вы установили имя пользователя ( tomcat
) и пароль ( manager
) для приложения управления в tomcat-users.xml
. Полный пример см. в файле test-utils/src/main/resources/tomcat-users.xml
в этом репозитории.
Имейте в виду, что это следует делать только для экземпляра Tomcat, который используется исключительно для тестирования, поскольку вышеизложенное сделает установку Tomcat совершенно небезопасной!
tomcat-ci-managed
Этот профиль установит сервер Tomcat и запустит сервер для каждого образца. Полезно для CI-серверов. Используемую версию Tomcat можно установить с помощью свойства tomcat.version
.
Контейнеры, которые загружают и устанавливают сервер (профили, управляемые *-ci), позволяют вам переопределить используемую версию, например:
-Dpayara.version=4.1.1.163
Это изменит версию с текущей (например, 4.1.1.171.1) на 4.1.1.163 для целей тестирования Payara.
-Dglassfish.version=4.1
Это изменит версию с текущей (например, 4.1.1) на 4.1 для целей тестирования GlassFish.
-Dwildfly.version=8.1.0.Final
Это изменит версию с текущей (например, 10.1.0.Final) на 8.1.0.Final для WildFly.
Чтобы запустить их в консоли, выполните :
mvn test -fae
в каталоге верхнего уровня, чтобы запустить тесты для профиля по умолчанию.При разработке и запуске их из IDE не забудьте активировать профиль перед запуском теста.
Чтобы узнать больше об Arquillian, обратитесь к руководствам Arquillian.
Чтобы запустить только часть тестов, выполните в каталоге верхнего уровня :
mvn clean install -pl "test-utils,util" -am
cd jaspic
mvn clean test -P liberty-ci-managed
С вашей помощью мы сможем улучшить этот набор примеров, учиться друг у друга и развивать сообщество увлеченных людей, которые заботятся о технологиях, инновациях и качестве кода. Каждый вклад имеет значение!
Есть всего несколько вещей, которые вы должны иметь в виду, прежде чем отправлять запрос на включение, чтобы мы могли легко включить все новые вещи в основную ветку.
Стандартные тесты основаны на jUnit — например, этот коммит. Именование тестовых классов должно соответствовать надежным стандартам именования **/*Test.java
, **/*Test*.java
или **/*TestCase.java
.
Ради ясности и последовательности, а также для минимизации первоначальной сложности мы предпочитаем стандартные тесты jUnit с использованием Java с дополнительными помощниками HtmlUnit, Hamcrest и, конечно же, Arquillian. Пожалуйста, не используйте альтернативы этим технологиям. Если в этот проект необходимо добавить какую-либо новую зависимость, она должна предоставить что-то, что не покрывается этими существующими зависимостями.
git pull upstream master
и все готово.git checkout -b my_new_cool_feature
Вот и все! Добро пожаловать в сообщество!
Задания CI выполняются Трэвисом. Обратите внимание: по самой природе представленных здесь образцов совершенно нормально, что не все тесты проходят успешно. Обычно это указывает на ошибку на сервере, на котором выполняются примеры. Если вы считаете, что на самом деле неисправен тест, сообщите о проблеме или предоставьте PR с исправлением.
Установите клиент Docker с http://boot2docker.io.
Создайте образец, который вы хотите запустить как
mvn clean package -DskipTests
Например:
mvn -f jaxrs/jaxrs-client/pom.xml clean package -DskipTests
Измените вторую строку в Dockerfile
чтобы указать расположение созданного файла WAR.
Запустите boot2docker и дайте команду
docker build -it -p 80:8080 javaee7-sample
В другой оболочке найдите IP-адрес работающего контейнера следующим образом:
boot2docker ip
Доступ к образцу осуществляется по адресу http://IP_ADDRESS:80/jaxrs-client/webresources/persons. Точный URL-адрес может отличаться в зависимости от образца.