2012-01-21 24 views
16

Tôi đang đọc EJB 3 trong sách Hành động và tôi có câu hỏi sau:
POJO của bạn có viết và chú thích bằng @Entity và vân vân cũng là loại thực thể EJB không?EJB và JPA liên quan như thế nào?

Tôi không hiểu JPA phải làm gì với EJB. Bây giờ không phải là đặc điểm kỹ thuật của JPA? Các thực thể cũng được chứa trong một thùng chứa kiên trì của chính nó. Họ nói về EJB 3 Java Persistence API vv nhưng tôi không hiểu những gì các thực thể phải làm với EJB.

+0

Câu hỏi của bạn thật tuyệt vời. –

Trả lời

15

JPA được thiết kế để thay thế các hạt thực thể EJB2 và đã bắt đầu như một phần của đặc tả EJB3. Vì nó có ý nghĩa để sử dụng JPA bên ngoài một thùng chứa EJB, nó bây giờ có đặc điểm riêng của nó, nhưng nó vẫn liên quan đến EJB3, vì một thùng chứa EJB3 tuân thủ phải cung cấp thực hiện JPA, tích hợp vào xử lý giao dịch của container.

+0

Vì vậy, mặc dù nó không bị ràng buộc chặt chẽ nữa, đặc tả EJB yêu cầu thực hiện và đó là lý do tại sao nó được xem như là một loại thành phần thứ ba trong thế giới EJB? – LuckyLuke

+1

EJB2 có "hạt thực thể" là loại thứ ba của thành phần. EJB3 có JPA, có "thực thể". Nhưng tôi không nghĩ rằng chúng được coi là "thành phần EJB" nữa. Chúng chỉ được gọi là thực thể JPA. –

3

Bạn nói đúng. JPA có nhiều việc phải làm hơn là chỉ hỗ trợ EJB. Đó là lý do tại sao JPA trở thành một JSR hoặc đặc tả riêng biệt. EJB sử dụng hoặc cho phép sử dụng JPA trong đặc điểm kỹ thuật của nó, đơn giản chỉ vì JPA là một tiêu chuẩn tốt. Bây giờ bạn có thể chuyển đổi giữa các nhà cung cấp JPA mà không thay đổi mã của bạn nếu được thiết kế đúng cách.

Đặc tả EJB có thể được sử dụng độc lập với JPA (mặc dù JPA được bao gồm như một phần của thông số EJB) và JPA tương tự có thể được sử dụng cho nhiều nội dung ngoài thông số EJB. Tuy nhiên, đặc tả EJB cho phép tiêm JPA Entitiy Manager (và cách sử dụng nó) vào các bean của nó rất dễ dàng, giúp cho việc lập trình trở nên dễ dàng hơn. Ofcourse này bây giờ có thể đạt được dễ dàng bằng cách sử dụng một JSR mới trên CDI :-).

Tất cả máy chủ ứng dụng hỗ trợ thông số EJB, cũng nên hỗ trợ JPA. Bạn có thể xem this thread để biết thêm thông tin.

8

Cho đến phiên bản 2.1 của thông số EJB, lớp bean thực thể phải triển khai giao diện javax.ejb.EntityBean và cung cấp triển khai cho các phương thức soạn sẵn như ejbLoad, ejbStore, ejbActivate và ejbPassivate.

EJB 3.0 đã áp dụng đặc tả JPA. Khái niệm rất lớn của một bean thực thể đã được superceded bởi khái niệm đơn giản hơn về thực thể JPA. Để tạo ra thực thể như vậy, không cần thực hiện giao diện hoặc phương thức tấm nồi hơi. Thực thể là POJO có chú thích @Entity. Vì vậy, trong thực tế việc sử dụng các "EJB thực thể" trong các ứng dụng Java EE đã chết (được chôn dưới JPA) như của EJB 3.

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