เวิร์กสเปซนี้ประกอบด้วยตัวอย่าง 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-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 Swarm ซึ่งอนุญาตให้สร้าง uberjars ที่มีแอปพลิเคชันเซิร์ฟเวอร์ WildFly เพียงพอ ในที่นี้ ส่วนของ WildFly ที่รวมไว้จะถูกเลือกตามการตรวจสอบแอปพลิเคชันและการค้นหา Java EE API ที่ใช้งานจริง เวอร์ชัน WildFly Swarm ที่ใช้สามารถตั้งค่าผ่านคุณสมบัติ wildfly.swarm.version
ทอมอี
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
ในส่วนคุณสมบัติใน root pom.xml ของโปรเจ็กต์ตัวอย่าง
tomee-embedded
โปรไฟล์นี้ใช้เซิร์ฟเวอร์แบบฝัง TomEE และรันใน JVM เดียวกันกับ TestClass
เสรีภาพ
liberty-managed
โปรไฟล์นี้จะเริ่มต้นเซิร์ฟเวอร์ Liberty ต่อตัวอย่าง และเลือกเชื่อมต่อกับเซิร์ฟเวอร์ที่ทำงานอยู่ซึ่งคุณสามารถเริ่มต้นระบบนอกบิลด์ได้ (โดยมีข้อจำกัดว่าเซิร์ฟเวอร์นี้ต้องทำงานบนโฮสต์ซึ่งเป็นที่ที่การทดสอบดำเนินการโดยใช้ผู้ใช้คนเดียวกัน ).
หากต้องการเชื่อมต่อกับเซิร์ฟเวอร์ที่รันอยู่ คุณสมบัติระบบ org.jboss.arquillian.container.was.wlp_managed_8_5.allowConnectingToRunningServer
จะต้องตั้งค่าเป็นจริง เช่น
-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 รองรับตัวอย่างที่ใช้ Servlet, JSP, Expression Language (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-managed) ช่วยให้คุณสามารถแทนที่เวอร์ชันที่ใช้ได้ เช่น:
-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 Guides
หากต้องการรันการทดสอบเพียงบางส่วน ให้ทำที่ไดเร็กทอรีระดับบนสุด :
mvn clean install -pl "test-utils,util" -am
cd jaspic
mvn clean test -P liberty-ci-managed
ด้วยความช่วยเหลือของคุณ เราจะสามารถปรับปรุงชุดตัวอย่างนี้ เรียนรู้จากกันและกัน และขยายชุมชนที่เต็มไปด้วยผู้คนที่หลงใหลในเทคโนโลยี นวัตกรรม และคุณภาพของโค้ด ทุกการมีส่วนร่วมมีความสำคัญ!
มีเพียงบางสิ่งที่คุณควรจำไว้ก่อนที่จะส่งคำขอดึง ดังนั้นเราจึงสามารถนำสิ่งใหม่ๆ ทั้งหมดที่รวมอยู่ในสาขาหลักได้อย่างง่ายดาย
การทดสอบมาตรฐานนั้นใช้ jUnit - ตัวอย่างเช่นการคอมมิตนี้ การตั้งชื่อคลาสการทดสอบต้องเป็นไปตามมาตรฐานการตั้งชื่อ Surefire **/*Test.java
, **/*Test*.java
หรือ **/*TestCase.java
เพื่อความชัดเจนและความสม่ำเสมอ และเพื่อลดความซับซ้อนล่วงหน้า เราชอบการทดสอบ jUnit มาตรฐานที่ใช้ Java โดยมีตัวช่วยเพิ่มเติม HtmlUnit, Hamcrest และ Arquillian โปรดอย่าใช้ทางเลือกอื่นสำหรับเทคโนโลยีเหล่านี้ หากจำเป็นต้องนำการขึ้นต่อกันใหม่เข้ามาในโปรเจ็กต์นี้ ก็ควรจัดเตรียมสิ่งที่ไม่ครอบคลุมอยู่ในการขึ้นต่อกันที่มีอยู่เหล่านี้
git pull upstream master
และคุณก็พร้อมที่จะแฮ็กแล้วgit checkout -b my_new_cool_feature
แค่นั้นแหละ! ยินดีต้อนรับเข้าสู่ชุมชน!
งาน CI ดำเนินการโดย Travis โปรดทราบว่าโดยธรรมชาติแล้วตัวอย่างที่ให้ไว้ที่นี่ เป็นเรื่องปกติอย่างยิ่งที่การทดสอบบางรายการไม่ผ่าน โดยปกติแล้วจะบ่งบอกถึงจุดบกพร่องในเซิร์ฟเวอร์ซึ่งมีการดำเนินการตัวอย่าง หากคุณคิดว่าเป็นการทดสอบที่มีข้อผิดพลาดจริงๆ โปรดส่งปัญหาหรือแจ้งการแก้ไขแก่ 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 ที่แน่นอนจะแตกต่างกันไปตามตัวอย่าง