2010-08-01 20 views
6

Các SessionContext.getBusinessObject() được mô tả trong các tài liệu như sau,Giá trị trả về của SessionContext.getBusinessObject() khác với từ khóa 'this' được sử dụng trong bean như thế nào?

Có được một đối tượng có thể được sử dụng để gọi đậu hiện thông qua giao diện kinh doanh nhất định.

Tham số: businessInterface - Một trong các giao diện doanh nghiệp địa phương hoặc giao diện kinh doanh từ xa cho bean phiên này.

Trả về: Đối tượng kinh doanh tương ứng với giao diện kinh doanh đã cho.

Tôi có thể sử dụng từ khóa 'này' trong Java để thay thế không? Làm thế nào là những khác nhau?

Trả lời

14

Động lực ở đây là phần lớn việc triển khai EJB hoạt động trên proxy. Bạn sẽ không quá xa trong suy nghĩ của nó như AOP trường học cũ. Giao diện nghiệp vụ được thực hiện bởi container EJB, khá thường xuyên thông qua một java.lang.reflect.Proxy đơn giản, và đối tượng này được trao cho tất cả mọi người trong hệ thống, người yêu cầu ejb thông qua tra cứu @EJB hoặc JNDI.

Proxy được nối với vùng chứa và tất cả các cuộc gọi đến trực tiếp đến vùng chứa sẽ kiểm tra bảo mật, bắt đầu/dừng/tạm dừng giao dịch, gọi trình chặn, v.v ... và sau đó ủy quyền cuộc gọi đến bean dụ - và tất nhiên làm sạch bất kỳ yêu cầu do bất kỳ trường hợp ngoại lệ ném - sau đó cuối cùng tay giá trị trả lại qua proxy cho người gọi.

Gọi trực tiếp this.foo() hoặc chuyển 'this' đến người gọi để họ có thể thực hiện cuộc gọi trực tiếp, sẽ bỏ qua tất cả điều đó và vùng chứa sẽ được cắt ra khỏi ảnh một cách hiệu quả. Phương thức 'getBusinessObject (Class)' cho phép cá thể bean lấy bản thân proxy để nó có thể gọi các phương thức riêng của nó và sử dụng các dịch vụ quản lý container liên kết với nó - các trình chặn, quản lý giao dịch, thực thi bảo mật, v.v.

+0

Một lời giải thích rất rõ ràng, David! Cảm ơn ! – stratwine

+0

Có thể ai đó cũng xác nhận rằng bằng cách sử dụng SessionContext.getBusinessObject(), chúng tôi đảm bảo rằng các phương thức @Asynchronous sẽ thực thi trong các luồng khác nhau? –

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