2012-04-18 29 views
7

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

+0

Bạn có chủ đề từ phiên bản gói cũ treo xung quanh không? – artbristol

+0

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

+0

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

Trả lời

0

Tôi không biết nhiều về Camel nhưng nếu bạn đang cung cấp nền tảng này với Runnables mà tham khảo bó lớp, sau đó bạn cần phải chắc chắn tất cả họ đều bị hủy hoặc bị tiêu huỷ trên làm mới, vì các chủ đề mà chúng đang chạy sẽ giữ một tham chiếu đến các cá thể Class cũ (khác với các cá thể Class của gói mới, mặc dù chúng thực sự giống nhau). Do đó, tăng số lượng lớp học.

+0

ứng dụng của tôi phụ thuộc rất nhiều vào các gói servicemix và tôi tin rằng thực hành tốt nhất là cho phép container xử lý các phụ thuộc của bạn, xác định tất cả các phụ thuộc này và xóa chúng sẽ là rất nhiều công việc đau đớn. Tôi thậm chí không chắc chắn bạn có thể loại bỏ lõi osgi hay không và và các phụ thuộc liên quan đến kế hoạch chi tiết trước khi cập nhật một gói – sanre6

1

Nói chung, chỉ gọi một bản cập nhật trên các gói là không đủ. Bạn phải tại một số điểm cũng làm mới gói của bạn. Nếu mọi thứ hoạt động tốt, điều đó là đủ để cập nhật tất cả các gói dây, cho phép các phiên bản cũ của gói được thu gom rác một cách hiệu quả. Tuy nhiên, nếu có thứ gì đó trong một trong các gói không hoạt động tốt và giữ luồng chạy hoặc một số tài nguyên xung quanh trong bộ nhớ cache hoặc một thứ gì đó, bạn phải bắt đầu theo dõi sự cố. Nhận bản thân một trình thu thập thông tin tốt, xem những gì gói và trình nạp lớp các đối tượng "phụ" này thuộc về và đi từ đó.

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