tôi có một yêu cầu mà tôi cần phải tải lại gói osgi của tôi 4 lần một ngày. Tải lại một gói có nghĩa là tạo lại các cá thể tĩnh Beans, tải lại các tuyến lạc đà, tạo lại và tiêm các luồng luồng, các pool kết nối cơ sở dữ liệu ..etc (các công cụ spring xml khác). Tôi đã cố gắng để làm mới bó của tôi thông qua ssh nhưng tôi cần id của gói cho rằng có thể thay đổi thêm giờ. Vì vậy, tôi đã viết một Bundle Manager mà nhận được bó bằng tên mang tính biểu tượng và làm mới chúng 4 lần một ngàyVấn đề với việc cập nhật gói osgi
osgi impl : felix
container : apache-servicemix-4.4.1-fuse-03-06
Service Dependency spec : Blueprint
Có 3 bó cùng với một bó helper .Công bó helper có tất cả các lớp thường được sử dụng và dịch vụ giao diện. Không có mã chia sẻ giữa 3 gói này (Không ai trong số họ xuất bất kỳ gói nào). Tất cả chúng đều tương tác thông qua các điểm cuối và dịch vụ của lạc đà vm. Tôi chỉ làm mới 3 gói và gói trợ giúp khác không cung cấp bất kỳ dịch vụ nào. Bây giờ, vấn đề là khi bao giờ tôi làm một bản cập nhật trên 3 bó họ bắt đầu và làm việc tốt, nhưng tôi thấy tăng 800-900 lớp học trên jconsole mỗi khi tôi làm điều này. Buộc gc cũng không có vẻ để làm sạch các đối tượng này. Vậy, những vật thể có dây cũ này có thể là gì? Dịch vụ phụ thuộc nên được cập nhật tự động và không có sự phụ thuộc mã giữa các bó. Tôi đã kiểm tra sự khác biệt về số lượng các lớp sau và trước khi cập nhật.
tôi có thể thấy rằng số lượng của một số lớp học đã tăng gấp đôi như org.apache.activemq.camel.component.VmComponent, org.apache.commons.dbcp.BasicDataSource ..etc và một số đậu tùy chỉnh mà tôi đã được xác định trong các tuyến đường lạc đà của tôi. Tôi phụ thuộc vào container cho lõi lạc đà, kế hoạch chi tiết, thạch anh ... vv. Chính xác những gì sẽ xảy ra với các hạt cà phê, thiết bị đầu cuối VM..vv trong ngữ cảnh lạc đà và các thành phần được xác định trong bản thiết kế cấu hình của xml khi cập nhật. Tôi biết bạn nên gọi FrameworkWiring.refreshBundles() khi bạn cập nhật gói. Nhưng, tôi không có mã chia sẻ giữa bó và tôi giả sử bất kỳ container phụ thuộc khác nên xử lý mà tôi nghĩ là sai bây giờ. Và tôi không chắc chắn nếu thực hiện khung felix hiện tại trong servicemix hỗ trợ FrameworkWiring.refreshBundles() (ref), tôi đã không thể làm cho nó hoạt động. Làm thế nào tôi có thể khắc phục vấn đề này?
Cảm ơn sanre6
Bạn có chủ đề từ phiên bản gói cũ treo xung quanh không? – artbristol
có, số lượng của họ đã tăng gấp đôi. Bạn đang cố gắng nói rằng tôi phải đóng các bản sao của mình, tắt các tuyến đường lạc đà trước khi cập nhật gói? – sanre6
Chúng tôi đã tìm thấy cùng một vấn đề. Chuyển sang thực hiện equinox làm cho vấn đề này biến mất, sau đó tôi nghi ngờ một vấn đề với container Felix OSGI. –