Tôi đọc this và this có phần liên quan đến câu hỏi của tôi. Nhưng tôi đã xem qua bài viết this nói rằng EJB có thể được đóng gói trong một tệp chiến tranh. Nếu đây là trường hợp, tại sao có một nhu cầu cho một tai? Một lời giải thích với một ví dụ sẽ được đánh giá cao.Tại sao sử dụng tai thay vì chiến tranh?
Trả lời
Sử dụng EAR hoặc WAR phụ thuộc vào máy chủ bạn muốn triển khai, ứng dụng và tùy chọn cá nhân của bạn. Từ Java EE6, bạn có thể đóng gói các EJB của mình cùng với các servlet khác, jsps, vv vào tệp tin WAR (bạn kết thúc với ứng dụng web mà bạn có thể triển khai chỉ trên máy chủ tương thích java ee 6). Nếu bạn đóng gói ứng dụng theo cách cũ với ejbs trong gói riêng và chiến tranh riêng, bạn có thể sử dụng máy chủ java ee 5 nếu bạn chưa sử dụng các tính năng khác của java ee6 trong ứng dụng của mình, bạn có thể tách riêng các triển khai EJB và WAR của bạn để có sự tách biệt rõ ràng về lớp doanh nghiệp của bạn (EJB) và chế độ xem của bạn (Servlets, JSP, v.v.).
Sử dụng một EAR dành một tách sạch giữa kinh doanh (thường là stateless EJB đậu cung cấp/dịch vụ db liên quan đến back-end và có thể về nguyên tắc được sử dụng bởi khách hàng phi web) và front-end (xhtml tệp, hạt sao lưu JSF, v.v.).
tôi thường theo các quy ước dưới đây, cho một dự án nào đó, nói "foo":
- foo-ejb.jar có đậu EJB
- foo-client.jar xác định giao diện của đậu EJB ('client 'có thể là một cái tên nhầm lẫn,' foo-if.jar 'hoặc' foo-api.jar' có thể là tên tốt hơn)
- foo-war.war có tài nguyên web
Building foo-war.war chỉ yêu cầu foo-client.jar
Building foo-ejb.jar chỉ yêu cầu foo-client.jar.
Cấu trúc trong EAR là:
foo.ear
|
|-- foo-war.war
|
|-- foo-ejb.jar
|
\-- lib
|---- foo-client.jar
|
\---- (other common jars)
Có lẽ một cách để có một tách sạch tương tự như khi mã của bạn được triển khai như một WAR nhưng ở trên là những gì tôi đang sử dụng và dường như làm việc đối với tôi (tôi đang mở để gợi ý tất nhiên).
Nền tảng Java EE sử dụng mô hình ứng dụng đa nhiệm phân tán cho các ứng dụng doanh nghiệp. Logic ứng dụng được chia thành các thành phần theo chức năng và các thành phần ứng dụng tạo nên một ứng dụng Java EE được cài đặt trên các máy khác nhau, tùy thuộc vào tầng trong môi trường Java EE đa nhiệm mà thành phần ứng dụng thuộc về.
Hình ảnh dưới đây cho thấy hai ứng dụng Java EE đa nhiệm được chia thành các tầng được mô tả trong danh sách sau. Các phần ứng dụng Java EE được hiển thị trong hình ảnh này được trình bày trong các thành phần Java EE.
Các thành phần cấp khách hàng chạy trên máy khách.
Các thành phần cấp web chạy trên máy chủ Java EE.
Các thành phần cấp doanh nghiệp chạy trên máy chủ Java EE.
Phần mềm hệ thống thông tin doanh nghiệp (EIS) chạy trên máy chủ EIS
.
Mặc dù một ứng dụng Java EE có thể bao gồm tất cả các tầng thể hiện trong hình 1-1, các ứng dụng Java EE multitiered được thường được coi là ba tầng ứng dụng bởi vì chúng được phân phối trên ba địa điểm: máy client, Java Máy chủ EE và cơ sở dữ liệu hoặc máy kế thừa ở mặt sau. Các ứng dụng ba tầng chạy theo cách này mở rộng mô hình máy khách và máy chủ hai tầng tiêu chuẩn bằng cách đặt một máy chủ ứng dụng đa luồng giữa ứng dụng khách và lưu trữ phía sau.
Vì vậy, thường chúng ta muốn có 2 hoặc 3 lớp tách:
-EAR (E nterprise Application AR chive)
-EJB (E nterprise J ava B eans)
.210-WAR (W ebAR chive)
và đôi khi JPA (J ava P ersistance Một PI)
Tôi hy vọng bạn thấy hữu ích, Cảm ơn này.
- 1. Làm thế nào để Maven chạy chiến tranh: phát nổ nhưng không chiến tranh: chiến tranh
- 2. nén maven yui về chiến tranh: chiến tranh
- 3. Tại sao nên sử dụng Function.prototype.bind thay vì Function.prototype.call?
- 4. Tại sao sử dụng registerDefaults: thay vì setValue: forKey :?
- 5. tại sao nó sử dụng movl thay vì đẩy?
- 6. Tại sao RTP sử dụng UDP thay vì TCP?
- 7. Tại sao sử dụng singleton thay vì lớp tĩnh?
- 8. Tại sao sử dụng ROLAP thay vì MySQL đơn giản?
- 9. Tại sao sử dụng Enums thay vì Constants?
- 10. Tại sao nên sử dụng GWT.create() thay vì mới?
- 11. Tại sao sử dụng singleton thay vì phương pháp tĩnh?
- 12. Tại sao sử dụng jQuery trên() thay vì nhấp chuột()
- 13. Tại sao UnderscoreJS sử dụng toString.call() thay vì typeof?
- 14. Tại sao memo.Lines sử dụng TStrings thay vì TStringList?
- 15. Android: tại sao phải sử dụng getBaseContext() thay vì
- 16. Tại sao sử dụng char [] thay vì String?
- 17. Tại sao sử dụng var thay vì tên lớp?
- 18. Tại sao sử dụng Celery thay vì RabbitMQ?
- 19. cách tạo tệp tai và bao gồm tệp chiến tranh và tệp jar bên trong đó
- 20. Tại sao sử dụng tăng :: ice_or thay vì || và tăng :: ice_and thay vì && trong enable_if?
- 21. Tìm kiếm các tệp Java jar (tai, chiến tranh, ...) cho lớp/phương pháp
- 22. Thay đổi tên tập tin chiến tranh trong sbt 11.2
- 23. Gốc bối cảnh ứng dụng Weblog là tên tệp chiến tranh thay vì tên được chỉ định trong weblogic.xml
- 24. gradle: sao chép chiến tranh vào thư mục tomcat
- 25. Tại sao darcs thay vì git?
- 26. Sử dụng trình biên dịch Eclipse thay vì kết quả javac trong vụ tai nạn javadoc
- 27. Tại sao chặn thay vì lặp?
- 28. Tại sao CHỌN 0, ... thay vì CHỌN
- 29. Tại sao FloatBuffer thay vì phao []?
- 30. Tại sao testFixture thay vì TestClass?