Khi một thể hiện của một dịch vụ OSGi được lấy từ bối cảnh bó không nó trở nên vô hiệu khi dịch vụ dừng lại?
Không, chính tham chiếu không bị vô hiệu. Miễn là một cái gì đó trong container đang giữ nó, nó cũng có thể không được GC'ed.
Tuy nhiên, việc nó có hữu ích hay không, chỉ phụ thuộc vào bản thân việc triển khai dịch vụ chứ không phụ thuộc vào vùng chứa.
Thử nghiệm ban đầu của tôi cho thấy trường hợp dịch vụ có thể được sử dụng ngay cả sau khi gói dịch vụ bị dừng. Điều này mâu thuẫn với sự hiểu biết của tôi về bản chất động của OSGi.
Thông số kỹ thuật tự cho biết rằng các tham chiếu đó không nên được tổ chức, nhưng tùy thuộc vào người thực hiện phải cẩn trọng để triển khai các thông số chính xác; có nghĩa là không có mâu thuẫn, chỉ có thực tế là bạn có thể triển khai và triển khai các gói không hoạt động chính xác theo các thông số kỹ thuật.
Tôi cho rằng điều này nắm những gì lấy một dịch vụ (thông qua ServiceTracker) từ một bó trong container OSGi thực hiện, nó tạo một đối tượng mới hay nó cung cấp cho bạn một con trỏ tới instance mà là đăng ký trong container?
Vùng chứa không tạo trường hợp dịch vụ mới, ngoại trừ trường hợp có ServiceFactory liên quan (xem thông số kỹ thuật). Tìm kiếm một dịch vụ nên luôn cung cấp cho bạn một con trỏ tới cá thể đã đăng ký trong vùng chứa.
Có bất kỳ mối nguy nào trong việc sử dụng cá thể dịch vụ sau khi ngừng dịch vụ không?
Điều đó chỉ phụ thuộc vào việc triển khai dịch vụ; tuy nhiên, bằng cách làm như vậy trong một nhóm, bạn sẽ tự động tạo một gói không phù hợp với thông số kỹ thuật.
Trong thực tế, nhiều dịch vụ được triển khai để giải phóng tài nguyên và tham chiếu và sẽ không phản hồi đúng cách nữa.
Cảm ơn cho câu trả lời, tiếc là không một dứt khoát có hoặc không như tôi đã hy vọng! –