我还在研究如何以模块化方式(在 Netbeans 模块系统或 OSGI 容器中)进行 JPA。
您应该注意的一件事是,如果您需要构建一个中央的大型 EntityManagerFactory(通过中央持久性模块),那么如果您的应用程序很大,您可能会遇到一些问题:
如果持久性模块需要对模块启动/关闭事件做出反应,则需要在添加或删除模块时重建中央 EntityManagerFactory。如果应用程序很大(很多类),重建 EntityManagerFactory 会很慢而且成本很高。
应用程序不需要存储对 EntityManagerFactory 的引用,因为如果添加/删除了一个模块,旧的模块就会变得陈旧。应用程序应该使用非常短暂的 EntityManager 并始终获得 EntityManagerFactory。
为每个使用 JPA 的模块构建 EntityManagerFactories 可能更灵活,但这可能需要更多内存并且可能占用更多计算能力,直到为每个模块创建所有 EntityManagerFactories(尽管 EntityManager 工厂可能由您的按需创建中央 JPA 服务)。
如果您在 OSGI 容器中工作,Dynamic-JPA (http://www.dynamicjava.org/projects/dynamic-jpa) 可能会有所帮助。