Tại sao các thư viện không thể hoạt động bên ngoài môi trường máy chủ ứng dụng?
Trên thực tế họ có thể. Hầu hết các thư viện có thể được sử dụng trực tiếp độc lập (trong Java SE) hoặc được đưa vào .war (thực tế gần như luôn luôn là Tomcat). Một số phần của Java EE, như JPA, có các phần rõ ràng trong các thông số kỹ thuật tương ứng của chúng cho biết chúng nên hoạt động và được sử dụng như thế nào trong Java SE.
Nếu có bất cứ điều gì, đó không phải là môi trường máy chủ ứng dụng đang bị đe dọa ở đây, mà là sự hiện diện của tất cả các thư viện khác và mã tích hợp hợp nhất chúng.
Do đó, các chú thích sẽ chỉ được quét một lần cho tất cả các lớp của bạn thay vì mọi thư viện (EJB, JPA, v.v.) tự quét đi quét lại. Cũng do đó, các chú thích CDI có thể được áp dụng cho các bean EJB và các trình quản lý thực thể JPA có thể được đưa vào chúng.
Tại sao tôi cần thứ gì đó lớn như JBoss chỉ để biên dịch mã đơn giản để gửi email?
Có một số điều sai với câu hỏi này:
- Để biên dịch, bạn chỉ cần API jar, dưới 1MB cho Hồ sơ web và hơn 1MB một chút cho hồ sơ đầy đủ.
- Để chạy, bạn rõ ràng cần một bản triển khai, nhưng "đồ sộ" đang phóng đại mọi thứ. Ví dụ, OpenJDK có dung lượng khoảng 75MB và TomEE (một triển khai Hồ sơ web có hỗ trợ thư) chỉ là 25MB. Ngay cả GlassFish (triển khai Hồ sơ đầy đủ) cũng chỉ có 53MB.
- Mail hoạt động hoàn toàn tốt từ Java SE (và do đó là Tomcat) cũng như sử dụng mail.jar và activation.jar độc lập .
Tại sao các thư viện Java EE không phải là "chuẩn" và được bao gồm trong bản tải xuống JVM thông thường và / hoặc SDK?
Theo một cách nào đó, Java EE là một trong những nỗ lực đầu tiên nhằm chia nhỏ JDK vốn đã khổng lồ thành nhiều phần để dễ quản lý và tải xuống hơn. Mọi người đã phàn nàn rằng các lớp đồ họa (AWT, Swing) và Applet nằm bên trong JRE khi tất cả những gì chúng làm là chạy một số lệnh trên máy chủ không đầu. Và sau đó bạn cũng muốn bao gồm tất cả các thư viện Java EE trong JDK tiêu chuẩn?
Với việc cuối cùng phát hành hỗ trợ mô-đun, chúng tôi sẽ chỉ có một JRE cơ sở nhỏ với nhiều thứ có thể cài đặt riêng biệt dưới dạng gói. Có lẽ một ngày nào đó nhiều hoặc thậm chí tất cả các lớp tạo nên Java EE cũng sẽ là gói như vậy. Thời gian sẽ trả lời.
Tại sao có rất nhiều dịch vụ Java EE khi thực sự chỉ có hai phiên bản chính của Java tiêu chuẩn (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Có nhiều hơn hai phiên bản Java SE. Ít nhất có IBM JDK, BEA trước đây (JRocket, đang được hợp nhất thành Oracle / Sun vì mua lại), nhiều triển khai mã nguồn mở khác và một loạt các triển khai để sử dụng nhúng.
Lý do đằng sau Java SE và EE là một đặc tả là nhiều nhà cung cấp và tổ chức có thể triển khai nó và do đó nó khuyến khích sự cạnh tranh và giảm thiểu rủi ro bị nhà cung cấp khóa.
Nó thực sự không khác gì với các trình biên dịch C và C ++, nơi bạn có nhiều dịch vụ cạnh tranh cũng như tất cả đều tuân thủ tiêu chuẩn C ++.
Tại sao phiên bản thư viện Java EE không đồng bộ với các bản phát hành thư viện Java tiêu chuẩn (Java EE 6 so với Java 7)
Java EE được xây dựng trên Java SE, vì vậy nó bị tụt hậu. Các phiên bản tương ứng với nhau. Java EE 5 yêu cầu Java SE 5. Java EE 6 yêu cầu Java SE 6, v.v. Chỉ là hầu hết khi Java SE X hiện tại, Java EE X-1 là hiện tại.