Java EE 6 so với ngăn xếp Spring 3 [đã đóng]


90

Tôi đang bắt đầu một dự án mới bây giờ. Tôi phải chọn công nghệ. Tôi cần một cái gì đó nhẹ, vì vậy không có EJB hoặc Seam. Mặt khác, tôi cần JPA (Hibernate hoặc thay thế) và JSF với IceFaces.

Bạn có nghĩ rằng một ngăn xếp như vậy trên Spring 3 được triển khai trên Tomcat là một lựa chọn tốt? Hay một ứng dụng web Java EE 6 có thể tốt hơn? Tôi e rằng Java EE 6 là một công nghệ mới, chưa được ghi chép đầy đủ. Tomcat có vẻ dễ bảo trì hơn Glassfish 3.

Ý kiến ​​của bạn là gì? Bạn có bất kỳ kinh nghiệm?


8
Tôi sẽ truy cập primefaces.org thay vì IceFaces nếu bạn muốn có ánh sáng. Nó nhanh hơn nhiều và api gọn gàng hơn.
Shervin Asgari

1
Hiện tại chỉ có Glassfish cung cấp JEE6. Resin đang dần triển khai hồ sơ web JEE6 , có thể đủ cho bạn tùy thuộc vào những gì bạn cần.
Thorbjørn Ravn Andersen

3
@ Thorbjørn Bạn có thể sử dụng Hồ sơ web GlassFish v3 nếu bạn chỉ muốn hồ sơ web.
Pascal Thivent

@Pascal, nói chi tiết là sẽ có một giải pháp thay thế cho Glassfish để nhận JEE6 nếu bạn có thể sống với hồ sơ web (tôi có thể), không có nghĩa là Glassfish không thể.
Thorbjørn Ravn Andersen

@ Thorbjørn Tôi đã quên xóa @ Thorbjørn :) Nhận xét dành cho OP có vẻ như giả sử sử dụng GFv3 "full-stack" là lựa chọn duy nhất.
Pascal Thivent

Câu trả lời:


101

Tôi cần một cái gì đó nhẹ, vì vậy không có EJB hoặc Seam.

Bạn có muốn giải thích điều gì khiến EJB trở nên nặng nề kể từ EJB3 không? Bạn có nhận ra rằng chúng ta không còn ở năm 2004 nữa không? Tôi thực sự muốn đọc định nghĩa của bạn về ánh sáng và các lập luận của bạn (và tôi sẽ rất vui khi cập nhật câu trả lời của mình vì tôi khá chắc rằng mình sẽ có một vài điều chắc chắn để nói).

Mặt khác, tôi cần JPA (Hibernate hoặc thay thế) và JSF với IceFaces.

Java EE 6 Web Profile bao gồm JSF 2.0, JPA 2.0, Bean Validation, EJB 3.1 Lite, CDI, ... sẽ là lựa chọn hoàn hảo cho việc này và bạn có thể sử dụng GlassFish v3 Web Profile để chạy một ứng dụng được xây dựng bằng Java EE 6 Web Profile .

Bạn có nghĩ rằng ngăn xếp như vậy trên Spring 3 được triển khai trên Tomcat là một lựa chọn tốt? Hay một ứng dụng web Java EE 6 có thể tốt hơn?

Chà, tôi thích ý tưởng chạy mã của mình trên một nền tảng không độc quyền (Java EE) hơn là trên một vùng chứa độc quyền (Spring). Và tôi nghĩ rằng Java EE 6 là đủ tốt (và đây là một cách nói uyển chuyển, EJB 3.1 (Lite), JPA 2.0, JSF 2.0, CDI kick ass). Lưu ý rằng tôi là một người hoài nghi JSF nhưng tôi đã xem xét kỹ lại và JSF 2.0 với CDI khác nhau đến mức tôi thậm chí không thể so sánh được. Và nếu bạn không nhìn vào CDI, hãy để tôi nói với bạn rằng nó rất tuyệt.

Tôi e rằng Java EE 6 là một công nghệ mới, chưa được ghi chép đầy đủ.

Java EE trông khá tốt được ghi lại cho tôi. Điều này nghe giống như yêu cầu miễn phí. Và, tin tôi hay không, tôi bắt đầu thấy Spring trở nên phức tạp trong khi Java EE trở nên dễ dàng hơn.

Tomcat có vẻ dễ bảo trì hơn Glassfish 3.

Bạn đã thử một cái gì đó? Bạn có gặp phải vấn đề cụ thể nào không? Một lần nữa, điều này nghe giống như yêu cầu miễn phí.


2
Tôi chỉ là người đứng sau dự án lớn được phát triển với EJB3.0 + Seam trên JBoss với Drools, GraniteDS và một số khác. Tôi đồng ý Seam đá! Nhưng tôi đã dành 50% chi phí phát triển cho việc triển khai lại, khởi động lại máy chủ, lỗi triển khai, dọn dẹp thư mục tạm thời, v.v. Mặt khác, hiệu suất của JBoss Tools thực sự kém (ý tôi là thực sự - ctrl + space và 10 giây bị treo). Điều này thực sự không khuyến khích tôi sử dụng JEE6 trông giống như mượn từ khuôn khổ Seam. Đối với máy chủ, tôi không muốn nghĩ về conecion pool, jndi, jms, jmx, ear deplyment. Tôi cần thứ gì đó để đặt WAR và chạy trong vài giây.
Piotr Gwiazda,

6
@peperg Gaving King là đầu mối kỹ thuật của CDI (Weld là RI), vì vậy bạn sẽ tìm thấy những điểm tương đồng giữa Seam và CDI. Nhưng CDI! = Seam, Java EE 6! = Seam, nhận thức của bạn là sai. Có thể hãy thử GlassFish v3 Web Profile, bạn sẽ ngạc nhiên (và khi nhóm kết nối được xác định, không có gì phải lo lắng).
Pascal Thivent

8
Có gì khi mọi người nói EJBs nặng? Tôi đang sử dụng EJB v3.1 và chúng chỉ đơn giản là những chú pojos được chú thích. Khi họ nói nặng, họ có ý nghĩa gì về hiệu suất hay điều gì?
arg20

13
@ arg20 - Đó thực sự là một câu hỏi lớn và Pascal yêu cầu giải thích thuật ngữ "nặng" (hoặc "nhẹ") nghĩa là gì trong ngữ cảnh này. Nhiều khả năng đó là phần còn lại của mối thù cũ giữa Spring và EJB. Trong những ngày đầu, EJB1 & 2 rất nặng về mặt khái niệm. Việc tập trung quá nhiều vào các hạt đậu và trạng thái, một bộ mô tả triển khai XML dài dòng một cách lố bịch và một số lượng lớn các giao diện bắt buộc được triển khai đã mang lại cho chúng một danh tiếng rất xấu. Với EJB3 (2006), điều này đã hoàn toàn thay đổi, nhưng những người đã rời EJB vào mùa xuân năm 2004 đôi khi vẫn nghĩ năm 2004 và EJB2 là mới nhất.
Arjan Tijms

7
Lưu ý rằng trên trang about của Spring có ghi "Chúng tôi tin rằng: J2EE sẽ dễ sử dụng hơn". Lưu ý rằng họ sử dụng thuật ngữ "J2EE" chứ không phải "Java EE", đây là tên chính xác kể từ khi phát hành Java EE 5 (tôi nghĩ vậy). Điều này nói nhiều về họ ...
Vítor E. Silva Souza

32

Tôi chưa sử dụng JavaEE6.

Tuy nhiên, tôi đã bị đánh bại bởi tất cả các phiên bản trước của JavaEE và EJB đến mức tôi sẽ không tin tưởng nó cho đến khi nó tự thiết lập là tiêu chuẩn thực tế, không chỉ là tiêu chuẩn de jure. Hiện tại, Spring vẫn là tiêu chuẩn trên thực tế.

Đánh lừa tôi một lần, xấu hổ về bạn. Lừa tôi hai lần, xấu hổ về tôi. Lừa tôi ba lần, EJB.

Một số sẽ cho rằng Spring là độc quyền. Tôi cho rằng việc triển khai các thông số kỹ thuật JavaEE của nhà cung cấp cũng chỉ là độc quyền, nếu không muốn nói là hơn thế.

Gần đây, tôi đã trải qua một cuộc chuyển đổi lớn là chuyển một loạt các Ứng dụng Java từ JBoss sang Weblogic. Tất cả các ứng dụng Spring / Hibernate được chuyển mà không có sửa đổi nào, vì chúng có sẵn tất cả các thư viện cần thiết. Tất cả các ứng dụng sử dụng JPA, EJB và JSF đều là một thảm họa khi chuyển. Sự khác biệt nhỏ trong cách diễn giải JPA, EJB và JSF giữa các máy chủ ứng dụng đã gây ra tất cả các loại lỗi khó chịu mà phải mất mãi mãi mới có thể sửa được. Ngay cả một cái gì đó đơn giản như đặt tên JNDI cũng hoàn toàn khác nhau giữa các AppServer.

Mùa xuân là một sự thực hiện. JavaEE là một thông số kỹ thuật. Đó là một sự khác biệt rất lớn. Tôi muốn sử dụng thông số kỹ thuật NẾU thông số kỹ thuật kín 100% và hoàn toàn không có chỗ lung tung theo cách các nhà cung cấp triển khai thông số kỹ thuật đó. Nhưng thông số JavaEE chưa bao giờ là như vậy. Có lẽ JavaEE6 kín gió hơn? Tôi không biết. Bạn càng có thể đóng gói nhiều hơn trong WAR của mình và bạn càng ít phụ thuộc vào các thư viện AppServer, thì ứng dụng của bạn sẽ càng linh hoạt hơn và đó là lý do tôi sử dụng Java chứ không phải Dot-NET.

Ngay cả khi thông số kỹ thuật không kín, sẽ rất tuyệt nếu có thể nâng cấp máy chủ ứng dụng mà không cần phải nâng cấp tất cả các ngăn xếp công nghệ của tôi trong tất cả các ứng dụng của tôi cùng với nó. Nếu tôi muốn nâng cấp từ JBoss 4.2 lên JBoss 7.0, tôi phải xem xét tác động của phiên bản JSF mới hơn đối với tất cả các ứng dụng của mình. Tôi không phải xem xét ảnh hưởng đến các ứng dụng Spring-MVC (hoặc Struts) của mình.


1
Chính xác, đây là một lý luận tuyệt vời.
Palesz

1
Tôi đồng ý với lý do này, nhiều vấn đề tôi đã gặp phải với sự phụ thuộc vào việc triển khai thông số kỹ thuật của một vùng chứa. Giảm đau đáng kể từ các thư viện nhúng. Khó có thể tranh cãi, nằm ngoài sở thích triết học của một thông số kỹ thuật.
Peter Porter

Lý luận tuyệt vời. Tuy nhiên, đây có phải là trải nghiệm của bạn ngay cả sau JEE 6? Tôi hiểu App Server triển khai các thông số kỹ thuật vẫn có thể là một nỗi đau - vì thế spec cùng thực hiện bởi App Server 1 có thể là một đơn giản và hiệu quả trong khi không cho App Server 2
Soumya

1
+1. Ngoài ra, máy chủ ứng dụng thay đổi theo lịch trình của Hoạt động, trong đó mùa xuân / ngủ đông nằm dưới sự kiểm soát của các nhà phát triển. trong môi trường công ty lớn, nâng cấp máy chủ ứng dụng là một việc lớn hơn nhiều.
Nathan Hughes

Tôi không thực sự hiểu rõ về Dot-Net. Nó có nhiều quyền sở hữu như Spring và được phát triển bởi một nhà cung cấp duy nhất là Microsoft. Nó có thể được giải thích xin vui lòng?
user1339260

23

Nó không quan trọng. Java EE 6 đủ tốt và vì các cấu hình ở đó, nó không "nặng" - bạn sẽ chỉ sử dụng cấu hình web.

Riêng tôi, tôi thích mùa Xuân hơn. Nhưng tôi đang hết các lập luận hợp lý chống lại Java EE 6 :)

(Như tôi đã được nhắc nhở trong một nhận xét - bạn có thể muốn thử RichFaces , cũng như ICEfaces và / hoặc PrimeFaces - tùy thuộc vào những thành phần bạn cần).


1
Vì vậy, câu hỏi đặt ra là: "Có hợp lý không khi sử dụng Máy chủ ứng dụng Glassfish đầy đủ cũng như sử dụng hồ sơ web"?
Piotr Gwiazda

1
@peperg Sử dụng Hồ sơ web GlassFish v3 nếu bạn chỉ muốn hồ sơ web, hãy xem câu trả lời của tôi.
Pascal Thivent

Tôi đã đăng một số đối số ở đây stackoverflow.com/questions/2822812/spring-3-0-vs-j2ee-6-0/… , thay vì dựa trên quan điểm "cách đưa nó vào sản xuất". Vì vậy, có thể điều đó sẽ lấp đầy các đối số của bạn một chút.
Oliver Drotbohm

@peperq, JBoss 6 đã được phát hành trong những ngày nghỉ lễ.
Thorbjørn Ravn Andersen

17

Gần đây, một trong những nhiệm vụ khách hàng của tôi liên quan đến việc đánh giá ngăn xếp khuôn khổ tùy chỉnh Spring Stack Vs Vs a Java EE Standards. Sau một tháng đánh giá và tạo mẫu, tôi không chỉ vui mừng mà còn bị thổi bay bởi bộ tính năng Java EE 6. Đối với bất kỳ kiến ​​trúc dự án "doanh nghiệp" mới nào trong năm 2011 và về sau, tôi sẽ sử dụng Java EE 6 và các phần mở rộng tiềm năng như Seam 3 hoặc dự án phần mở rộng Apache JSR299 sắp tới. Kiến trúc Java EE 6 được sắp xếp hợp lý và kết hợp tốt nhất nhiều ý tưởng nguồn mở đã phát triển trong vài năm qua.

Hãy xem xét các tính năng sau: Quản lý sự kiện, Bối cảnh và DI, Bộ chặn, Trình trang trí, Thiết bị web RESTful, kiểm tra tích hợp với vùng chứa có thể nhúng, Bảo mật và nhiều tính năng khác.

Hầu hết các kết quả của tôi được xuất bản trong blog của tôi giải thích các khái niệm chính của Java EE 6 mà bạn có thể thấy hữu ích.

Tất nhiên, không có quy tắc cứng và nhanh cho việc chọn một khuôn khổ. Java EE 6 có thể được mở rộng cho các "trang web" đơn giản hơn không yêu cầu trạng thái phiên đàm thoại phong phú. Bạn cũng có thể chọn Grails hoặc Play! Khuôn khổ. Nhưng đối với các ứng dụng web đàm thoại, tôi không thể thấy lý lẽ tốt hơn tại sao Java EE 6 không phù hợp.


Java EE 6 rất chậm, hồ sơ web glassfish và glassfish chỉ thực sự chậm để bắt đầu so sánh chúng với cầu tàu / tomcat / bất cứ điều gì. Thử nghiệm, vùng chứa có thể nhúng cũng thực sự chậm.
Palesz

15

Bây giờ, sau một thời gian, tôi có kinh nghiệm với các ngăn xếp:

  • Java EE 5 + Seam + GraniteDS + Flex
  • Spring 3 + Vaadin (trên GWT)
  • Spring 3 + JSF 2.0 (PrimeFaces)

Colclusions của tôi là:

  • Spring 3 đơn giản hơn nhiều so với Seam (gần như Java EE 6) và chạy trên Tomcat và Jetty! (Cầu cảng cho sự phát triển với plugin maven là một điều khó hiểu).
  • Tôi yêu Flex (tôi thực sự là một nhà phát triển Flex trong một thời gian dài nên tôi thiên vị) và nếu bạn cần giao diện phong phú và có thể mua FlashBuilder, hãy sử dụng cái này, nhưng hãy sử dụng phần phụ trợ Spring + GraniteDS hoặc BlazeDs này. Nếu bạn không thể mua FlashBuilder, đừng lãng phí thời gian của bạn.
  • Vaadin thật tuyệt !. Quá trình phát triển đơn giản hơn Flex, nhưng bạn có thể tạo ứng dụng phong phú một cách dễ dàng mà không có sự lộn xộn của HTML. Bạn sẽ không viết một dòng JS singe. Bạn chỉ cần một số CSS (trong Flex bạn cũng cần nó). Vì vậy, nếu giao diện ứng dụng của bạn sẽ hoạt động giống như ứng dụng trên máy tính để bàn và bạn không thể (hoặc không muốn) sử dụng Flex - hãy sử dụng Vaadin. Cảnh báo! Vaadin có chi phí JS lớn cho trình duyệt.
  • Nếu bạn tạo ứng dụng giống trang web đơn giản hơn, hãy sử dụng JSF2.0 (với phần phụ trợ mùa xuân như trên). Bạn sẽ cần phải chiến đấu với HTML (tôi ghét nó) và việc tạo giao diện phong phú sẽ khó hơn Vaadin (đặc biệt là bố cục). Bạn sẽ nhận được HTML nhẹ cho các trình duyệt / trình biên dịch chậm hơn. Tôi thích PrimeFaces - nó dễ dàng và được ghi chép đầy đủ. Vị trí thứ hai là IceFaces
  • Nếu bạn tạo một trang web (KHÔNG PHẢI là ứng dụng web) nơi bạn cần đưa sự sống vào HTML (thay vì tạo ứng dụng doanh nghiệp phù hợp với trình duyệt), hãy sử dụng Wicket (nếu bạn thích dựa trên thành phần, thái độ kéo) hoặc SpringMVC (nếu bạn thích dựa trên mẫu , thúc đẩy thái độ) hoặc chỉ sử dụng Play! khuôn khổ. Hãy nhớ rằng việc tạo các thành phần dựa trên dữ liệu phong phú sẽ khó hơn nhiều nhưng bạn sẽ có quyền kiểm soát từng thẻ của html (nhà thiết kế HTML / Đồ họa của bạn sẽ thích nó)

21
Tôi không thấy như thế nào câu trả lời của riêng bạn liên quan đến câu hỏi ...
Pere Villega

1
-1 Có vẻ rất không thích hợp để chấp nhận câu trả lời này, vì nó thậm chí không đề cập đến Java EE 6. Hơn nữa, nó không giải quyết bất kỳ điểm nào được nêu ra trong suy nghĩ kỹ lưỡng của @Pascal Thievent (và được bình chọn cao hơn nhiều) câu trả lời.
dùng359996

1
Trên thực tế câu hỏi không hợp lệ hơn. JEE 6 bây giờ đã rất trưởng thành, không phải vào tháng 3 năm 2010 khi câu hỏi được đặt ra.
Piotr Gwiazda

@PiotrGwiazda JEE 6 đã thay đổi theo cách nào kể từ đó? Mọi người sợ hơn của nó trở lại sau đó, nhưng nó đã được về cơ bản giống nhau Jee 6.
ymajoros

1
Ý tôi là việc triển khai JEE6 đã hoàn thiện hơn và khả dụng hơn. JBoss 7 hiện đã ổn định và có nhiều triển khai hơn. Cộng đồng bây giờ cũng lớn hơn. Nhiều công cụ và lib hiện hỗ trợ ngăn xếp JEE 6.
Piotr Gwiazda

8

Đọc Tương lai của Doanh nghiệp Java của Adam Bien ... Rõ ràng (Java EE có / không có Spring và Vice Versa) , bao gồm các nhận xét để có được cả hai mặt của đồng tiền. Tôi sẽ chọn Spring vì một số lý do và sau đây là một trong số đó (tái hiện một trong những nhận xét từ bài đăng)

'Tôi không chắc bạn đang nói về máy chủ Java EE 6 nào. Có chứng nhận Glassfish và TMAX JEUS. Sẽ mất khá nhiều thời gian (đọc: năm) cho đến khi các phiên bản tương thích với Java EE 6 của WebSphere, WebLogic, JBoss, v.v. được sản xuất và có thể được sử dụng cho ứng dụng thực. Spring 3 chỉ cần Java 1.5 và J2EE 1.4 để có thể dễ dàng sử dụng trong hầu hết các môi trường '


6
Chúng ta đã gần đúng một năm sau và JBoss AS 6, hỗ trợ Java EE 6, hiện đang được sử dụng trong sản xuất.
Arjan Tijms

8

Ý kiến ​​của tôi dựa trên một cái gì đó mà những người khác không đề cập đến, cụ thể là mã tại nơi làm việc của tôi có xu hướng tồn tại trong nhiều thập kỷ (theo nghĩa đen), và do đó việc bảo trì là rất quan trọng đối với chúng tôi. Bảo trì mã riêng của chúng tôi và các thư viện chúng tôi sử dụng. Chúng tôi kiểm soát mã riêng của chúng tôi, nhưng vì lợi ích của chúng tôi là các thư viện chúng tôi sử dụng, được duy trì bởi những người khác trong những thập kỷ đề cập ở trên hoặc hơn.

Để ngắn gọn một câu chuyện dài, tôi đã kết luận rằng cách tốt nhất để đạt được điều này là sử dụng các triển khai mã nguồn mở của các thông số kỹ thuật của Sun đến tận JVM thô.

Trong số các triển khai mã nguồn mở, Apache Jakarta đã chứng tỏ khả năng duy trì các thư viện của họ và gần đây Sun đã làm rất nhiều việc trong việc tạo ra các triển khai chất lượng cao cho Glassfish v3. Trong mọi trường hợp, chúng tôi cũng có nguồn cho tất cả các mô-đun, vì vậy nếu vẫn thất bại, chúng tôi có thể tự bảo trì chúng.

Thông số kỹ thuật của mặt trời thường rất nghiêm ngặt có nghĩa là việc triển khai phù hợp với thông số kỹ thuật có thể được thay thế cho nhau một cách dễ dàng. Chỉ cần xem qua các thùng chứa servlet.

Trong trường hợp cụ thể này, tôi khuyên bạn nên xem qua JavaServer Faces đơn giản vì nó là một phần của Java EE 6 có nghĩa là nó sẽ có sẵn và duy trì trong một thời gian rất dài. Sau đó, chúng tôi đã chọn tăng cường với MyFaces Tomahawk vì nó cung cấp một số bổ sung hữu ích và đó là một dự án jakarta.

Không có gì sai với JBoss Seam hoặc những người khác. Nó chỉ là sự tập trung của họ ít hướng tới vấn đề bảo trì vốn rất quan trọng đối với chúng tôi.


Hóa ra là Java ServerFaces 2 trong Java EE 6 có thể làm ngày của riêng mình những gì chúng tôi cần Tomahawk cho với JSF 1. Đó là một khuôn khổ khá có khả năng (nhưng một nặng chút XML)
Thorbjørn Ravn Andersen

Điểm tuyệt vời, thật không may, mọi người có xu hướng quên rằng phần mềm được tạo ra để tồn tại trong nhiều thập kỷ và hỗ trợ lâu dài là chìa khóa quan trọng.
timmz

6

Tôi có thể sử dụng Spring nếu bạn đã có nó, nhưng đối với dự án mới, vấn đề là gì? Tôi sẽ trực tiếp sử dụng Java EE 6 (ejb3, jsf2.0, v.v.)

Nếu khách hàng ổn với Flex, hãy tiếp tục. Sử dụng BlazeDS hoặc tương tự - không có mvc. Bạn có thể dành nhiều thời gian hơn cho phần đó (trao đổi dữ liệu giữa máy chủ và máy khách) nhưng bạn có toàn quyền kiểm soát ở cả hai phía.

Không sử dụng Vaadin, trừ khi bạn muốn hủy trình duyệt của mình. Thêm vào đó, bạn dành nhiều thời gian hơn để xử lý mã khi các trang của bạn trở nên phức tạp hơn. Ngoài ra, tư duy của bạn sẽ cần được thay đổi hoàn toàn và bất cứ điều gì bạn biết về phát triển giao diện người dùng tiêu chuẩn sẽ trở nên lãng phí. Lập luận rằng bạn không phải sử dụng HTML hoặc JS không có nhiều ý nghĩa. Bạn vẫn phải biết nó ngay cả khi bạn không sử dụng nó. Cuối cùng nó kết xuất với HTML và JS. Sau đó, cố gắng gỡ lỗi nó - đảm bảo bạn có vài ngày cho những thứ đơn giản. Thêm vào đó, tôi không thể tưởng tượng nhà phát triển web lại không biết html / js.

Tôi chỉ không hiểu tại sao mọi người đang thử tất cả những điều trừu tượng đó thay vì sử dụng Java EE trực tiếp.


5

Tại sao vẫn có những lời bàn tán về việc EJB là đối thủ nặng ký trong năm 2010? Có vẻ như mọi người không được cập nhật công nghệ Java EE. Chỉ cần dùng thử, bạn sẽ ngạc nhiên thú vị về cách mọi thứ được đơn giản hóa trong Java EE 6.


4

Câu trả lời cho câu hỏi của bạn phụ thuộc vào yêu cầu dự án của bạn. Nếu bạn không yêu cầu các tính năng Java EE như hàng đợi tin nhắn, giao dịch toàn cầu được quản lý vùng chứa, v.v. thì hãy sử dụng tomcat + spring.

Cũng từ kinh nghiệm, tôi nhận thấy rằng các dự án yêu cầu nhiều tích hợp dịch vụ web, lập lịch, hàng đợi tin nhắn tốt nhất nên được thực hiện bằng cách sử dụng một số ngăn xếp Java EE. Điều tốt là sử dụng spring, bạn vẫn có thể tích hợp với các mô-đun Java EE chạy trong một máy chủ ứng dụng.

Java EE 6 rất khác so với các phiên bản trước và nó thực sự làm cho mọi thứ dễ dàng hơn rất nhiều. Java EE 6 kết hợp những ý tưởng tốt nhất từ ​​cộng đồng Java đa dạng - ví dụ như Rod Johnson từ Spring framework đã tích cực tham gia vào việc tạo ra Dependency Injection JSR trong Java EE 6. Một lợi ích của việc sử dụng Java EE 6 là bạn đang viết mã theo một tiêu chuẩn, có thể quan trọng trong một số tổ chức để hỗ trợ nhà cung cấp, v.v.

GlassFish v3 hỗ trợ Java EE 6 và nó khá nhẹ và khởi động rất nhanh. Tôi đã sử dụng glassfish v3 cho các phát triển của mình và nó thực sự dễ dàng cấu hình. Nó đi kèm với một bảng điều khiển quản trị rất thân thiện với người dùng cho phép bạn quản trị máy chủ của mình bằng đồ họa.

Nếu bạn đang sử dụng GlassfishV3 và JSF 2, thì bạn có thể tận dụng các tính năng CDI của Java EE 6, cho phép bạn dễ dàng tạo các cuộc hội thoại (ví dụ như trình hướng dẫn giống trang) trong JSF.

Phải nói rằng, sử dụng Java EE 6 cũng đòi hỏi bạn phải học một API mới. Tùy thuộc vào khung thời gian có sẵn, nó có thể không phải là lựa chọn tốt nhất cho bạn. Tomcat đã có từ lâu đời và sự kết hợp tomcat + spring đã được nhiều dự án web áp dụng, có nghĩa là có rất nhiều tài liệu / diễn đàn.


Tôi không đồng ý với câu đầu tiên của bạn, lựa chọn không phải là sử dụng JMS hay không. Và tôi không nghĩ rằng JSR-330 quan trọng như vậy trong Java EE 6 (nó có nhiều hơn vì lý do chính trị), phần quan trọng là JSR-299 (CDI). Ít nhất, đây là ý kiến ​​của tôi.
Pascal Thivent

Đồng ý rằng có một số chính trị liên quan đến JSR330 - tuy nhiên nó khá quan trọng vì nó cung cấp cơ sở chung cho việc tiêm phụ thuộc trong Java (SE hoặc EE) hơn là biến DI trở thành công nghệ chỉ JEE. Ngoài ra, nó được hỗ trợ bởi Spring framework và Google Guice, có nghĩa là nó sẽ làm cho mã Spring / Guice dễ dàng chuyển sang JEE6 hoặc ngược lại. JSR299 cũng được thiết kế để mở rộng các tính năng trong JSR330. Bạn nói đúng rằng đối với các ứng dụng web trong JEE6, JSR299 là hoàn toàn quan trọng. Nhờ hai JSR này, JEE6 & Spring đều có mô hình lập trình rất giống nhau. Cảm ơn bạn đã bình luận!
Raz

3

Tôi đã làm việc trong cả Spring và Java EE 6. Điều tôi có thể nói từ kinh nghiệm của mình là Nếu bạn đang sử dụng JSP cũ hoặc Flex độc quyền thì bạn sẽ an toàn nếu ở lại với Spring.

Nhưng nếu bạn muốn tiếp tục với JSF thì đã đến lúc chuyển sang Java EE 6. Với Java EE 6, bạn đang chuyển sang các Thư viện mã lệnh và thư viện thành phần được chuẩn hóa. Không còn sự không tương thích tập lệnh và ma trận thư viện thành phần.

Về Spring MVC, nó tốt miễn là dự án của bạn không phát triển quá lớn. Nếu đó là một ứng dụng doanh nghiệp lớn, hãy sử dụng Java EE 6. Bởi vì đó là cách duy nhất bạn có thể duy trì các thư viện thành phần và gói tài nguyên của riêng mình một cách có trật tự.


1
Cám ơn bạn đã góp ý. Lựa chọn của tôi là Spring + Vaadin.
Piotr Gwiazda

3

Nếu bạn cần Java EE đầy đủ, tôi khuyên bạn nên dùng GlassFish 3.1. Nó bắt đầu rất nhanh so với các bộ chứa Java EE khác, nó thực hiện một số phần hoặc tất cả Java EE 6 (JBoss 6, WebLogic 10.3.4), việc triển khai lại mất vài giây và hầu như tất cả có thể được thực hiện theo quy ước qua cấu hình, nó rất thân thiện.

Tôi muốn một cái gì đó "Nhẹ", bạn có thể tùy chỉnh Apache Tomcat 7.x với các tính năng mong muốn. Tôi đã sử dụng rất nhiều với các thư viện sau: Weld 1.1.0 (CDI) JPA 2.0 (Hibernate 3.6.x) - chỉ giao dịch cục bộ tài nguyên JSF 2.x (Mojarra) RichFaces 4.0 BIRT thời gian chạy

Là một nhà phát triển Java EE trong 10 năm qua (tôi bị ảnh hưởng bởi các công nghệ web EJB, JSF và web sớm), Java EE 6 rất dễ dàng, kết hợp tốt và phần cứng hiện tại chạy trơn tru nên những lý do ban đầu thúc đẩy Spring không còn hợp lệ.


1
Tôi thích câu trả lời của bạn. Rất hợp lí. Khi tôi đăng câu hỏi JEE6 còn rất trẻ và Tomcat 7 vẫn chưa hoàn thành. "Những lý do ban đầu thúc đẩy Spring không còn hợp lệ" - đó là sự thật, nhưng JEE6 với CDI cần một thời gian để khắc phục. Ví dụ: Giám sát Javamelody có sẵn cho Spring và Guice (Tôi không thể tưởng tượng được việc chạy các ứng dụng mà không có nó). EHcache có sẵn cho Spring (ý tôi là kết quả của các phương pháp bộ nhớ đệm). Rất nhiều thứ như lập trình khía cạnh vẫn dễ dàng hơn trong Spring, vì rất nhiều thư viện và khuôn khổ của bên thứ ba tích hợp dễ dàng với Spring nhưng với JEE6 thì chưa.
Piotr Gwiazda,

1

Tôi vẫn thích mùa xuân hơn.

Và tôi sẽ chuyển JSF. Tôi nghĩ đó là một công nghệ đã chết. Spring MVC sẽ là một lựa chọn thay thế tốt hơn. Flex cũng vậy. Hãy suy nghĩ về các dịch vụ XML đầu tiên theo hợp đồng và bạn có thể tách hoàn toàn phần cuối khỏi giao diện người dùng.


1
Tôi đã tạo một số ứng dụng với Java + Flex và PHP + Flex và tôi đồng ý rằng đó là giải pháp tốt nhất cho các giao diện phong phú. Nhưng trong ứng dụng này, tôi không thể sử dụng Flex :( Mặc dù vậy, tôi cần một số giao diện cấp cao, vì vậy Spring MVC không phải là một giải pháp. Tôi muốn nghĩ về việc có thể sắp xếp dữ liệu hơn là <tr> <td> trong một vòng lặp.
Piotr Gwiazda

1
@duffymo - Tôi có thể tranh luận xem liệu flex có phải là một lựa chọn tốt hay không. JSF chắc chắn không chết, đặc biệt là với các thư viện như richfaces, primefaces, icefaces, v.v. xung quanh.
Bozho

1
Trong IceFaces, tôi tạo menu, cây, mã dữ liệu sử dụng các hành động, sự kiện và tôi không nghĩ liệu trang tải lại hay đó là yêu cầu ajax. Một datagrid có thể sắp xếp hoặc cây tải ajax là một thành phần tích hợp. Trong Spring MVC, tôi hoạt động trên HTML - bảng, danh sách, v.v. Tôi cần sử dụng một số khuôn khổ javascript của bên thứ ba và tạo phép thuật AJAX bằng tay. Tôi muốn làm điều đó trong Flex nhưng đó là một quyết định chính trị / kinh doanh - không phải của tôi.
Piotr Gwiazda

1
Hai dự án JSF hiện tại của tôi chắc chắn vẫn chưa chết;) Và tôi thực sự hài lòng với cách JSF để xây dựng RIA ("rich" trong "richfaces" là cho điều đó), hơn là sử dụng Flex. Một thậm chí sẽ được công khai vào tuần tới.
Bozho

2
Tôi thực sự muốn biết tại sao bạn vẫn thích Spring hơn, Java EE 6 thật tuyệt. Bạn không nghĩ rằng việc chạy trên một nền tảng mở là quan trọng đối với tương lai của Java?
Pascal Thivent

0

Tôi muốn giới thiệu Spring + Tomcat trừ khi bạn có thể đợi thời gian để glassfish v3 và Weld trở nên trưởng thành hơn. Hiện có một số vấn đề với mức tiêu thụ bộ nhớ / tải cpu khi chạy glassfish với các ứng dụng hỗ trợ CDI.


0

Tôi đã không đọc tất cả mọi thứ nhưng chỉ để nói rằng bây giờ bạn có thể sử dụng EJB3 trong cuộc chiến trên Java EE 6 để bạn có thể sử dụng EJB3 trên Tomcat (tôi nghĩ vậy).


Có, bạn có thể đóng gói các EJB trong một WAR trong Java EE 6 nhưng điều này không có nghĩa là bạn có thể triển khai một WAR như vậy trên Tomcat. Bạn cần một vùng chứa triển khai Hồ sơ Web còn Tomcat thì không và thực sự không có kế hoạch nào trong cộng đồng Tomcat để triển khai nó (xem old.nabble.com/Java-EE-6-Web-Profile-td27715793.html ). Nhưng có GlassFish v3 Web hồ sơ, sẽ có Resin ...
Pascal Thivent

2
cập nhật: hãy xem TomEE + project tomee.apache.org/apache-tomee.html
gpilotino

-3

Tôi đã giới thiệu cho bạn Tomcat với Spring vì:

  1. Spring có thể tạo ra các hạt đậu hỗ trợ cho JSP
  2. Bạn sẽ sử dụng Spring để duy trì đối tượng thông qua JPA

Chọn Tomcat là một lựa chọn tốt vì bạn không cần bất kỳ quá trình xử lý nặng nề nào


1
"Xử lý nặng"? Bạn có thể giải thích? Tôi tò mò.
Pascal Thivent,
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.