在我当前的应用程序中,我想通过用户界面在运行时创建和配置osgi服务。我研究过OSGi Metatype规范,但它只支持简单的类型属性。动态创建和配置具有依赖关系的OSGi服务
所以我的问题是:是否有一个很好的理由有属性类型不支持,如其他OSGi服务,没有人知道一个已经存在的项目,做这样的事情?
UPDATE
为了进一步澄清我的问题:
什么我想要做的是创造,并根据需要通过软件的用户配置新的服务。如果将新的服务接口添加到系统中,这应该甚至可以工作。
让我们假设我有一个服务接口,用于发送通知
public interface NotificationService {
void notify(Notification n);
}
和用于发送通知到例如一个实现推特。通过Metatype规范,我可以编码Twitter服务需要用户名和密码的信息。这使我可以在运行时动态创建一个用于创建新的twitter通知服务的UI。
这适用于简单的数据类型,但元类型规范不处理依赖于其他服务。例如。可以说Notification
具有文件附件,因此Twitter服务需要FileUpload服务来存储文件。
我试图通过一个例子来阐明我的问题。我希望这有助于理解我想要做什么。 – crazymaik 2010-07-22 13:57:03
举个例子。 Metatype服务不能帮助您,我认为这与您设想的用例不太匹配。你可以做的是拥有一个简单的字符串值属性,并提供特定文件上传服务的可用选项(当然,这些服务之间的硬编码依赖关系 - 如果您使用新的文件上传服务添加捆绑软件,会发生什么情况?)然后使用ServiceTracker获取具有自定义属性过滤器的服务。 我认为使用自己的元数据描述系统(使用注释!)会更好地为你工作。甚至是Eclipse注册表。 – 2010-07-22 15:17:27
只是想知道这是否回答了crazymaik的原始问题。 – 2010-08-08 10:10:55