Tôi hiểu rằng giao diện cục bộ được thiết kế cho các máy khách trong cùng một cá thể JVM của container và giao diện từ xa được thiết kế cho các máy khách nằm ngoài JVM của thùng chứa EJB. Làm thế nào về ứng dụng web khách hàng mà không phải là cư trú (hoặc đóng gói) trong cùng một .ear nhưng cư trú trên cùng một máy chủ Java EE?EJB3 Giao diện cục bộ và từ xa
Trả lời
Chính thức @Local
đậu được chú thích chỉ có thể truy cập được nếu chúng ở trong cùng một ứng dụng. Awar được triển khai tách biệt với một .ear (hoặc khác .war hoặc khác .jar EJB) là một ứng dụng khác, ngay cả khi được triển khai cho cùng một cá thể máy chủ ứng dụng.
Do đó, không có đảm bảo rằng mã trong .war của bạn có thể gọi @Local
đậu EJB được xác định trong .ear.
Tuy nhiên, trong thực tế, gần như tất cả các máy chủ ứng dụng này chỉ hoạt động.
Có một yêu cầu các EJB 3.2 spec để hỗ trợ chính thức cuộc gọi qua ứng dụng địa phương: http://java.net/jira/browse/EJB_SPEC-22
Tôi cảm thấy hơi buồn khi là người duy nhất bình chọn về tính năng này ... Mọi người - cảm thấy tự do tham gia và chỉ cần nhấp vào 'bỏ phiếu' trên yêu cầu JIRA này ;-) –
Có thể khá khó để có 100% làm việc các cuộc gọi chéo (cross ClassLoader!). Hãy để ClassLoader 1 có lớp A và ClassLoader 2 có lớp A (một bản sao khác). Đối tượng truyền A qua giao diện cục bộ sẽ gây ra ClassCastException vì có hai bản sao của cùng một lớp. Một EAR có ClassLoader đôi khi bị cô lập. –
Có, lớp cách ly tải có thể là vấn đề ở đây. Nó sẽ vẫn làm việc cho các lớp từ JDK và có thể cho các lớp (giao diện) từ AS (tùy thuộc vào cách AS thực hiện mô đun hóa của những cái đó). Nhiều người dùng có lẽ sẽ không hiểu được giới hạn này và nó có thể trở thành một trong những người chơi trò chơi mới trong Java EE. –
Bạn sử dụng giao diện từ xa, nhưng bạn thực hiện tra cứu bằng cách sử dụng JNDI (đó là cách tôi làm), theo cách này bạn tìm thấy thể hiện của EJB trong máy chủ và có thể sử dụng nó trong ứng dụng web của bạn.
Mặc dù bạn vẫn cần một cái lọ có giao diện EJB trong dự án ứng dụng web.
EDIT và tôi đồng ý với JB Nizet, tại sao bạn muốn WAR bên ngoài EAR?
Bạn có thể muốn triển khai nó một cách riêng biệt vì lớp tải shenanigans. –
Giao diện từ xa có thể được gọi qua các ứng dụng, từ mọi nơi trong máy chủ ứng dụng cũng như từ bên ngoài, ngay cả từ các máy chủ khác.
Giả sử bạn cần giao diện từ xa (@Remote
). Trong EJB 3.1 bạn có thể sử dụng tiêm phụ thuộc.
Giao diện cục bộ sẽ được sử dụng trong giao tiếp trong cùng một ứng dụng . Nó không nhất thiết có nghĩa là JVM.
Vấn đề là: ngay cả trong cùng một trường hợp JVM, trên cùng một máy chủ, hai ứng dụng khác nhau không thể giao tiếp bằng giao diện cục bộ (có nghĩa là giao diện cục bộ và không có giao diện).
Nếu bạn có thành phần web (WAR) cũng như thành phần kinh doanh (EJB-JAR) trong cùng một ứng dụng, giải pháp trực quan và đơn giản nhất là gói chúng trong một EAR hoặc trong một WAR (Java EE 6).
Có nhưng đây chỉ là lý thuyết. Trong thực tế, bạn có một ứng dụng lớn với nhiều WAR (tức làứng dụng cổng đối tác, khách hàng và quản trị), gọi các EJB giống nhau. Vì lý do triển khai/ít thời gian ngừng hoạt động, bạn muốn gói riêng các WAR này, như nhiều người làm. – bozo
Đồng ý - Tôi cũng không thích ý tưởng này và cách tiếp cận EAR rườm rà, nhưng đó là giải pháp được đề xuất chính thức. –
Đừng khiến tôi bắt đầu với những người JEE. Toàn bộ điều là một dự án an ninh công việc. Chúng tôi đã sử dụng nó trong các dự án phức tạp trong nhiều năm, và tôi phải nói rằng chúng tôi đã làm việc hiệu quả hơn gấp 10 lần trong PHP. Nhưng ngày nay PHP là "uncool" với nhiều người chứng nhận khác nhau, và bạn phải có một giấy chứng nhận bán giấy vệ sinh ngày hôm nay, vì vậy tất cả chúng ta phải chịu bullsh bullsh * t mà không làm bất cứ điều gì đúng cách. Nó làm tôi nhớ đến F-35. ;) – bozo
- 1. Giao diện cục bộ/từ xa và không có giao diện trong EJB là gì?
- 2. Bao gồm thư viện javascript cục bộ và từ xa
- 3. Lưu tệp cục bộ và từ xa trong Aptana Studio
- 4. NSIncrementalStore - Sử dụng dữ liệu cục bộ và từ xa
- 5. Quy ước tiêu chuẩn hoặc thực hành tốt khi đặt tên giao diện cục bộ/từ xa của EJB?
- 6. EJB3 giao dịch Tuyên truyền
- 7. TFS không đồng bộ giữa cục bộ và từ xa - cách "đồng bộ hóa lại"?
- 8. Ngoại lệ "đối tượng từ xa thực hiện giao diện từ xa bất hợp pháp"?
- 9. Đặt lại repo cục bộ giống hệt repo từ xa
- 10. Gửi luồng cục bộ tới nhiều đối tác từ xa
- 11. jqGrid Dữ liệu từ xa, Sắp xếp cục bộ
- 12. Giao diện người dùng - Màu sắc và bố cục
- 13. IP liên kết cục bộ và toàn cầu trên giao diện IPv6
- 14. Làm thế nào có cả biến cục bộ và từ xa bên trong lệnh SSH
- 15. EJB Giao diện cục bộ/từ xa trong các ứng dụng riêng biệt trong một cá thể máy chủ ứng dụng đơn lẻ
- 16. Chạy kiểm tra giao diện người dùng được mã hóa từ xa
- 17. Giao diện với máy tính từ xa bằng cách sử dụng Python
- 18. NSURLConnection, NSURLYêu cầu và bộ nhớ đệm từ xa
- 19. Có thể gắn bộ nhớ từ xa vào hệ thống tệp cục bộ của iOS không?
- 20. Chạy tập lệnh php (từ xa) từ tập lệnh python (cục bộ)
- 21. Cập nhật tổng thể cục bộ cho chủ từ xa từ một chi nhánh khác
- 22. Giao diện và các phương thức không đồng bộ
- 23. Đẩy từ kho lưu trữ cục bộ sang GitHub được lưu trữ từ xa
- 24. kết xuất mysql vào tệp cục bộ outfile từ cơ sở dữ liệu từ xa
- 25. DTO và giao diện
- 26. AutoFixture và giao diện
- 27. Đồng bộ hóa cơ sở dữ liệu MySQL từ xa và cục bộ bằng cách sử dụng phpMyAdmin
- 28. Tôi có thể kết hợp bộ dữ liệu cục bộ và từ xa trong truy vấn SPARQL không?
- 29. SQL Server SMO sao lưu cục bộ từ máy chủ từ xa
- 30. MySQLDump tới máy cục bộ từ máy chủ từ xa được kết nối qua SSH
Tại sao không đặt webapp trong EAR giống nhau không? Điểm của một EAR chính xác là chứa cả phần web và EJB của một ứng dụng. –
Bạn có nghĩa là gì bởi cùng một máy chủ J2EE'? Nó được triển khai trên cùng một trường hợp, trong cùng một tên miền? – jFrenetic
EAR được duy trì và triển khai riêng và WAR khác muốn sử dụng một số phương thức kinh doanh từ ejb cư trú trong EAR. Máy chủ J2EE có nghĩa là chúng sẽ được triển khai trên cùng một cá thể. – Thurein