在OSGi包启动/停止后执行模式演变

时间:2012-05-18 08:58:20

标签: database-design osgi

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

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

你有类似问题的经验吗?

你的解决方案是什么?

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

1 个答案:

答案 0 :(得分:2)

我有类似于你的问题的经验。 我认为您的解决方案可行,但我不知道是否有更好的解决方案。 我的解决方案略有不同:我没有提供服务 DbSchemaEvolutionService ,而是在 MANIFEST 文件中添加一个新标头,列出该软件包包含的所有实体。 像你这样的模块 db-schema-extender 将监听bundle start和stop事件,以便从管理实体中添加或删除这些实体。