Sự khác biệt giữa Tomcat, JBoss và Glassfish là gì?


445

Tôi đang bắt đầu xem xét Java doanh nghiệp và cuốn sách tôi đang đề cập rằng nó sẽ sử dụng JBoss. Netbeans tàu với Glassfish. Tôi đã sử dụng Tomcat trong quá khứ.

Sự khác biệt giữa ba chương trình này là gì?



70
những câu hỏi này là "lời nguyền" của nguồn mở. Đôi khi có quá nhiều sự lựa chọn làm gần như cùng một điều. Đối với người mới, nó có thể dẫn đến tê liệt bằng cách phân tích. Eclipse là IDE thống trị nhưng hầu như tất cả các cuốn sách đáng mua đều sử dụng netbeans để phát triển và giảng dạy. Nó sử dụng Glassfish khi tôi thấy hầu hết các doanh nghiệp sử dụng Jboss ngoài đời thực. Có những đường cong học tập để sử dụng mỗi container, và nó có thể rất bực bội cho người mới.
dùng798719

Bây giờ JBoss được gọi là [WildFly] ( en.wikipedia.org/wiki/WildFly ) và JBoss là công ty phát triển WildFly.
Chaminda Bandara

Câu trả lời:


516

Tomcat chỉ là một thùng chứa servlet, tức là nó chỉ thực hiện các đặc tả của servlet và JSP. Glassfish và JBoss là các máy chủ Java EE đầy đủ (bao gồm các công cụ như EJB, JMS, ...), với Glassfish là triển khai tham chiếu của ngăn xếp Java EE 6 mới nhất, nhưng JBoss năm 2010 vẫn chưa hỗ trợ đầy đủ.


77
Lưu ý với độc giả, JBoss hiện là Java EE 6 Full Profile được chứng nhận như GlassFish. Tomcat hiện cũng là Hồ sơ web Java EE 6 được chứng nhận qua TomEE và hỗ trợ EJB, CDI, JSF, JPA, v.v.
David Blevins

10
@DavidBlevins vậy sự khác biệt bây giờ là gì?
aldo.roman.nurena

23
@ aldo.roman.nurena Rất ít sự khác biệt. Cả GlassFish và JBoss đều hỗ trợ Hồ sơ đầy đủ Java EE, vì vậy họ có hỗ trợ cho các công nghệ cũ như JAX-RPC và CORBA. Chúng tôi đã không đưa những thứ này vào phiên bản Tomcat của Java EE, nhưng tất cả các công nghệ hiện tại đều có như JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA, v.v.
David Blevins

@DavidBlevins Nếu chúng ta muốn chọn giữa JBoss và Glassfish, cái nào tốt hơn cho môi trường sản xuất? Có bất kỳ thông tin tham khảo có sẵn để hiểu điều này?
Sudhakar Chavali

1
Chỉnh sửa trên stackoverflow là cách phù hợp để sửa các câu trả lời trôi dạt từ thực tế quá xa.
Warren P

358

Tomcat chỉ đơn thuần là một máy chủ HTTP và bộ chứa Java servlet. JBoss và GlassFish là các máy chủ ứng dụng Java EE đầy đủ, bao gồm một bộ chứa EJB và tất cả các tính năng khác của ngăn xếp đó. Mặt khác, Tomcat có dung lượng bộ nhớ nhẹ hơn (~ 60-70 MB), trong khi các máy chủ Java EE có trọng lượng hàng trăm megs. Tomcat rất phổ biến cho các ứng dụng web đơn giản hoặc các ứng dụng sử dụng các khung như Spring không yêu cầu máy chủ Java EE đầy đủ. Quản trị một máy chủ Tomcat được cho là dễ dàng hơn, vì có ít bộ phận chuyển động hơn.

Tuy nhiên, đối với các ứng dụng yêu cầu ngăn xếp Java EE đầy đủ (hoặc ít nhất là nhiều phần có thể dễ dàng được gắn vào Tomcat) ... JBoss và GlassFish là hai trong số các dịch vụ nguồn mở phổ biến nhất (thứ ba là Apache Geronimo , trên đó phiên bản miễn phí của IBM WebSphere được xây dựng). JBoss có một cộng đồng người dùng lớn hơn và sâu hơn và một cơ sở mã hóa trưởng thành hơn. Tuy nhiên, JBoss tụt hậu đáng kể so với GlassFish trong việc triển khai các thông số kỹ thuật Java EE hiện tại. Ngoài ra, đối với những người thích hệ thống quản trị dựa trên GUI ... Bảng điều khiển quản trị của GlassFish cực kỳ trơn tru, trong khi hầu hết việc quản trị trong JBoss được thực hiện với trình soạn thảo dòng lệnh và văn bản. GlassFish đến trực tiếp từ Sun / Oracle, với tất cả những lợi thế có thể mang lại. JBoss KHÔNG chịu sự kiểm soát của Sun / Oracle, với tất cả những lợi thế mà THAT có thể mang lại.


3
Tôi chưa xác thực, nhưng một số người cho rằng đối với một dự án thông thường, container EE 6 có thể sử dụng bộ nhớ ít hơn 25% so với Spring + phụ thuộc của nó.
Arjan

2
+1, câu trả lời tuyệt vời, mặc dù tôi đăng ký nhận xét của @ Arjan: thực sự bộ nhớ được sử dụng bởi chính các máy chủ này không quan trọng bằng so với lượng ứng dụng được triển khai sẽ cần bao nhiêu (và THAT phụ thuộc mạnh mẽ vào các công nghệ được sử dụng. của một con heo nhớ)
Shivan Dragon

10
Heh ... cuộc thảo luận về "các thùng chứa servlet" so với "máy chủ JEE" dường như luôn biến thành các cuộc thảo luận về "Mùa xuân" so với "EJB / JSF". Tôi đã sử dụng JEE trong nhiều năm và luôn vui vẻ làm điều đó khi một khách hàng trả tiền cho tôi. Tuy nhiên, suy nghĩ của tôi là: [1] hầu hết các điểm chuẩn ở cả hai phía đều đến từ các nguồn thiên vị, tôi chưa bao giờ nhận thấy sự khác biệt lớn về tài nguyên giữa hai ngăn xếp, [2] Spring có khả năng di động cao hơn "tiêu chuẩn" của JEE, trong đó Việc chuyển đổi máy chủ luôn luôn có vẻ đau đớn và cuối cùng nhưng không kém phần quan trọng ...
Steve Perkins

7
... [3] cộng đồng người dùng cho Spring và Hibernate hoàn toàn lùn hơn những thông số kỹ thuật JEE thuần túy. Nếu bạn gặp rắc rối với Spring và đăng câu hỏi lên StackOverflow, nó sẽ được hàng trăm người đọc và bạn sẽ có câu trả lời chắc chắn trong vài phút. Đặt câu hỏi về công cụ JEE và nó sẽ được đọc bởi hàng tá người ... và một nửa thời gian, câu trả lời duy nhất bạn nhận được là, "Nó hiệu quả với tôi!". Các tiêu chuẩn của JEE dường như luôn trễ một ngày và thiếu một đô la, và tôi cảm thấy rất cô đơn khi gặp rắc rối với chúng trong một ứng dụng thực sự.
Steve Perkins

1
Ummmm ... Tính đến năm ngoái, Tomcat chỉ có 13 MB, GlassFish 53 MB và JBoss 127 MB. Tôi sẽ không xem xét các máy chủ JavaEE (GlassFish và JBoss) hàng trăm megs. Nếu bạn đang nói về WebLogic hoặc WebSphere thì chúng ta đang nói về GB. Thông tin được tìm thấy tại zeroturnaround.com/rebellabs/ khăn
j sẽ

81

Bạn nên sử dụng GlassFish cho các ứng dụng doanh nghiệp Java EE . Một số điều cần xem xét:

Một web server có nghĩa là: yêu cầu Xử lý HTTP (thường là từ các trình duyệt).

Một Servlet Container (ví dụ Tomcat ) có nghĩa là: Nó có thể xử lý các servlet & JSP.

Một máy chủ ứng dụng (ví dụ GlassFish ) phương tiện: * Nó có thể quản lý các ứng dụng Java EE (thường là cả servlet / JSP và EJB).


Tomcat - được điều hành bởi cộng đồng Apache - Nguồn mở và có hai hương vị:

  1. Tomcat - Cấu hình web - trọng lượng nhẹ chỉ là thùng chứa servlet và không hỗ trợ các tính năng Java EE như EJB, JMS, v.v.
  2. Tomcat EE - Đây là một thùng chứa Java EE được chứng nhận, nó hỗ trợ tất cả các công nghệ Java EE.

Không có hỗ trợ thương mại có sẵn (chỉ hỗ trợ cộng đồng)

JBoss - Được điều hành bởi RedHat Đây là một hỗ trợ toàn bộ cho JavaEE và nó là một bộ chứa Java EE được chứng nhận. Điều này bao gồm Tomcat như web container bên trong. Điều này cũng có hai hương vị:

  1. Phiên bản cộng đồng được gọi là Máy chủ ứng dụng (AS) - phiên bản này sẽ chỉ có hỗ trợ cộng đồng.
  2. Máy chủ ứng dụng doanh nghiệp (EAP) - Đối với điều này, bạn có thể có giấy phép dựa trên đăng ký (Nó dựa trên số lượng lõi bạn có trên máy chủ của mình.)

Glassfish - Được điều hành bởi Oracle Đây cũng là một Java EE Container được chứng nhận đầy đủ. Điều này có bộ chứa web riêng của nó (không phải Tomcat). Điều này xuất phát từ chính Oracle, vì vậy tất cả các thông số kỹ thuật mới sẽ được thử nghiệm và triển khai với Glassfish trước tiên. Vì vậy, luôn luôn nó sẽ hỗ trợ các thông số kỹ thuật mới nhất. Tôi không biết các mô hình hỗ trợ của nó.


2
Tôi có đúng không khi nói rằng, ngày nay (quý 1 năm 2018) Glassfish không thực sự đóng một vai trò lớn trong thực tế? Không phải là tiêu chuẩn thực tế JBoss?
Socrates

14

jboss và cá thủy tinh bao gồm một thùng chứa servlet (như tomcat), tuy nhiên hai máy chủ ứng dụng (jboss và thủy tinh) cũng cung cấp một thùng chứa đậu (và một vài thứ khác mà tôi tưởng tượng)


2
Cá thủy tinh có thể làm bất cứ điều gì Tomcat có thể nhưng điều đó không có nghĩa là nó "bao gồm" Tomcat. Glassfish có web container riêng của nó.
Martin

5
Nói rõ hơn, "giống như tomcat" là đúng, nhưng JBoss thực sự nhúng Tomcat để thực hiện thùng chứa servlet của nó.
Chucky

@Chucky không còn nữa
NimChimpsky 31/05/2016

8

JBoss và Glassfish về cơ bản là Máy chủ ứng dụng Java EE đầy đủ trong khi Tomcat chỉ là một thùng chứa Servlet. Sự khác biệt chính giữa JBoss, Glassfish mà còn cả WebSphere, WebLogic và đối với Tomcat mà cả Jetty, là ở chức năng mà một máy chủ ứng dụng đầy đủ cung cấp. Khi bạn có một máy chủ ứng dụng Java EE ngăn xếp đầy đủ, bạn có thể hưởng lợi từ tất cả việc triển khai nhà cung cấp mà bạn chọn và tất nhiên bạn có thể hưởng lợi từ EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet và như thế. Mặt khác, với Tomcat, bạn chỉ có thể hưởng lợi từ JSP / Servlet. Tuy nhiên, cho đến nay với Khung nâng cao như Spring và Guice, nhiều lợi thế chính của việc sử dụng máy chủ ứng dụng ngăn xếp đầy đủ có thể được giảm thiểu và với giả định về một trong khung này một cách nam tính với Hệ sinh thái mùa xuân,


8

Có vẻ hơi nản khi sử dụng Tomcat khi bạn đọc những câu trả lời này. Tuy nhiên, điều mà hầu hết không đề cập đến là bạn có thể sử dụng các trường hợp sử dụng giống hệt hoặc gần như giống hệt với tomcat nhưng điều đó đòi hỏi bạn phải thêm các thư viện cần thiết (thông qua Maven hoặc bất kỳ hệ thống nào bạn sử dụng).

Tôi đã chạy tomcat với JPA, EJB với những nỗ lực cấu hình rất nhỏ.


1
@MarcoOttina Theo kinh nghiệm của tôi, vâng. Đây là một máy chủ web có cấu hình cao. Tôi đoán rằng rất nhiều người xây dựng các ứng dụng web hiện đại đang sử dụng nó cùng với Spring / Spring Boot. Trong tất cả các năm của tôi với Java, tôi vẫn bị nhầm lẫn bởi hệ sinh thái (đặc biệt là tất cả các công cụ JEE) vì tôi chưa bao giờ có bất kỳ yêu cầu nào đối với nó. Do đó kết thúc ở đây ngày hôm nay :)
vui đùa

4

Cả JBoss và Tomcat đều là các máy chủ ứng dụng Java, nhưng JBoss còn nhiều hơn thế. Sự khác biệt đáng kể giữa hai loại này là JBoss cung cấp một ngăn xếp Java Enterprise Edition (Java EE) đầy đủ, bao gồm Enterprise JavaBeans và nhiều công nghệ khác hữu ích cho các nhà phát triển làm việc trên các ứng dụng Java doanh nghiệp.

Tomcat hạn chế hơn nhiều. Một cách để nghĩ về điều đó là JBoss là một ngăn xếp Java EE bao gồm một thùng chứa servlet và máy chủ web, trong khi phần lớn Tomcat là một thùng chứa servlet và máy chủ web.


3

Apache tomcat chỉ là một thùng chứa serverlet duy nhất mà nó không hỗ trợ cho ứng dụng Java doanh nghiệp (JEE). JBoss và Glassfish đang hỗ trợ cho ứng dụng JEE nhưng Glassfish nặng hơn nhiều so với máy chủ JBOSS: Slide Slide

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.