Hiện tại, bạn có sử dụng JBoss hoặc Glassfish (hoặc người khác) làm máy chủ Java EE cho một dự án mới không? [đóng cửa]


136

Nếu bạn đã bắt đầu một dự án Java EE mới hôm nay sắp hoàn thành trong khoảng một năm, bạn sẽ chọn máy chủ ứng dụng nào và tại sao?

Một phần câu trả lời của bạn nên bao gồm các lập luận cho quyết định của bạn. Và cũng có bao nhiêu kinh nghiệm bạn có với máy chủ Java EE mà bạn chọn và với các máy chủ có sẵn khác trên thị trường. Đây là những điều thú vị khi tất cả chúng ta đều có cảm giác về cuộc điều tra và suy nghĩ đã được đưa vào câu trả lời của bạn.

Câu trả lời:


181

Tôi đã sử dụng WebLogic, WebSphere, JBoss, GlassFish, Resin, Jetty, Tomcat và một vài thứ khác trong hơn 10 năm qua. Vì vậy, nếu tôi đang xem xét một dự án mới, tôi sẽ tự hỏi mình một vài câu hỏi trước. Một điều mà tôi sẽ không thắc mắc nữa là tôi sẽ từ chối sử dụng các tệp JSP trừ khi tôi bị tra tấn cho đến khi tôi khóc cho mẹ tôi.

Tôi có phải tương thích / triển khai với một sản phẩm cụ thể vì sự ủy nhiệm của ai đó không? Có cách nào để bỏ qua chúng hoặc thuyết phục họ bằng cách khác? Nếu vậy, có câu trả lời của bạn.

Tôi có phải sử dụng EJB không? Có thật không? Tránh chúng nếu có thể - chúng thực sự chỉ cần thiết cho các hệ thống cấp doanh nghiệp rất lớn. Hãy nhớ rằng chúng chỉ là công cụ và là công cụ lớn (ai cũng có thể nói "Golden Sledgehammer"?). Chúng được sử dụng quá mức, vì vậy thực sự, thực sự đặt câu hỏi liệu bạn có cần chúng không. Nếu bạn cần chúng, thì điều đó sẽ loại bỏ một số tùy chọn của bạn, bao gồm cả Jetty yêu thích của tôi.

Bạn có phải sử dụng bất kỳ công nghệ J2EE lớn nào khác như JMS, ESB, v.v. không? Nếu vậy, và bạn thực sự không thể làm mà không có, thì bạn lại bị giới hạn trong một thùng chứa J2EE đầy đủ. Ví dụ, suy nghĩ và điều tra cẩn thận trước khi bạn cam kết với BPM, và tránh BPM của AquaLogic với (gần như) tất cả các chi phí - điều đó thật xấu xí.

Nếu bạn thực sự phải sử dụng bộ chứa J2EE toàn diện, trước tiên hãy xem xét nguồn mở vì nó mạnh hơn, được hỗ trợ tốt hơn và hiệu quả hơn về chi phí. Họ có cơ sở khách hàng lớn hơn và tương tác hỗ trợ cởi mở hơn, vì vậy họ có xu hướng nhận được các bản sửa lỗi tốt hơn nhanh hơn. Tuy nhiên, Nhựa chưa trưởng thành và tôi sẽ tránh nó liên quan đến GlassFish hoặc JBoss - Tôi thấy có vấn đề khi triển khai và hỗ trợ. Tôi thích JBoss hơn vì cơ sở khách hàng rộng hơn, sự trưởng thành, v.v. GlassFish khó kết hợp với quy trình xây dựng / triển khai tự động, nhưng nó có thể đẹp hơn đối với một số tính năng cụ thể của nó (nếu bạn cần chúng).

Tôi có lý do đặc biệt để cần Apache không? Sau đó nghiêng về Tomcat, có lẽ cộng với một cái gì đó.

Tôi có thể làm gì chỉ với servlets không? Sau đó, tôi sẽ sử dụng Jetty - đó là giải pháp nhẹ nhất, nhanh nhất, dễ nhất, linh hoạt nhất. Nếu tôi dựa vào việc có thể sử dụng Cầu tàu, tôi sẽ đặt câu hỏi cho tất cả các giả định của mình về lý do tại sao. YAGNI áp dụng.

Tốt nhất là sử dụng StringTemplate / WebStringTemplate trên Jetty: một giải pháp sạch, mạnh mẽ, nhanh chóng, có thể bảo trì mà không phải trả phí cấp phép, uy tín và hỗ trợ vững chắc, v.v ... Đó là nơi tôi bắt đầu ngày nay.

Hầu hết các ứng dụng / hệ thống chọn nhiều tính năng J2EE ưa thích khi tất cả những gì chúng thực sự cần là các máy chủ và JDBC với một số kiến ​​trúc / thiết kế hợp lý. Câu hỏi tại sao bạn nghĩ rằng bạn cần nhiều hơn.

Trong số các thùng chứa đầy đủ, tôi sẽ tránh WebLogic và WebSphere trừ khi bạn đang hỗ trợ trang web công cộng MAJOR (trang web của nhà tuyển dụng hiện tại của tôi được triển khai trên WebLogic và nó nhận được mười một triệu lượt truy cập mỗi tháng, những người khác có thể so sánh được). Yêu cầu bồi thường thực sự của WebLogic là phân cụm tương đối dễ dàng của họ, nhưng tránh các tính năng khóa nhà cung cấp độc quyền của họ với (gần như) tất cả chi phí. WebSphere đơn giản là một cơn ác mộng mà tôi sẽ tránh được bằng mọi giá - tôi từ chối thực hiện các dự án liên quan đến WebSphere sau khi đã thực hiện một vài điều trong quá khứ. Cả hai sản phẩm đều không có giá trị cấp phép lớn, trừ khi bạn thực sự có nhu cầu đặc biệt thúc đẩy việc sử dụng một tính năng độc quyền. Trong một thập kỷ với tư cách là một kiến ​​trúc sư / kỹ sư cao cấp cho rất nhiều công ty Fortune 500, tôi vẫn chưa thấy nhu cầu như vậy. Mặt khác,

Ngay cả đối với các trang web công cộng thực sự lớn, lưu lượng truy cập cao, các sản phẩm độc quyền vẫn còn nhiều nghi vấn. Tôi thà chi hàng triệu đô la mỗi năm cho phí cấp phép cho một số phần cứng tốt và một số thời gian chất lượng từ một số ít các chuyên gia tư vấn thực sự giỏi để giải quyết một giải pháp mở rộng đơn giản. Hàng triệu đô la mỗi năm sau đó có thể được sử dụng để sản xuất thứ gì đó xứng đáng để bán trên trang web tuyệt vời đó ...

EDIT: một phần khác để xem xét ...

Gần đây tôi đã gặp Terracotta . Tôi đang suy nghĩ lại mọi thứ, và mong muốn sớm triển khai nó trong một hệ thống quan trọng. Đặc biệt, Terracotta không phân cụm tốt hơn bất kỳ thứ gì khác, vì vậy tôi KHÔNG CẦN giới thiệu WebLogic cho phân cụm của nó.


7
Để tham khảo trong tương lai, bạn thường có thể tìm các định nghĩa cho các từ viết tắt thông qua tìm kiếm Google hoặc Wikipedia. YAGNI = Bạn sẽ không cần nó = đừng lạm dụng thiết kế của bạn JMS = Dịch vụ tin nhắn Java ESB = Bus dịch vụ doanh nghiệp BPM = Quản lý quy trình kinh doanh
Rob Williams

21
Nhận xét của bạn về Java EE và EJB hơi lỗi thời. J2EE?! Điều đó giống như 5 năm trước. Hãy xem Java EE 6 và hiện đại hóa quan điểm của bạn!
Brian Leathem

6
@Brian: Tôi đồng ý với Brian, đặc biệt là với EJBLite, nó đã trở nên nhẹ hơn nhiều.
Thắng Phạm

7
@Brian, nhìn vào bài viết - nó đã được viết ba năm trước khi bình luận của bạn. Và tôi vẫn nói rằng Spring nhẹ hơn cả Java EE.
duffymo

2
Bản án năm 2012 là gì? JBoss 7 AS có trở thành vua trên Glassfish trong vương quốc Java 6 EE không? Hoặc cách khác xung quanh?
Rolando

10

Thuật ngữ "máy chủ ứng dụng" không rõ ràng. Với GlassFish v3, bạn có thể bắt đầu với một bộ chứa web truyền thống và phát triển (sử dụng OSGi và chức năng "thêm bộ chứa" đơn giản) để thêm bất cứ thứ gì bạn muốn: JPA, JAX-RS, EJB, JTA, JMS, ESB , v.v ... Tuy nhiên, đó là cùng một sản phẩm, cùng giao diện quản trị viên, v.v ... Điều này có đủ điều kiện làm máy chủ ứng dụng cho bạn không? -Alexis (Mặt trời)


1
Thật không may Glassfish không phải là một sản phẩm chính thức nữa, nhưng "chỉ" việc thực hiện tham chiếu.
Thorbjørn Ravn Andersen

9

Câu hỏi đầu tiên tôi thường tự hỏi mình là "Tôi có thể làm điều này với Tomcat không?". Nếu câu trả lời là không vì tôi cần JMS hoặc JTA thì tôi dùng đến một máy chủ ứng dụng.

Tôi đã sử dụng WebLogic 8 khoảng 3 năm trước với tính dễ sử dụng của WebLogic và mô hình cấp phép / chi phí. Chúng tôi đã sử dụng nó cho hai dự án, một dự án là một dịch vụ web và dự án còn lại là một cổng thông tin. Chúng tôi không gặp phải bất kỳ vấn đề nào với WebLogic hoặc WebLogic Portal trong một trong những dự án đó.

Trong hai năm qua tôi đã làm việc với WebSphere. Bất cứ khi nào tôi đàm phán với IBM, nó luôn luôn có giá gấp đôi so với tương đương WebLogic nhưng chính sách của công ty đã ra lệnh WebSphere phải được sử dụng. Tôi thấy đường cong học tập trên WebSphere dốc hơn đáng kể so với WebLogic và vòng đời xây dựng / triển khai / thử nghiệm của chúng tôi rất tốn thời gian đến nỗi chúng tôi đã sử dụng Tomcat trong môi trường phát triển. Nhưng vấn đề lớn nhất mà tôi gặp phải với WebSphere là khi chúng tôi gặp phải một lỗi buộc chúng tôi phải nâng cấp lên bản phát hành bản vá tiếp theo chỉ để chạy vào vấn đề phân tích cú pháp webDB mới. Phải mất một ca 48 giờ để vượt qua tất cả.

Hiện tại tôi đang sử dụng JBoss. Khoảng 3 tháng trước, tôi chuẩn bị bắt tay vào dự án mới của mình với Tomcat và Jetspeed 2, nhưng tôi nhận thấy rằng Jetspeed 2 có vẻ hơi trì trệ ngay bây giờ và JBoss Portal 2.7.0 vừa được phát hành với sự hỗ trợ của JSR 286 / Portlet 2.0. Tôi đã cho JBoss một spin và thấy nó rất dễ cài đặt và quản trị. Chu trình xây dựng / triển khai / kiểm tra rất nhanh và tôi hiếm khi phải khởi động lại máy chủ trừ khi tôi đã thay đổi tệp Spring XML ở đâu đó.


Câu trả lời tốt đẹp! Bạn đã thử cầu cảng chưa? Và ý kiến ​​của bạn về nó trong trường hợp bạn có?

7

Tôi đã sử dụng jBoss được 3-4 năm.

Đối số cho jBoss:

  1. Mã nguồn mở.
  2. Hỗ trợ thương mại có sẵn.
  3. Cộng đồng người dùng lớn, tích cực.

Đối số chống lại jBoss:

  1. Không có truy cập chung, phát hành bộ chứa Java EE 5 được hỗ trợ.
  2. Rất nhiều tài liệu nhưng dài dòng; có thể khó tìm câu trả lời cho "Làm thế nào để tôi làm x?"
  3. Công cụ hành chính cho người nghèo 4.x so với các dịch vụ thương mại khác.

"Không truy cập chung, phát hành container JEE 5 được hỗ trợ." Tôi đoán đó không còn là trường hợp nữa, đúng không?
Raedwald

@Raedwald: vâng, bây giờ JEE 6 đã xuất hiện được một thời gian ;-)
ymajoros


3

Một điểm khác không được thảo luận ở đây là hiệu suất. Nếu đây là một mối quan tâm vì loại dịch vụ hoặc vì số lượng người dùng, thì những điều sau đây sẽ được áp dụng:

  • Tomcat dường như chậm hơn Glassfish
  • Cá thủy tinh dường như chậm hơn nhựa
  • Nhựa chậm hơn nhiều so với G-WAN + Java

Lưu ý rằng G-WAN chỉ dựa vào JVM: nó không sử dụng bất kỳ bộ chứa nào nữa (trừ khi được chỉ định rõ ràng) để bạn có thể bảo lưu nó cho các phần quan trọng về hiệu năng của các ứng dụng web của bạn.

Vì G-WAN hỗ trợ các ngôn ngữ khác (C, C ++, C #, D, Objective-C), bạn thậm chí có thể xử lý một số phần của ứng dụng trong C thô trong khi vẫn giữ Java cho các tác vụ khác.


2

Tôi có thể bao gồm hệ điều hành ưa thích của bạn làm tiêu chí quyết định. Nó sẽ giúp hỗ trợ dễ dàng hơn nếu bạn đang sử dụng cùng một nhà cung cấp cho hệ điều hành và máy chủ ứng dụng. Nếu bạn đã có một mối quan hệ với một hoặc cả hai nhà cung cấp xem xét nếu họ là tốt để giải quyết.

Từ góc độ kỹ thuật, tôi sẽ chọn GlassFish vì nó có hỗ trợ cho những đổi mới gần đây. Tôi không nghĩ JBoss là xấu trong dù sao nó chỉ đơn giản là không cập nhật.

Hầu hết kinh nghiệm của tôi là trên WebLogic nhưng tôi đã sử dụng JBoss và GlassFish. Tôi vừa phát hành một trang web mới trên một ngăn xếp mã nguồn mở hoàn chỉnh của Mặt trời (OpenSolaris, GlassFish, MySQL) và đó là một trải nghiệm tuyệt vời chỉ với những thất vọng nhỏ.


Hệ điều hành không thực sự là một vấn đề, trừ khi bạn có các phụ thuộc nhị phân rất cụ thể (điều này không nên xảy ra đối với hầu hết các dự án java). Chúng tôi phát triển trên windows, 32 và 64 bit và triển khai trên Glassfish trên Solaris. Hầu hết các nhà phát triển không thực sự biết và không phải quan tâm. Người dùng không nhìn thấy nó (hầu hết các phát triển của chúng tôi là các ứng dụng web).
ymajoros

2

Tôi vẫn nghĩ rằng WebLogic là máy chủ ứng dụng Java EE tốt nhất trên thị trường. Tôi nghĩ rằng nó đáng giá nếu bạn có thể đủ khả năng chi phí giấy phép.

Tôi đã rất ngạc nhiên khi thấy bạn có thể đi được bao xa bằng cách kết hợp Tomcat, OpenEJB và ActiveMQ. Đó dường như là một sự thay thế chi phí thấp.

Tôi cũng sẽ xem xét Spring dm Server. Nó dựa trên Tomcat, nhưng tôi nghĩ rằng mảnh OSGi mà họ đã thêm vào có thể ở khắp mọi nơi theo thứ tự ngắn. Nếu nó được thực hiện với chất lượng tương tự như khung công tác Spring, nó sẽ thực sự rất tốt.


2
Vấn đề tôi gặp phải với WebLogic là khóa nhà cung cấp, đó là một viên thuốc khó nuốt khi bạn thực sự không cần!
Manius

1
Điều đó đúng với tất cả các nhà cung cấp Java EE mà tôi biết, không chỉ WebLogic. Nếu bạn sử dụng bất kỳ tính năng cụ thể nào của nhà cung cấp mà bạn bị khóa. Thỉnh thoảng hãy viết mã.
duffymo

3
WebLogic chỉ dành cho mục đích thương mại - đó là những gì tôi đang tham gia - một khi bạn viết một tấm séc lớn, bạn sẽ "bị khóa" ở một mức độ lớn hơn so với bạn với một sự thay thế nguồn mở. Rõ ràng nếu bạn quan tâm đến tính độc lập của nền tảng, bạn sẽ không sử dụng các tính năng cụ thể của nhà cung cấp, vì vậy đó không phải là điều tôi đang đề cập. Trên thực tế, một cuộc khảo sát mà tôi đã đọc đã từng nói rằng các nhà phát triển tin rằng việc tránh nhà cung cấp là lợi thế số 1 của nguồn mở (không phải chi phí).
Manius

Hoàn toàn vô nghĩa? Bạn có tin rằng việc ký hợp đồng trị giá hàng triệu đô la với một nhà cung cấp không khóa bạn không? Có bằng chứng của bạn.
duffymo

@ymajoros Ý của bạn là "không nên" có nhà cung cấp khóa? Thành thật mà nói, tôi không thể hiểu ý kiến ​​của bạn.
Patrick M

1

Một cách khác: không sử dụng máy chủ ứng dụng nào cả.

Thủ tục thanh toán http://www.atomikos.com/Publications/J2eeWithoutApplicationServer .

Đối với các dự án web, hãy giữ một thùng chứa web nhẹ nếu bạn phải, kết hợp với một cái gì đó như Wicket để tránh sự phức tạp của JSP / JSF hoặc thanh chống.

Chàng trai HTH


Nếu bạn không muốn học sử dụng các công cụ, đừng sử dụng bất kỳ. Hoặc cố gắng trở thành một chuyên gia lành nghề và đầu tư vào môi trường của bạn, bạn sẽ được đền đáp. Phải thừa nhận tôi đã làm điều đó cho một số dự án. Các dự án tương tự đã phát triển không có máy chủ ứng dụng, đến máy chủ-máy khách tùy chỉnh trong Spring, thành Java EE và Glassfish thuần túy. Sẽ không bao giờ muốn quay lại, giải pháp đầu tiên thực sự quá phức tạp, đơn giản như ngày nay (và tiêu chuẩn, sẽ triển khai trên bất kỳ máy chủ ứng dụng Java EE nào mà không thay đổi nhiều).
ymajoros

câu trả lời tốt, cách xấu để có được tài liệu
mseach
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.