Tomcat, JBoss และ Glassfish ต่างกันอย่างไร


445

ฉันเริ่มมองหา Enterprise Java และหนังสือที่ฉันกำลังกล่าวถึงว่าจะใช้ JBoss Netbeans มาพร้อมกับ Glassfish ฉันเคยใช้ Tomcat มาแล้ว

โปรแกรมทั้งสามนี้มีความแตกต่างกันอย่างไร?



70
คำถามเหล่านี้คือ 'คำสาป' ของ opensource บางครั้งมีตัวเลือกมากเกินไปที่ทำในสิ่งเดียวกัน สำหรับมือใหม่ก็สามารถนำไปสู่การเป็นอัมพาตโดยการวิเคราะห์ Eclipse เป็น IDE ที่โดดเด่น แต่หนังสือเกือบทั้งหมดที่มีมูลค่าการซื้อใช้ netbeans ในการพัฒนาและสอน มันใช้ Glassfish เมื่อฉันเห็นธุรกิจส่วนใหญ่ใช้ Jboss ในชีวิตจริง มีเส้นโค้งการเรียนรู้ที่จะใช้ภาชนะแต่ละอันและมันอาจทำให้มือใหม่หงุดหงิดมาก
user798719

ตอนนี้ JBoss รู้จักกันในนาม [WildFly] ( en.wikipedia.org/wiki/WildFly ) และ JBoss เป็น บริษัท ที่พัฒนา WildFly
Chaminda Bandara

คำตอบ:


516

Tomcat เป็นเพียงภาชนะบรรจุ servlet กล่าวคือจะใช้เฉพาะข้อมูลจำเพาะ servlet และ JSP Glassfish และ JBoss เป็นเซิร์ฟเวอร์ Java EE เต็มรูปแบบ (รวมถึงสิ่งต่างๆเช่น EJB, JMS, ... ) โดย Glassfish เป็นการนำการอ้างอิงของ Java EE 6 สแต็คล่าสุดมาใช้ แต่ JBoss ในปี 2010 ยังไม่สนับสนุนอย่างเต็มที่


77
หมายเหตุถึงผู้อ่านJBoss ได้รับการรับรองเต็มรูปแบบ Java EE 6เช่น GlassFish Tomcat ได้รับการรับรอง Java EE 6 Web Profile ผ่าน TomEEและรองรับ EJB, CDI, JSF, JPA และอื่น ๆ อีกมากมาย
David Blevins

10
@DavidBlevins ตอนนี้อะไรคือความแตกต่าง?
aldo.roman.nurena

23
@ aldo.roman.nurena ความแตกต่างน้อยมาก GlassFish และ JBoss รองรับทั้ง Java EE Full Profile ดังนั้นพวกเขาจึงได้รับการสนับสนุนเทคโนโลยีดั้งเดิมเช่น JAX-RPC และ CORBA เราไม่ได้รวมสิ่งเหล่านี้ใน Tomcat รุ่น Java EE แต่เทคโนโลยีในปัจจุบันทั้งหมดมีเช่น JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA และอื่น ๆ
David Blevins

@DavidBlevins หากเราต้องการเลือกระหว่าง JBoss และ Glassfish ที่ดีกว่าสำหรับสภาพแวดล้อมการผลิต มีข้อมูลอ้างอิงใดบ้างที่จะเข้าใจสิ่งนี้?
Sudhakar Chavali

1
การแก้ไข stackoverflow เป็นวิธีที่เหมาะสมในการแก้ไขคำตอบที่ล่องลอยจากความเป็นจริงที่ไกลเกินไป
Warren P

358

Tomcat เป็นเพียงเซิร์ฟเวอร์ HTTP และคอนเทนเนอร์ servlet Java JBoss และ GlassFish เป็นแอปพลิเคชั่นเซิร์ฟเวอร์ Java EE ที่มีคุณสมบัติครบถ้วนรวมถึงคอนเทนเนอร์ EJB และคุณสมบัติอื่น ๆ ทั้งหมดของสแต็กนั้น ในทางกลับกัน Tomcat มีหน่วยความจำที่เบากว่า (~ 60-70 MB) ในขณะที่เซิร์ฟเวอร์ Java EE นั้นมีน้ำหนักหลายร้อยเมกะไบต์ Tomcat เป็นที่นิยมอย่างมากสำหรับเว็บแอพพลิเคชั่นหรือแอพพลิเคชั่นที่ใช้เฟรมเวิร์กเช่น Spring ที่ไม่ต้องการเซิร์ฟเวอร์ Java EE เต็มรูปแบบ การจัดการเซิร์ฟเวอร์ Tomcat นั้นง่ายขึ้นเนื่องจากมีชิ้นส่วนเคลื่อนไหวน้อยลง

อย่างไรก็ตามสำหรับแอปพลิเคชั่นที่ต้องการจาวาสแต็คแบบเต็ม EE (หรืออย่างน้อยชิ้นที่สามารถติดตั้งกับ Tomcat ได้อย่างง่ายดาย) ... JBoss และ GlassFish เป็นโอเพ่นซอร์สที่ได้รับความนิยมสูงสุดสองตัว (อย่างที่สามคือ Apache Geronimo ซึ่งเวอร์ชันฟรีของ IBM WebSphere ถูกสร้างขึ้น) JBoss มีชุมชนผู้ใช้ที่ใหญ่และลึกกว่าและมี codebase ที่เป็นผู้ใหญ่มากกว่า อย่างไรก็ตาม JBoss ล่าช้าหลัง GlassFish อย่างมากในการนำ Java EE specs ไปใช้ นอกจากนี้สำหรับผู้ที่ชื่นชอบระบบการดูแลระบบด้วย GUI ... คอนโซลผู้ดูแลระบบของ GlassFish นั้นลื่นไหลสุดขีดในขณะที่การดูแลระบบส่วนใหญ่ใน JBoss นั้นทำด้วยบรรทัดคำสั่งและโปรแกรมแก้ไขข้อความ GlassFish มาโดยตรงจาก Sun / Oracle พร้อมข้อดีทั้งหมดที่สามารถเสนอได้ JBoss ไม่ได้อยู่ภายใต้การควบคุมของ Sun / Oracle ด้วยข้อดีทั้งหมดที่สามารถเสนอได้


3
ฉันยังไม่ได้ตรวจสอบ แต่มีบางคนอ้างว่าสำหรับโครงการปกติคอนเทนเนอร์ EE 6 อาจใช้หน่วยความจำน้อยกว่า25% เมื่อเทียบกับสปริง + การพึ่งพา
Arjan

2
+1, คำตอบที่ยอดเยี่ยม, แม้ว่าฉันสมัครเป็นสมาชิกกับความคิดเห็นของ @ Arjan: จริงๆแล้วหน่วยความจำที่เซิร์ฟเวอร์เหล่านี้ใช้เองนั้นไม่สำคัญเท่าไรเมื่อเทียบกับจำนวนแอปพลิเคชันที่ปรับใช้จะต้องใช้หน่วยความจำเท่าใด ของหมูหน่วยความจำ)
Shivan Dragon

10
เฮ้ ... การสนทนาของ "servlet container" กับ "JEE servers" ดูเหมือนจะกลายเป็นการสนทนาของ "Spring" กับ "EJB / JSF" เสมอ ฉันใช้ JEE มาหลายปีและยินดีที่จะทำเช่นนั้นเสมอเมื่อลูกค้าจ่ายเงินให้ฉัน อย่างไรก็ตามความคิดของฉันคือ: [1] มาตรฐานส่วนใหญ่ของทั้งสองฝ่ายมาจากแหล่งที่มีอคติฉันไม่เคยสังเกตเห็นความแตกต่างของทรัพยากรขนาดใหญ่ระหว่างทั้งสองกองตัวเอง [2] ฤดูใบไม้ผลิเป็นแบบพกพามากกว่า JEE "มาตรฐาน" ดูเหมือนจะเจ็บปวดเสมอที่จะเปลี่ยนเซิร์ฟเวอร์และสุดท้าย แต่ไม่ท้ายสุด ...
Steve Perkins

7
... [3] ชุมชนผู้ใช้สำหรับ Spring และ Hibernate ทำให้แคระของ JEE ล้วนๆ หากคุณพบปัญหากับ Spring และโพสต์คำถามใน StackOverflow มันจะถูกอ่านโดยคนหลายร้อยคนและคุณจะได้คำตอบที่ชัดเจนในไม่กี่นาที ถามคำถามเกี่ยวกับสิ่งที่ JEE และมันจะถูกอ่านโดยคนโหล ... และครึ่งเวลาคำตอบเดียวที่คุณได้รับคือ "มันใช้งานได้สำหรับฉัน!" มาตรฐาน JEE ดูเหมือนว่าพวกเขาจะดึกและดอลล่าร์สั้นและฉันรู้สึกเหงามากเมื่อฉันพบปัญหาในแอปจริง
Steve Perkins

1
อืมมม ... เมื่อปีที่แล้ว Tomcat มีเพียง 13 MB, GlassFish 53MB และ JBoss 127 MB ฉันจะไม่พิจารณาเซิร์ฟเวอร์ JavaEE เหล่านั้น (GlassFish และ JBoss) หลายร้อย megs หากคุณกำลังพูดถึง WebLogic หรือ WebSphere เรากำลังพูดถึง GB ข้อมูลพบได้ที่zeroturnaround.com/rebellabs/…
j จะ

81

คุณควรใช้GlassFish สำหรับการใช้งานขององค์กร บางสิ่งที่ควรพิจารณา:

Web Serverหมายถึง: การร้องขอจัดการ HTTP (มักจะมาจากเบราว์เซอร์)

Servlet คอนเทนเนอร์ (เช่นTomcat ) หมายถึง: มันสามารถจัดการ Servlets และ JSP

Application Server (เช่นGlassFish ) หมายถึง: * มันสามารถจัดการการใช้งาน Java EE (ปกติทั้ง servlet / JSP และ EJBs)


Tomcat - ดำเนินการโดยชุมชน Apache - โอเพ่นซอร์สและมีสองรสชาติ:

  1. Tomcat - โปรไฟล์เว็บ - เบาบางซึ่งเป็นคอนเทนเนอร์ servlet เท่านั้นและไม่รองรับคุณสมบัติ Java EE เช่น EJB, JMS เป็นต้น
  2. Tomcat EE - นี่คือคอนเทนเนอร์ Java EE ที่ได้รับการรับรองซึ่งรองรับเทคโนโลยี Java EE ทั้งหมด

ไม่มีการสนับสนุนเชิงพาณิชย์ (เฉพาะการสนับสนุนชุมชน)

JBoss - เรียกใช้โดย RedHat นี่เป็นการรองรับแบบเต็มสแต็กสำหรับ JavaEE และเป็นคอนเทนเนอร์ Java EE ที่ได้รับการรับรอง ซึ่งรวมถึง Tomcat เป็นเว็บคอนเทนเนอร์ภายใน นี่ก็มีสองรสชาติ:

  1. เวอร์ชันชุมชนที่ชื่อว่า Application Server (AS) - นี่จะมีการสนับสนุนชุมชนเท่านั้น
  2. Enterprise Application Server (EAP) - สำหรับสิ่งนี้คุณสามารถมีสิทธิ์ใช้งานแบบสมัครสมาชิก (ขึ้นอยู่กับจำนวน Cores ที่คุณมีบนเซิร์ฟเวอร์ของคุณ)

Glassfish - ดำเนินการโดย Oracle นี่เป็นคอนเทนเนอร์ Java EE ที่ผ่านการรับรองเต็มรูปแบบ นี่คือเว็บคอนเทนเนอร์ของตัวเอง (ไม่ใช่ Tomcat) สิ่งนี้มาจาก Oracle เองดังนั้นข้อมูลจำเพาะใหม่ทั้งหมดจะถูกทดสอบและนำไปใช้กับ Glassfish ก่อน ดังนั้นจะสนับสนุนข้อมูลจำเพาะล่าสุดเสมอ ฉันไม่ทราบรุ่นการสนับสนุน


2
ฉันถูกต้องหรือไม่ที่ทุกวันนี้ (ไตรมาสที่ 1 ปี 2018) Glassfish ไม่ได้มีบทบาทที่สำคัญในความเป็นจริง? ไม่ใช่มาตรฐาน JBoss จริงหรือ
โสกราตีส

14

jboss และ glassfish รวมถึง servlet container (เช่น tomcat) แต่ทั้งสองแอ็พพลิเคชันเซิร์ฟเวอร์ (jboss และ glassfish) ยังมีที่เก็บถั่ว (และสิ่งอื่น ๆ ที่ฉันจินตนาการ)


2
Glassfish สามารถทำอะไรก็ได้ที่ Tomcat ทำได้ แต่นั่นไม่ได้หมายความว่า "รวมถึง" Tomcat Glassfish มีเว็บคอนเทนเนอร์เป็นของตัวเอง
Martin

5
เพื่อให้ชัดเจนยิ่งขึ้น "like tomcat" นั้นถูกต้อง แต่จริงๆแล้ว JBoss ฝัง Tomcat ไว้สำหรับการใช้งาน servlet container
Chucky

@ Chucky ไม่อีกต่อไป
NimChimpsky

8

JBoss และ Glassfish นั้นเต็มไปด้วย Java EE Application Server ในขณะที่ Tomcat เป็นเพียง Servlet container ความแตกต่างที่สำคัญระหว่าง JBoss, Glassfish แต่ยังเป็น WebSphere, WebLogic และอื่น ๆ ที่เกี่ยวกับ Tomcat แต่ยังเป็น Jetty ก็คือการทำงานที่เซิร์ฟเวอร์แอปเต็มรูปแบบเสนอให้ เมื่อคุณมีเซิร์ฟเวอร์แอปพลิเคชัน Java EE แบบเต็มคุณจะได้รับประโยชน์จากการดำเนินการทั้งหมดของผู้ขายที่คุณเลือกและคุณสามารถได้รับประโยชน์จาก EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet แน่นอน และอื่น ๆ ด้วย Tomcat ในทางกลับกันคุณจะได้รับประโยชน์จาก JSP / Servlet เท่านั้น อย่างไรก็ตามทุกวันนี้ด้วย Framework ขั้นสูงเช่น Spring และ Guice ข้อดีหลัก ๆ หลายประการของการใช้เซิร์ฟเวอร์แอปพลิเคชันแบบเต็มสามารถลดลงได้


8

ดูเหมือนว่าคุณไม่ควรใช้ Tomcat เมื่อคุณอ่านคำตอบเหล่านี้ อย่างไรก็ตามสิ่งที่ไม่สามารถพูดถึงได้มากที่สุดคือคุณสามารถใช้กรณีการใช้ Tomcat ที่เหมือนกันหรือเกือบจะเหมือนกัน แต่สิ่งนั้นต้องการให้คุณเพิ่มไลบรารี่ที่ต้องการ (ผ่าน Maven หรือระบบอื่น ๆ ที่คุณใช้)

ฉันใช้ Tomcat กับ JPA, EJBs ด้วยความพยายามกำหนดค่าที่น้อยมาก


1
@MarcoOttina จากประสบการณ์ของฉันใช่ มันเป็นเว็บเซิร์ฟเวอร์ที่สามารถกำหนดค่าได้สูง ฉันเดาว่ามีผู้คนจำนวนมากที่สร้างแอปพลิเคชันเว็บที่ทันสมัยใช้งานร่วมกับ Spring / Spring Boot ในทุก ๆ ปีของฉันกับ Java ฉันยังคงสับสนกับระบบนิเวศ (โดยเฉพาะสิ่ง JEE ทั้งหมด) เนื่องจากฉันไม่เคยมีความต้องการใด ๆ ดังนั้นสิ้นสุดขึ้นที่นี่ในวันนี้ :)
jocull

4

ทั้ง JBoss และ Tomcat เป็นเซิร์ฟเวอร์แอพพลิเคชัน Java servlet แต่ JBoss นั้นมีมากมายมากกว่า ความแตกต่างที่สำคัญระหว่างสองคือ JBoss มีสแต็ก Java Enterprise Edition (Java EE) เต็มรูปแบบรวมถึง Enterprise JavaBeans และเทคโนโลยีอื่น ๆ อีกมากมายที่เป็นประโยชน์สำหรับนักพัฒนาที่ทำงานกับแอปพลิเคชัน Java ขององค์กร

Tomcat มีจำนวน จำกัด มากขึ้น วิธีคิดอย่างหนึ่งก็คือ JBoss คือ Java EE stack ที่มี servlet container และเว็บเซิร์ฟเวอร์ส่วน Tomcat ส่วนใหญ่เป็น servlet container และเว็บเซิร์ฟเวอร์


3

Apache tomcat เป็นเพียง serverlet container เท่านั้นที่ไม่รองรับ Enterprise Java application (JEE) JBoss และ Glassfish สนับสนุนแอปพลิเคชัน JEE แต่ Glassfish หนักกว่าเซิร์ฟเวอร์ JBOSS มาก: Slide อ้างอิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.