我目前正在测试一个新应用程序的osgi(Spring DM).应用程序需要能够侦听文件系统事件.今天我用一个简单的基于时间的轮询器解决了这个问题,但是当Java 7发布时,我可能想用基于NIO2的实现替换它.
到目前为止,我正在查看三个捆绑包,两个用于文件服务实现,另一个用于使用其中一个服务的业务逻辑.这两个实现应该实现相同的接口,所以我的问题是,在哪里放置该接口?将接口放在包含实现的包中会导致服务依赖于其中一个使用者.
什么是最好的,最像osgi的方式来构建它?到目前为止,我最好的办法是创建一个新的"api"包,定义实现的通用接口.
Separete api-bundle可能是最好的选择.它允许您稍后替换bundle实现.此外,使用单独的api-bundle,您可以热替换当前的捆绑包,而不需要消费者重新启动.
类(和接口)由其名称和类加载器识别.因此,如果将服务接口放在与实现相同的捆绑包中,则会失去热替换正在运行的捆绑包的能力.即使接口具有相同的名称,并且在每种意义上它都是相同的,新部署的bundle具有不同的类加载器=> consumer将新部署的bundle接口视为新类,并且不再满足其依赖性.
有关服务兼容性和版本的更多信息(请参阅注释):http://wiki.osgi.org/wiki/Service_Compatibility
| 归档时间: |
|
| 查看次数: |
2994 次 |
| 最近记录: |