2011-12-15 27 views
20

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

+2

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. –

+0

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

+1

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

Trả lời

25

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

+4

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 ;-) –

+0

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. –

+0

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. –

0

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?

+0

Bạn có thể muốn triển khai nó một cách riêng biệt vì lớp tải shenanigans. –

0

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.

4

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).

+2

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

+0

Đồ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. –

+1

Đừ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

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