1

我有一个 OSGi 应用程序。每个 OSGi 模块都由一些业务逻辑和数据模型组成。我计划在每次模块第一次启动时进行模式演变。正如我上面提到的,每个模块都包含扩展应用程序核心数据模型的数据模型。因此,我需要在新模块启动之前创建一些新表。

我能想到的唯一解决方案是扩展器模式。换句话说,将有一个名为的模块db-schema-extender,它将等待DbSchemaEvolutionService. 该服务的实现将由愿意扩展应用程序核心数据模型的每个模块提供。当在 OSGi 服务注册表中请求此类实现时,db-schema-extender将调用 DbSchemaEvolutionService.getEntities()方法来获取实体列表,然后db-schema-extender将执行schemaExport(List<Object> entities)创建新模块所需的表。

你有遇到类似问题的经验吗?

你的解决方案是什么?

您如何看待我提出的解决方案?

4

1 回答 1

2

我有类似你的问题的经验。我认为您的解决方案会起作用,但我不知道是否有更好的解决方案。我的解决方案有点不同:我没有提供服务DbSchemaEvolutionService ,而是在MANIFEST文件中添加了一个新标头,该标头列出了该捆绑包包含的所有实体。像您这样的模块db-schema-extender将侦听捆绑启动和停止事件,以从管理实体中添加或删除这些实体。

于 2012-05-18T11:19:55.890 回答