DDD,JPA和Multi-Module Maven

时间:2010-11-28 17:28:40

标签: java spring jpa domain-driven-design maven

我正在尝试使用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(persistence.xml,spring-context w / EntityManagerFactory,dataSource等)中的所有jpa内容。我的想法是希望在所有子模块(员工,供应商和客户)之间共享持久性内容。

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

如何在核心中设置所有与持久性相关的内容,然后在其他模块中共享它?

提前致谢。

2 个答案:

答案 0 :(得分:4)

嗯,这是我最终使用的解决方案,以防任何人感兴趣。

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

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

答案 1 :(得分:-2)

如果员工,供应商和客户实体和控制器在逻辑上是分开的,而在单独的模块中需要它们,那么我会说它们应该有自己的entityManager。

如果您想拥有一个Web应用程序和一个实体管理器,那么为什么您希望为每个实体块分别创建模块?只需将员工,供应商和客户置于核心,与实体经理一起完成。

或者,给每个人一个自己的实体管理员,(可能每个人都有自己的webapp)