Database design 在OSGi捆绑包启动/停止后执行架构演化

Database design 在OSGi捆绑包启动/停止后执行架构演化,database-design,osgi,Database Design,Osgi,我有一个OSGi应用程序。每个OSGi模块由一些业务逻辑和数据模型组成。我计划在每次新的模块第一次启动时进行模式演变。如上所述,每个模块都包含扩展应用程序核心数据模型的数据模型。因此,我需要在新模块启动之前创建一些新表 我能想到的唯一解决方案是扩展器模式。换句话说,将有一个名为dbschemaextender的模块,它将等待DbSchemaEvolutionService的实现。该服务的实现将由每个愿意扩展应用程序核心数据模型的模块提供。当在OSGi服务注册表中重新注册此类实现时,db sche

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

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

你有类似问题的经验吗

你的解决方案是什么


您认为我提出的解决方案如何?

我有类似于您的问题的经验。 我认为你的解决方案会奏效,但我不知道是否有更好的解决方案。 我的解决方案有点不同:我没有使用服务DbSchemaEvolutionService,而是在MANIFEST文件中添加一个新的头,该头列出了此捆绑包包含的所有实体。
与您类似的模块db schema extender将侦听bundle start and stop事件,以从管理实体中添加或删除这些实体。

谢谢。将实体显化显然比创建
DbSchemaEvolutionService
更好。这是推荐的方法。一个陷阱是,您可能需要在迁移完成之前就开始打包。最好的解决方案是提供模块可以依赖的特殊服务。它的存在将意味着任何移民都已经结束。