2015-05-13 99 views
1

如何在运行时注册/取消注册新实体类(带注释或ORM XML) EMF初始化并创建第一个EntityManager。 我知道类似的问题,例如: Adding entity classes dynamically at runtime创建EntityManagerFactory后注册JPA实体类

水平活力的区别:我们使用可以安装/运行时卸载和可以为自己的数据 contatais实体类OSGI插件。

该功能已经使用JDO/DataNucleus实施,并在生产中工作约3年。但是JDO似乎已经死了(在Apache也是如此)。 DataNucleus的采用率相对较低,只有一名活跃(和优秀)的开发人员(因为项目在很多方面非常有趣而感到难过)。

如何做一些类似于流行的JPA实现?

+1

奇怪的是,我在Apache JDO JIRA上看到JDO 3.2,并且在那里没有看到任何“死”(并且没有JPA 2.2的迹象) –

+1

@NeilStockton thanx评论和您在JDO API上的努力。我分析了邮件列表和Jira活动......不太匹配。你和Andy Jefferson试图推动JDO,但你的努力是不够的。 Personaly我对JDO非常有趣,并且想自己扩展它。不幸的是,我只是**应用程序**架构师,绝对没有时间去开发如此庞大的规格(DataNucleus的一些补丁不算)。 –

回答

0

您不能将类添加到现有的EntityManagerFactory。你应该做的是为每个bundle创建一个持久化单元。因此,在更新包时,您将获得一个新的EntityManagerFactory作为服务。不幸的是,现在的Apache Aries jpa在更新包含持久性单元的捆绑包时存在已知问题。

我正在处理Apache Aries jpa 2.0版本的代码,该代码将能够处理此问题。

+0

我知道**标准** JPA不支持。我要求实现特定的API,比如在DataNucleus或OpenJPA(偏好支持)。 OSGI JPA不能比提供者做得更多。实际上,在实践中,在包中创建EMF并与其他模块(如OSGI服务)共享它比使用OSGI的持久化捆绑包更简单。 –