2012-01-16 29 views
6

Lý do tại sao Máy chủ ứng dụng gộp các EJB không quốc tịch là gì?Tại sao EJB không quốc tịch được gộp lại?

Tôi có thể hiểu rằng rất hữu ích để kiểm soát khối lượng công việc của ứng dụng cho các lần xâm nhập, nhưng điều này chỉ biện minh cho việc gộp nhóm EJB mà máy chủ là CHẤP NHẬN với ứng dụng khách mời.

Liệu có bất kỳ lợi ích nào để gộp các EJB nội bộ (các đối tượng không tiếp xúc và chỉ được gọi nội bộ để thực hiện logic nghiệp vụ) không ?? thay vì sử dụng một cá thể được chia sẻ (giống như Spring).

Tôi có thể nghĩ về ít nhất một nhược điểm: EJB nội bộ được sử dụng rất cao có thể đóng vai trò như một nút cổ chai.

Trả lời

3

Đậu phiên không trạng thái EJB không nhất thiết phải an toàn theo luồng. Họ có thể nắm giữ các tài nguyên như các phiên JMS không thể chia sẻ với nhiều hơn một luồng để máy chủ có thể phân phối chúng để có thể phục vụ nhiều yêu cầu cho cùng một đồng thời (tài nguyên JMS cũng được gộp chung, nhưng tôi chỉ bằng cách sử dụng đó vì lợi ích của ví dụ).

+0

Nếu không có quốc tịch, thì không có trạng thái bị đe dọa bởi sự tương tranh, thì không có điều kiện chủng tộc nào có thể xuất hiện, do đó chúng an toàn chỉ, tôi có sai không? Có, tôi biết họ có một số tiểu bang, giống như các nguồn lực tiêm, nhưng sau đó có lẽ họ không nên được gọi là không quốc tịch! :) tôi lấy câu trả lời đúng. – edutesoy

+0

@edutesoy Tôi đồng ý với lời giải thích của bạn. Nhưng tại sao nhà nước được duy trì sau đó. –

3

Tôi cũng muốn biết tại sao các EJB không quốc tịch được gộp lại. Nhưng tôi muốn biết tại sao chúng được gộp lại thay vì được tạo ra và phá hủy theo yêu cầu. Thực tế là các cá thể có thể được tái sử dụng cho các yêu cầu không liên quan làm phức tạp đáng kể việc thực hiện các bean không trạng thái (nó có nghĩa là bạn phải cực kỳ cẩn thận về việc sử dụng các instance fields), và tôi không thấy bất kỳ lợi ích đáng kể nào.

Cụ thể, tôi không thấy bất kỳ lợi ích hiệu suất nào đối với nó. Tôi poked thông qua việc thực hiện các hạt không quốc tịch trong JBoss (6, IIRC), và chỉ riêng cá thể bean của nó được gộp lại; đường ống dẫn nước để xử lý lời gọi phương thức được tạo lại từ đầu mỗi khi nó được sử dụng. Điều đó có nghĩa là tiết kiệm hiệu suất duy nhất là tạo một đối tượng đơn lẻ, đây là một khoảng thời gian nhỏ. Tình huống duy nhất mà tôi có thể thấy nó là không tầm thường là nếu đậu mua lại tài nguyên nặng, và giữ cho họ giữa các lời gọi. Tuy nhiên, trong trường hợp đó, đậu thực sự được sử dụng như là một hồ bơi, được quản lý kém, được quản lý tốt; giải pháp chính xác sẽ là tập hợp tài nguyên trực tiếp!

Hiện tại, EJB đã có thời gian dài. Quay trở lại khi họ lần đầu tiên xuất hiện, tạo đối tượng là tốn kém, do đó, nó có ý nghĩa để hồ bơi chúng. Nhưng những ngày đó đã qua lâu rồi. Tại sao tổng hợp không bị giảm xuống trong EJB3?

+0

Vâng, tôi cho rằng nếu bạn có hàng nghìn yêu cầu đồng thời, bạn nên gộp chúng lại, hoặc thậm chí nhiều hơn, để tạo chúng thành @Singleton miễn là bạn chắc chắn chúng là an toàn, thay vì có hàng nghìn trường hợp trong bộ nhớ. –

+1

Nếu đậu là luồng an toàn, sau đó có, một singleton là lý tưởng. Nhưng nếu không, tải bộ nhớ từ các trường hợp gộp và ném sẽ giống nhau; các trường hợp gộp lại sẽ thực sự cung cấp cho các nhà sưu tập rác * nhiều hơn * làm việc, bởi vì họ sống đủ lâu để thoát khỏi vườn ươm. –

+0

Đó là một khẳng định lớn. Tôi cho rằng nó phụ thuộc vào thời gian cần thiết cho mỗi yêu cầu để xử lý và do đó thời gian những đối tượng đó tiêu tốn trong hồ bơi. Nếu hầu hết trong số họ có thể được sử dụng tại bất kỳ điểm nào trong thời gian bạn có thể nhận được một số lợi ích trong việc tạo ra/phá hủy. Điều này cũng phụ thuộc vào xu hướng giao thông, vv Đây là phân tích hạt rất tốt IMO :) –

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