이 작업공간은 Java EE 7 샘플과 단위 테스트로 구성됩니다. 이는 각 기술/JSR에 대해 하나씩 서로 다른 디렉토리로 분류됩니다.
일부 샘플/테스트에는 문서가 있습니다. 그렇지 않으면 코드를 읽어보세요. Java EE 7 Essentials 책에서는 이러한 샘플의 대부분을 참조하고 설명을 제공합니다. 자유롭게 문서를 추가하고 끌어오기 요청을 보내세요.
샘플은 Arquillian 생태계를 사용하여 Payara, GlassFish, Wildfly 등에서 테스트됩니다.
로컬 머신에서 샘플을 복제, 빌드, 가져오기 및 실행하는 방법에 대한 간단한 지침은 @radcortez가 이 샘플 비디오(https://www.youtube.com/watch?v=BB4b-Yz9cF0)에서 제공합니다.
주어진 시간에 하나의 컨테이너 프로필만 활성화될 수 있습니다. 그렇지 않으면 종속성 충돌이 발생합니다.
6개의 서로 다른 서버에 대해 16개의 사용 가능한 컨테이너 프로필이 있습니다.
파야라와 글래스피쉬
payara-ci-managed
이 프로필은 Payara 서버를 설치하고 샘플별로 서버를 시작합니다. CI 서버에 유용합니다. 사용되는 Payara 버전은 payara.version
속성을 통해 설정할 수 있습니다. 이는 기본 프로필이므로 명시적으로 지정할 필요가 없습니다.
payara-embedded
이 프로필은 Payara 임베디드 서버를 사용하며 TestClass와 동일한 JVM에서 실행됩니다. 개발에 유용하지만 샘플별로 서버를 시작해야 한다는 단점이 있습니다.
payara-remote
이 프로필을 사용하려면 빌드 외부에서 Payara 서버를 시작해야 합니다. 그런 다음 각 샘플은 이 인스턴스를 재사용하여 테스트를 실행합니다. 샘플당 서버 시작 비용을 피하기 위한 개발에 유용합니다.
이 프로필은 glassfishRemote_gfHome
시스템 속성을 통해 Payara가 설치된 위치를 설정하는 일부 테스트를 지원합니다. 예:
-DglassfishRemote_gfHome=/opt/payara171
이는 ID 저장소의 사용자와 같은 컨테이너 리소스를 만들기 위해 asadmin 명령을 보내는 데 사용됩니다.
glassfish-embedded
이 프로필은 GlassFish 내장 서버를 사용하며 TestClass와 동일한 JVM에서 실행됩니다. 개발에 유용하지만 샘플별로 서버를 시작해야 한다는 단점이 있습니다.
glassfish-remote
이 프로필을 사용하려면 빌드 외부에서 GlassFish 서버를 시작해야 합니다. 그런 다음 각 샘플은 이 인스턴스를 재사용하여 테스트를 실행합니다. 샘플당 서버 시작 비용을 피하기 위한 개발에 유용합니다.
이 프로필은 glassfishRemote_gfHome
시스템 속성을 통해 GlassFish가 설치된 위치를 설정하는 일부 테스트를 지원합니다. 예:
-DglassfishRemote_gfHome=/opt/glassfish41
이는 ID 저장소의 사용자와 같은 컨테이너 리소스를 만들기 위해 asadmin 명령을 보내는 데 사용됩니다.
와일드플라이
wildfly-ci-managed
이 프로필은 Wildfly 서버를 설치하고 샘플별로 서버를 시작합니다. CI 서버에 유용합니다. 사용되는 WildFly 버전은 wildfly.version
속성을 통해 설정할 수 있습니다.
wildfly-embedded
이 프로필은 wildfly-ci-managed와 거의 동일합니다. 동일한 Wildfly 서버를 설치하고 샘플별로 해당 서버를 다시 시작하지만 대신 Arquillian 내장 커넥터를 사용하여 동일한 JVM에서 실행합니다. CI 서버에 유용합니다. 사용되는 WildFly 버전은 wildfly.version
속성을 통해 설정할 수 있습니다.
wildfly-remote
이 프로필을 사용하려면 빌드 외부에서 Wildfly 서버를 시작해야 합니다. 그런 다음 각 샘플은 이 인스턴스를 재사용하여 테스트를 실행합니다. 샘플당 서버 시작 비용을 피하기 위한 개발에 유용합니다.
wildfly-swarm
이 프로필은 WildFly 애플리케이션 서버를 충분히 포함하는 uberjar를 구축할 수 있는 WildFly Swarm을 사용합니다. 여기에 포함된 WildFly 부분은 애플리케이션을 검사하고 실제로 사용되는 Java EE API를 검색하여 선택됩니다. 사용되는 WildFly Swarm 버전은 wildfly.swarm.version
속성을 통해 설정할 수 있습니다.
톰EE
tomee-ci-managed
이 프로필은 TomEE 서버를 설치하고 샘플별로 해당 서버를 시작합니다. CI 서버에 유용합니다. 이 프로필은 실행 중인 서버에 연결할 수 없습니다.
사용할 TomEE 버전은 사용 가능한 Maven 저장소에 있어야 합니다. 이 프로필의 기본값은 Arquillian 어댑터와 TomEE 서버의 버전이 동일하다고 가정합니다. 예를 들어 둘 다 7.0.0입니다.
Maven Central에서 사용할 수 없는 TomEE 서버를 사용하려면 샘플에 이를 사용하는 한 가지 방법은 다음과 같이 로컬 .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
설치된 버전(TomEE 프로젝트의 pom.xml 참조)이 샘플 프로젝트의 루트 pom.xml에 있는 속성 섹션에 있는 tomee.version
과 일치하는지 확인하세요.
tomee-embedded
이 프로필은 TomEE 임베디드 서버를 사용하고 TestClass와 동일한 JVM에서 실행됩니다.
자유
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
이 프로파일을 사용하려면 libertyManagedArquillian_wlpHome
시스템 특성을 통해 Liberty가 설치된 위치를 설정해야 합니다. 예:
-DlibertyManagedArquillian_wlpHome=/opt/wlp
또한 이 프로필을 사용하려면 server.xml에 localConnector 기능을 구성해야 하며, 모든 테스트를 실행하려면 javaee-7.0 기능을 사용해야 합니다.
< featureManager >
< feature >javaee-7.0</ feature >
< feature >localConnector-1.0</ feature >
</ featureManager >
JASPIC 테스트를 실행하려는 이전 버전의 Liberty(16.0.0.0 이전)의 경우 Liberty의 내부 사용자 레지스트리에 그룹을 생성하는 치트가 필요합니다.
< basicRegistry id = " basic " >
< group name = " architect " />
</ basicRegistry >
이 치트는 최신 버전의 Liberty(16.0.0.0/2016.7 이상)에는 필요하지 않습니다.
liberty-ci-managed
이 프로필은 Liberty 서버를 다운로드 및 설치하고 샘플별로 서버를 시작합니다. CI 서버에 유용합니다. 참고로 이는 실제 임베디드 서버가 아닌 일반 서버입니다. 자동으로 다운로드되므로 별도의 설치가 필요하지 않으므로 이제 "임베디드"라고 합니다.
웹로직
weblogic-remote
이 프로필을 사용하려면 빌드 외부에서 WebLogic 서버를 시작해야 합니다. 그런 다음 각 샘플은 이 인스턴스를 재사용하여 테스트를 실행합니다.
이 프로필을 사용하려면 weblogicRemoteArquillian_wlHome
시스템 속성을 통해 WebLogic이 설치된 위치를 설정해야 합니다. 예:
-DweblogicRemoteArquillian_wlHome=/opt/wls12210
기본 사용자 이름/비밀번호는 각각 "admin"과 "admin007"로 가정됩니다. 이는 weblogicRemoteArquillian_adminUserName
및 weblogicRemoteArquillian_adminPassword
시스템 속성을 사용하여 변경할 수 있습니다. 예:
-DweblogicRemoteArquillian_adminUserName=myuser
-DweblogicRemoteArquillian_adminPassword=mypassword
수코양이
tomcat-remote
이 프로필을 사용하려면 빌드 외부에서 일반 Tomcat(8.5 또는 9) 서버를 시작해야 합니다. 그런 다음 각 샘플은 이 인스턴스를 재사용하여 테스트를 실행합니다.
Tomcat은 Servlet, JSP, EL(Expression Language), WebSocket 및 JASPIC을 사용하는 샘플을 지원합니다.
이 프로필을 사용하려면 Tomcat에서 JMX를 활성화해야 합니다. [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-users.xml
에서 관리 애플리케이션에 대한 사용자 이름( tomcat
)과 비밀번호( manager
)를 설정해야 합니다. 전체 예제는 이 저장소의 test-utils/src/main/resources/tomcat-users.xml
파일을 참조하세요.
이 작업은 테스트용으로 만 사용되는 Tomcat 인스턴스에 대해서만 수행되어야 합니다. 위의 경우 Tomcat 설치가 완전히 안전하지 않게 되기 때문입니다!
tomcat-ci-managed
이 프로필은 Tomcat 서버를 설치하고 샘플별로 서버를 시작합니다. CI 서버에 유용합니다. 사용되는 Tomcat 버전은 tomcat.version
속성을 통해 설정할 수 있습니다.
서버를 다운로드하고 설치하는 컨테이너(*-ci-managed 프로필)를 사용하면 사용된 버전을 재정의할 수 있습니다. 예:
-Dpayara.version=4.1.1.163
이렇게 하면 Payara 테스트 목적으로 버전이 현재 버전(예: 4.1.1.171.1)에서 4.1.1.163으로 변경됩니다.
-Dglassfish.version=4.1
이렇게 하면 GlassFish 테스트 목적으로 버전이 현재 버전(예: 4.1.1)에서 4.1로 변경됩니다.
-Dwildfly.version=8.1.0.Final
그러면 WildFly의 버전이 현재 버전(예: 10.1.0.Final)에서 8.1.0.Final로 변경됩니다.
콘솔에서 실행하려면 다음을 수행하십시오 .
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
를 준수해야 합니다.
명확성과 일관성을 유지하고 초기 복잡성을 최소화하기 위해 우리는 추가 도우미인 HtmlUnit, Hamcrest 및 물론 Arquillian과 함께 Java를 사용하는 표준 jUnit 테스트를 선호합니다. 이러한 기술에 대한 대안을 사용하지 마십시오. 이 프로젝트에 새로운 종속성을 도입해야 하는 경우 기존 종속성에서 다루지 않는 것을 제공해야 합니다.
git pull upstream master
실행하면 해킹 준비가 완료됩니다.git checkout -b my_new_cool_feature
사용할 수 있습니다.그게 다야! 커뮤니티에 오신 것을 환영합니다!
CI 작업은 Travis에 의해 실행됩니다. 여기에 제공된 샘플의 특성상 모든 테스트를 통과하지 못하는 것이 정상입니다. 이는 일반적으로 샘플이 실행되는 서버의 버그를 나타냅니다. 실제로 테스트에 결함이 있다고 생각되면 문제를 제출하거나 수정 사항이 포함된 PR을 제공해 주세요.
http://boot2docker.io에서 Docker 클라이언트 설치
실행하려는 샘플 빌드
mvn clean package -DskipTests
예를 들어:
mvn -f jaxrs/jaxrs-client/pom.xml clean package -DskipTests
생성된 WAR 파일의 위치를 지정하려면 Dockerfile
의 두 번째 줄을 변경하세요.
boot2docker를 실행하고 명령을 내리십시오.
docker build -it -p 80:8080 javaee7-sample
다른 셸에서 다음과 같이 실행 중인 컨테이너의 IP 주소를 찾습니다.
boot2docker ip
http://IP_ADDRESS:80/jaxrs-client/webresources/persons로 샘플에 액세스하세요. 정확한 URL은 샘플에 따라 다릅니다.