0
A
回答
1
這聽起來像你正在尋找一個插件模型,並選擇OSGi沒有閱讀如何做到這一點?
如果你想在OSGi中創建一個插件模型,那麼你可以使用服務。服務定義了捆綁之間的合同。所以在這種情況下,你的Core Bundle有很多地方你的業務邏輯可以「插入」。對於每個這些地方,您需要定義服務合同。服務契約由Java包定義,通常需要一個或多個接口。
現在在您的Core Bundle中,您將有組件。這些組件在OSGi中執行實際的工作。要在組件中使用插件,組件取決於插件服務。
因此可以說你有一個組件需要知道產品的價格,但價格可能來自eBay,亞馬遜或阿里巴巴。因此,我們首先設計服務合同:
public interface SupplierPlugin {
Set<Product> findProducts(String query) throws Exception;
boolean buy(String id, String count) throws Exception;
String getSupplierId() throws Exception;
}
public class Product extends DTO {
public String supplier;
public String id;
public String name;
public String description;
public Price price;
public int inStock;
public Duration deliveryTime;
}
那麼,這如何看在你組件?
@Component
public class OrderProduct implements REST {
@Reference
volatile List<SupplierPlugin> suppliers;
public Product findProducts(String query) {
Product cheapest=null;
return suppliers.stream()
.flatMap(supplier -> supplier.findProducts(query))
.sorted((a,b) -> a.price.compareTo(b.price))
.first();
}
public boolean buy(String supplier, String productId) {
return suppliers.stream()
.filter(supplier ->
supplier.getSupplierId().equals(supplier))
.map(supplier -> supplier.buy(productId))
.findFirst();
}
}
那麼如何實現SupplierPlugin?
@Component
public class TestSupplier implements SupplierPlugin {
@Reference
DTOs dtos;
static Product[] products = {
};
@Activate
void activate() {
InputStream in = TestSupplier.class
.getResourceAsInputStream("products.json");
products = dtos.decoder(Product[].class).get(
}
public Set<Product> findProducts(String query) {
return Streams.of(products)
.filter(product -> product.description.contains(query))
.collect(Collectors.toSet());
}
}
所以你的術語和寫在OSGi的插件實際的方式之間的關鍵區別是非常簡單的事實,捆綁或多或少無形。這項服務的設計是100%。
我已經採取了這個問題,並創建了一個小應用程序來演示這些概念。你可以在OSGi enRoute Examples repository
相關問題
- 1. 需要OSGi伴隨包嗎?
- 2. 創建wordpress插件 - 全局和包含文件需要它
- 3. 需要幫助創建jquery插件
- 4. Symfony - 創建插件需要什麼?
- 5. 如何創建JPA OSGI包
- 6. 如何創建OSGI包?
- 7. 需要在osgi中創建web應用程序
- 8. 需要在兩個效果之間創建一個延遲Wpf
- 9. 爲什麼dot需要在子域之間創建一個cookie?
- 10. 如何在OSGi容器中的軟件包之間共享非OSGi庫?
- 11. 構建OSGi包包括與Maven的組裝插件依賴性
- 12. 需要幫助使用Karaf的功能-maven-plugin maven插件... osgi
- 13. 如何從jar創建osgi包
- 14. 如何從jar庫創建OSGi包?
- 15. 使用Eclipse創建Android OSGI包
- 16. 需要創建一個10和20之間的隨機數
- 17. 需要幫助瞭解行創建方法之間的區別
- 18. PHP包括()創建以HTML不需要的間隙
- 19. 創建connect.php有需要在.htx文件
- 20. 基本highcharts插件,需要刪除點之間的線
- 21. 將軟件包插入osgi失敗
- 22. 需要創建日期時間
- 23. 需要刪除空間來創建URL?
- 24. 創建AMI需要很長時間
- 25. 需要幫助來創建時間槽
- 26. C#對象創建需要時間
- 27. 在wordpress中創建一個插件是包括空白空間
- 28. servicemix中OSGi軟件包之間通信的不同方式
- 29. OSGI軟件包和Web應用程序之間的通信
- 30. OSGi:如何安全地共享軟件包之間的連接
找到它你的問題是什麼? –
如圖所示,我創建了這樣的捆綁包,並希望以傳遞特定業務邏輯的數據的方式來插入這些捆綁包。 –
然後你應該編寫類和函數。 –