簡體   English   中英

OSGI服務版本控制實踐?

[英]OSGI service versioning practices?

我熟悉OSGI語義版本 - 技術白皮書。 但是,我沒有看到為OSGI服務提出的任何版本控制概念。

簡單的情況:我提供的服務注冊為com.services.payments.PaymentService,其中inslemnts方法void makePayment(Integer amount,String accountNo),我打包為1.0版本。 然后,我用修改后的界面更新服務。 我刪除此方法並添加新方法:makePaymentInDifferentWay(整數金額,字符串accountNo)並將新服務打包為捆綁版本2.0。 在第一個bundle停止后,客戶端將連接第二個服務,並在服務調用時使用CRASH ,因為方法簽名不是二進制兼容的。 在處理java包時,這種情況是完全解決的,但我沒有看到OSGI服務開箱即用的任何版本控制功能。 我錯過了什么嗎? (我知道我可以通過設置像'service.version'這樣的服務屬性來預先設計版本控制方案,並在客戶端通過此屬性過濾提供的服務,或者只是重命名API包或類名,但為什么沒有為該框提供版本控制?也許還有其他一些更為標准的解決方案?也許有一些與服務相關的概念我根本沒有掌握?)

客戶端應該在其Import-Package語句(或Require-Bundle)語句中具有版本,例如:

Import-Package: com.services.payments;version="[1.0,2.0)"

該服務將導出包:

Export-Package:  com.services.payments;version="1.0.0"

停止第一個捆綁並安裝第二個捆綁后,客戶端將無法解析(因為所需的約束, com.services.payments;version="[1.0,2.0)"將不會得到滿足。

此外,如果您有兩個API包,一個包版本為“1.0.0”,第二個版本為“2.0.0”,客戶端導入“1.0.0”API,客戶端將不會“看到”服務實現API版本“2.0.0”。

服務的類型和類型都在包中。 因此,服務的版本是包含服務類型的包的版本。 當客戶端使用與服務提供者相同的服務類型包時,OSGi框架確保僅向客戶端公開服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM