DDD、JPA 和多模块专家

2022-09-04 04:48:55

我正在尝试使用Spring / JPA配置和Maven多模块项目。下面是总体布局。我有一个包含5个子模块的根模块。

backoffice (root maven module)
|
-(maven module)-----core (this is where persistence.xml and entityManager stuff resides).
|
-(maven module)-----employee (employee related entities, controllers, etc.)
|
-(maven module)-----vendor (vendor related entities, controllers, etc.)
|
-(maven module)-----customer (customer related entities, controllers, etc.)
|
-(maven module)-----web (contains all the web stuff).

我在core/src/main/resources/META-INF(持久性.xml,spring-context w/ EntityManagerFactory,dataSource等)中拥有所有jpa的东西。这个想法是我想在所有子模块(员工,供应商和客户)中共享持久性的东西。

问题是,当 Web 应用启动时,它找不到 EntityMangerFactory。如果我在每个子模块(员工,供应商和客户)中设置JPA的东西,那么它就可以工作了。

如何在核心中设置所有与持久性相关的东西,然后在其他模块之间共享?

提前致谢。


答案 1

好吧,这是我最终使用的解决方案,以防有人感兴趣。

http://labs.bsb.com/2010/11/configuring-modular-jpa-applications-with-spring/

一些响应者问我为什么首先要以这种方式设置项目。好吧,原因是模块化。我希望所有东西都装在可测试和可部署的小型单元中。最终,我们将OSGI编织到组合中,以便客户可以选择要安装的模块。每个模块都必须能够自行运行。


答案 2

如果员工,供应商和客户实体以及控制者在逻辑上是如此独立,以至于需要将它们放在单独的模块中,那么我会说,显然他们应该有自己的实体管理器。

如果你想要一个 Web 应用和一个实体管理器,那么为什么你想要为每个实体块设置单独的模块呢?只需将员工,供应商和客户放在核心,与实体经理一起完成即可。

或者,为每个用户提供自己的实体管理器(可能每个用户都有自己的 Web 应用)


推荐