2010-06-07 53 views
12

Trên Tomcat FAQ nó nói: "Tomcat không phải là một máy chủ EJB. Tomcat không phải là một máy chủ J2EE đầy đủ."Một Enterprise Java Bean thực sự là gì?

Nhưng nếu tôi:

  • sử dụng mùa xuân để cung cấp một bối cảnh ứng dụng
  • chú thích đơn vị của tôi với JPA chú thích (và sử dụng Hibernate như một nhà cung cấp JPA)
  • configure C3P0 như một tổng hợp kết nối dữ liệu nguồn
  • chú thích các phương thức dịch vụ của tôi với @Transactional (và sử dụng Atomikos làm nhà cung cấp JTA)
  • Sử dụng JAXB cho marshalling và unmarshalling
  • và có thể thêm khả năng JNDI của riêng tôi

sau đó tôi không có hiệu quả có một máy chủ ứng dụng Java EE? Và sau đó không phải là đậu EJB của tôi? Hay có một số đặc tính xác định khác?

Máy chủ ứng dụng tuân thủ Java EE cung cấp cho bạn những gì bạn không thể dễ dàng/dễ dàng nhận được từ Tomcat với một số hệ thống phụ của bên thứ 3?

+3

Như một lưu ý phụ, Apache Tomcat có thể được sử dụng như một phần của máy chủ JavaEE đầy đủ; cụ thể hơn là JBoss hoặc Apache Geronimo. – Powerlord

+0

Và gần đây nhất, Apache TomEE –

Trả lời

4

Nhưng nếu tôi thêm (...) sau đó tôi không có hiệu quả có một máy chủ ứng dụng Java EE? Và sau đó không phải là đậu EJB của tôi? Hay có một số đặc tính xác định khác?

Không, bạn không có máy chủ ứng dụng Java EE, máy chủ ứng dụng Java EE chính thức hơn Tomcat + Spring + Trình quản lý giao dịch độc lập. Và ngay cả khi bạn thêm một nhà cung cấp JMS và một thùng chứa EJB, bạn vẫn sẽ không có một máy chủ Java EE. Keo giữa tất cả các bộ phận là IMO quan trọng và là một phần của giá trị gia tăng của một thùng chứa Java EE.

Về EJB, đặc tả EJB nhiều hơn JPA và các đặc tính cũng là Đậu phiên và Đậu điều khiển (thực ra, tôi không thực sự coi JPA Entities là EJB ngay cả khi JPA là một phần của đặc tả EJB 3.0 trong Java EE 5 vì lý do lịch sử - điều này không còn đúng trong Java EE 6, JPA 2.0 và EJB 3.1 là các đặc điểm riêng biệt). Tôi cũng nên đề cập rằng một bean Spring được chú thích với @Transactional không tương đương với Session Bean. Một thùng chứa Java EE có thể làm nhiều việc hơn với Session Beans (xem bên dưới). Bạn có thể không cần chúng mặc dù nhưng vẫn còn, họ không hoàn toàn tương đương.

Điều cuối cùng, các thùng chứa Java EE thực hiện một tiêu chuẩn, vùng chứa Spring không, nó là độc quyền.

Máy chủ ứng dụng tương thích Java EE cung cấp cho bạn những gì bạn không thể dễ dàng/dễ dàng nhận được từ Tomcat với một số hệ thống con của bên thứ 3?

Như tôi đã nói, tôi nghĩ rằng "keo" là một phần của giá trị gia tăng và đóng góp cao vào tính bền vững của toàn bộ. Sau đó, answer của ewernli nhấn mạnh rất rõ những gì khó đạt được.Tôi chỉ muốn thêm:

  • Clustering và Fail-over (để đạt được lỗi khoan nhượng)
  • cơ sở Quản trị

Vâng, một máy chủ Java EE tốt sẽ làm những việc khá gọn gàng để cải thiện khả năng chịu lỗi (nhóm các nhóm kết nối, cây JNDI, các đích JMS, thử lại tự động với các hạt idempotent, các máy khách EJB thông minh, phục hồi giao dịch, di chuyển dịch vụ, vv). Đối với các ứng dụng "nhiệm vụ quan trọng" - đại đa số là không - điều này là quan trọng. Và trong những trường hợp như vậy, các thư viện ở trên cùng của API Servlet là IMO không phải là một sự thay thế.

1

Việc triển khai EJB sẽ là một bean được viết và đóng gói để chạy trên bất kỳ máy chủ EJB tương thích nào. Nếu bạn làm những gì bạn mô tả, nó có thể làm việc, nhưng nó sẽ không được di chuyển đến máy chủ ứng dụng của nhà cung cấp khác.

Vì vậy, EJB là một tiêu chuẩn tuân thủ một đặc điểm kỹ thuật cụ thể và do đó là di động.

Trong thực tế, nhiều EJB không tuân thủ đầy đủ hoặc máy chủ ứng dụng trung lập. Tuy nhiên, trong chính chúng là, do đó, các không tương thích nhỏ sẽ dễ dàng hơn nhiều để sửa chữa nếu bạn thay đổi các nhà cung cấp máy chủ ứng dụng hơn là cố gắng di chuyển kiến ​​trúc mà bạn đã mô tả cho máy chủ GlassFish, JBoss hoặc Weblogic. EDIT: Để phản hồi nhận xét của bạn, bạn sẽ không có EJB được chú thích và/hoặc được định cấu hình thông qua XML theo cách mà mã truy cập nó theo các cách tuân thủ EJB sẽ có thể sử dụng nó mà không thay đổi.

Có hai góc để nhận xét của bạn. Một trong những chức năng mà bạn sẽ mất triển khai trên một JBoss hoặc bất kỳ của những người khác thay vì Tomcat là gì? Có thể không có gì, nếu bạn mang theo tất cả các khung công tác mà bạn đã dựa vào. Tuy nhiên, nếu bạn muốn di chuyển mã của mình sang Weblogic, ví dụ, để sử dụng một số tính năng của nó, thì mã của bạn sẽ cần một số thay đổi đáng kể có khả năng để theo kịp.

Tôi không nói rằng bạn không thể sao chép tất cả chức năng EJB (chắc chắn tập con bạn quan tâm) thông qua các phương tiện khác, chỉ là nó không phải là đặc tả, và do đó không thực hiện độc lập.

+0

Tại sao kiến ​​trúc tôi mô tả không thể di chuyển đến một máy chủ ứng dụng EJB thực? Nó sẽ không chạy? Nó có cần phải được cấu hình lại hoặc viết lại không? – HDave

5

EJB là các thành phần JavaEE tuân theo API javax.ejb.

JavaEE là tập hợp các API, bạn không cần phải sử dụng tất cả các API này.

Tomcat là một máy chủ JavaEE "một phần", ở chỗ nó chỉ thực hiện một số API JavaEE, chẳng hạn như Servlets và JNDI. Nó không thực hiện ví dụ: EJB và JMS, vì vậy nó không phải là một thực thi JavaEE đầy đủ.

Nếu bạn đã thêm một số bit và phần bổ sung (ví dụ: OpenEJB, HornetQ), bạn sẽ thêm các phần còn thiếu và bạn sẽ kết thúc với một máy chủ JavaEE đầy đủ. Nhưng ra khỏi hộp, Tomcat không phải như vậy, và không cố gắng.

+0

Về cơ bản, POJO có chú thích của tôi có nhiều chức năng của EJB (tất cả chức năng mà tôi quan tâm), nhưng vì Tomcat không thực hiện javax.ejb (và hạt của tôi không sử dụng các API đó), chúng không chính thức EJB. Tôi có đúng là giả sử kiến ​​trúc của tôi sẽ chạy trong một máy chủ ứng dụng tốt không? – HDave

+1

@HDave: Có nhiều điều hơn với EJB so với chú thích JPA. Chúng bao gồm những thứ như giao dịch, bảo mật và vòng đời, mà * bổ sung * và * mở rộng * các chú thích JPA. – skaffman

+0

Chắc chắn - theo chú thích tôi có nghĩa là JPA + Giao dịch + Bảo mật. Tôi giả định rằng tất cả sẽ làm việc trong một máy chủ ứng dụng JEE. Thê nay đung không? – HDave

3

1) Bạn đang nhầm lẫn giữa các thực thể JPA với EJB. Trong khi JPA thuộc về đặc tả EJB3, nó luôn có nghĩa là một công nghệ độc lập.

2) EJBs là: đậu không quốc tịch, đậu trạng thái và hạt điều khiển thông điệp. Trong khi mỗi chức năng này có thể dễ dàng đạt được bằng cách sử dụng mùa xuân, mùa xuân chỉ không sử dụng thuật ngữ này. Vào mùa xuân, bạn không có POJO + "ma thuật" như trong EJB, vào mùa xuân, POJO + cấu hình của riêng bạn (đôi khi cũng giống như ma thuật). Sự khác biệt chính là mùa xuân làm nhiều hơn và máy chủ ứng dụng không ít hơn, đó là lý do tại sao một ứng dụng mùa xuân là hạnh phúc với một tomcat trong khi một ứng dụng ejb3 cần một máy chủ ứng dụng 'thực sự'.

Theo ý kiến ​​của tôi, 90% các ứng dụng có thể được triển khai bằng cách sử dụng spring + tomcat, ejb3 hiếm khi cần thiết.

1

thì tôi có thực sự không có máy chủ ứng dụng Java EE không? Và sau đó không phải là của tôi đậu EJB của? Hoặc có một số khác xác định đặc tính không?

Trả lời nhanh Các EJB thực sự phải tuân thủ đặc tả Java EE. Tomcat là một thùng chứa Java EE không phải là một máy chủ ứng dụng.

nó là những gì mà một ứng dụng Java EE phù máy chủ cung cấp cho bạn mà bạn có thể không dễ dàng /dễ dàng nhận được từ Tomcat với một số hệ thống con bên thứ 3?

Trả lời nhanh câu hỏi thứ hai của bạn. Trong trường hợp của bạn hầu như không có gì.

EJB có xu hướng là đối tượng thực sự nặng và mọi người đã sử dụng chúng để giải quyết các vấn đề khi chúng về cơ bản là quá mức cần thiết. Các khung như Spring được tạo ra để giải quyết những vấn đề đó mà không cần sử dụng các EJB. Tôi nghĩ cuốn sách đầu tiên mà Spring được giới thiệu thậm chí còn được gọi là "phát triển J2EE không có EJB".

+1

Đầu tiên, Tomcat là ** NOT ** một thùng chứa Java EE. Thứ hai, EJBs = nặng là đúng đối với J2EE 1.4 nhưng không ** KHÔNG ** áp dụng cho EJB3. Chúng tôi không còn trong năm 2004 nữa ... –

+0

Điều đó có ý nghĩa với tôi rằng nếu vùng chứa của bạn không hỗ trợ EJB, thì nó không phải là một thùng chứa Java EE. Theo Wikipedia tuy nhiên, Tomcat là một máy chủ ứng dụng (mà tôi tin là về mặt kỹ thuật đúng, mặc dù khó hiểu): http://en.wikipedia.org/wiki/Application_server – HDave

2

Ngoài định nghĩa chặt chẽ về những gì và không phải là EJB, bạn đang thêm rất nhiều thứ vào Tomcat. Ngay cả khi những gì bạn có là một máy chủ EJB, nó không thực sự đồng bằng Tomcat nữa.

Câu hỏi thường gặp là chính xác: Tomcat không phải là máy chủ EJB. Tuy nhiên, nó có thể là điều đó hoặc nhiều thứ khác nếu bạn chồng lên đủ các thư viện và mã bổ sung.

+0

Câu trả lời hiếm và được khai sáng. Nhiều người hơn nên có quan điểm này. Bạn thực sự không thể nói "chỉ Tomcat" khi bạn đã xây dựng hiệu quả ngăn xếp giống như JavaEE của mình. –

3

Thật vậy, nếu bạn đặt đủ nỗ lực bạn gần như có thể biến Tomcat/mùa xuân vào một máy chủ ứng dụng nặng full-fledged :) Bạn thậm chí có thể nhúng một container EJB3 xách tay ...

nó là những gì mà một Ứng dụng tuân thủ Java EE máy chủ cung cấp cho bạn rằng bạn không thể dễ dàng/dễ dàng nhận được từ Tomcat với một số hệ thống con của bên thứ 3?

Hiện vẫn còn một vài tính năng mà khó có được với các module bên thứ 3:

  • session bean trạng thái (SFSB)
  • mở rộng bối cảnh kiên trì
  • ứng dụng chứa client/java start web
  • phân cụm tùy thuộc vào ứng dụng. máy chủ
  • CORBA khả năng tương tác
  • JCA hội nhập ~
  • Remoting ~
  • giao dịch container quản lý ~
  • quản lý phong nha của các giao dịch phân phối (ví dụ như phục hồi tx Heuristic)

Entries với ~ cũng là được hỗ trợ bởi mùa xuân, nhưng không quá tầm thường, ít nhất là với kiến ​​thức tốt nhất của tôi.

Một vài chi tiết trong câu trả lời này: EJB vs Spring

+0

+1 Câu trả lời hay. Nhưng tôi cũng sẽ thêm chuyển đổi dự phòng và khôi phục, bạn sẽ không nhận được điều đó với một Tomcat trên steroid và đó là một phần quan trọng của một đặc tả kỹ thuật và phần mềm trung gian chính thức. –

+0

Đúng vậy. Tôi coi đó là một phần của cụm, ngay cả khi nó không giống hệt nhau. Ngoài ra, các thông số kỹ thuật của JEE được viết để phân cụm có thể được hỗ trợ, nhưng chúng không yêu cầu nó phải tuân thủ. Nhưng tôi hoàn toàn đồng ý rằng đây là một khía cạnh quan trọng trong việc lựa chọn một ứng dụng. máy chủ. – ewernli

Các vấn đề liên quan