2016-06-23 14 views
8

Tôi có một số kinh nghiệm về Java lõi và Java EE. Tôi đọc câu hỏi khác nhau về SO để hiểu chính xác Java EE là gì? Và vài câu trả lời trong SO là: what-exactly-is-java-ee, what-is-java-eeJava EE - ai thực hiện đặc tả?

Tôi có một số nghi ngờ:

1) Nếu Java EE chỉ là một đặc điểm kỹ thuật, người không thực hiện chúng? Các máy chủ ứng dụng (như JBOSS, GlassFish) có thực hiện các đặc tả này không?

2) Nếu tôi sửa thông số EJB được thực hiện bởi vùng chứa EJB, và tôi tin rằng EJB Container là một phần của Máy chủ ứng dụng. Bây giờ, khi chúng tôi là nhà phát triển viết mã EJB, chúng tôi đang thực sự làm gì? Tôi nghi ngờ rằng, EJB container thực hiện đặc tả EJB, vì vậy chúng ta có ghi đè một số "phần đặc tả" của EJB không? Làm thế nào đến, một số phần của EJB được thực hiện bởi các container EJB và một số điều mà các nhà phát triển đang viết? HOẶC có phải là một phần nào đó của EJB phải được cung cấp bởi EJB container và một phần nào đó được phát triển bởi các nhà phát triển? Tôi gặp khó khăn trong việc từ bỏ việc này.

Bạn có thể giúp ai hiểu điều này không?

+2

1) Đã được trả lời ở dạng trùng lặp. 2) Chúng tôi, các nhà phát triển Java EE, chỉ là những người dùng cuối của API Java EE. – BalusC

Trả lời

8

Bất kỳ ai cũng có thể triển khai đặc tả kỹ thuật java ee (JSR342) hoặc bất kỳ jsr nào thuộc về nó. Khi họ làm, họ có thể (sau khi mua và vượt qua Compatibility Test Suite) yêu cầu phải tương thích với đặc điểm kỹ thuật.Có một số nhà cung cấp với các máy chủ ứng dụng của họ là compatible with java ee, nhưng không có nhà cung cấp nào thực hiện đầy đủ đặc tả kỹ thuật java ee. Ví dụ, glassfish (thực thi tham chiếu java ee) sử dụng triển khai CDI của Red Hat. Đôi khi, nhà cung cấp không thực hiện bất kỳ phần nào của đặc tả java ee, họ lấy glassfish, thêm các thư viện của nhà cung cấp cụ thể của họ và phát hành nó dưới tên của họ. Để yêu cầu tính tương thích, họ vẫn cần phải trải qua quá trình chứng nhận và chạy CTS.

Để tìm hiểu tất cả các nhà cung cấp triển khai đặc điểm kỹ thuật không dễ dàng như vậy, vì không phải tất cả họ đều trải qua quá trình chứng nhận. Ví dụ, Apache CXF không được chứng nhận riêng của mình, thay vào đó nó được chứng nhận là một phần của JBoss của Red Hat.

Mỗi đặc điểm kỹ thuật có API và pdf văn bản, cả hai đều xác định hành vi bắt buộc của từng triển khai. Đó là những gì bạn sử dụng khi viết mã EJB. Ví dụ, khi bạn tạo một ejb:

import javax.ejb.Singleton; 
@Singleton 
public class MySingleton{ 
    ... 
} 

@Singleton chú thích là một phần của đặc tả, nhưng MySingleton lớp là mã EJB của bạn, nó không phải là một phần của đặc tả. Các container EJB sau đó biết phải làm gì với lớp.

+0

Cảm ơn rất nhiều ý kiến ​​của bạn, có ý nghĩa. – CuriousMind

+0

Câu trả lời xuất sắc – StuPointerException

1

Có, nhà cung cấp container EJB (máy chủ ứng dụng) như RedHat thực hiện đặc tả J2EE trong các sản phẩm của họ (như JBoss).

Điều họ không làm là triển khai bất kỳ logic nghiệp vụ nào (chỉ là "hệ thống ống nước" nếu bạn muốn). Đó là nơi các nhà phát triển ứng dụng đến.

Cũng giống như Apache HTTPD hoặc nginx thực hiện đặc tả giao thức HTTP, nhưng điều đó không phải là trang web thực hiện.

1

Bất kỳ ai cũng có thể triển khai đặc tả J2EE, mặc dù tôi không khuyên bạn nên tự mình cố gắng làm điều đó. Bạn nói đúng, điều này thường được thực hiện bởi các máy chủ ứng dụng để bạn có thể chạy ứng dụng của mình trên một thùng chứa tuân thủ J2EE. Ngoài ra còn có các thư viện mã nguồn mở, khi kết hợp và thêm vào Tomcat sẽ thực hiện đặc tả (xem ví dụ).

Khi bạn viết ứng dụng, bạn đang sử dụng các lợi ích của môi trường J2EE, cho phép bạn viết các ứng dụng phức tạp và tập trung vào nhu cầu của các yêu cầu cụ thể của bạn.

1

Trong các trường hợp đặc tả Java (Java EE, JSF, JSR khác), bạn thường thực hiện tham chiếu được tạo trong khi soạn thảo đặc tả (Glassfish trong trường hợp Java EE), sau đó bạn có các nhà cung cấp khác có thể tự thực hiện spec (thường tuyên bố nó "tốt hơn" theo một cách nào đó).

Bạn là nhà phát triển sau đó viết mã có thể sử dụng các cơ sở được cung cấp bởi thông số kỹ thuật, sẽ chạy chính xác trên bất kỳ triển khai tuân thủ nào.

1

1) Máy chủ ứng dụng triển khai đặc điểm kỹ thuật và trong khi phát hành máy chủ, chúng sẽ cung cấp chi tiết triển khai của chúng. Để tham khảo, hãy xem xét điều này link, trong đó chỉ định JSR khác nhau được thực hiện bởi JBOSS 7.

2) Khi chúng tôi chỉ sử dụng bất kỳ triển khai nào được cung cấp bởi máy chủ ứng dụng, thì thực thể sẽ được thực hiện bởi máy chủ. Trong khi nếu chúng ta đã ghi đè lên một lớp thì lớp học được ghi đè của chúng tôi sẽ được cung cấp cho các hoạt động của chúng tôi.