我有一个使用JEE 7,JPA 2.1,Wildfly 10.1和Vaadin 8的多模块Maven Web项目,我试图通过在WAR项目中使用核心应用程序组件并导入各种其他模块来保持模块化,例如核心模块(用户/角色管理等),其中包括:
所以部署如下:
然后,当我们添加其他组件时,我们可以混合和匹配不同的部署配置,例如通过将这些api,services和ui jar文件以及如图所示的核心添加到Maven配置文件中的部署来添加记帐模块。
我现在的问题是让JPA扫描lib文件夹中的所有jar文件,以查找persistence.xml中定义的持久性单元的实体。
我不想明确列出所有实体类(或jar文件),因为该集合将针对不同的部署进行更改。
在persistence.xml中将exclude-unlisted-classes设置为false会在EAR中部署时产生所需的行为,但遗憾的是,Vaadin在EAR中部署时效果不佳。它打破了很多CDI功能。
所以我试图通过WAR部署来实现这一点。我已经尝试将persistence.xml包含在WAR的WEB-INF / classes / META-INF文件夹中,并在WAR的WEB-INF / lib文件夹中的单独库jar(在/ META-INF下)中,我发现让它工作的唯一方法是在persistence.xml文件中包含一个空的<jar-file>
元素。
<persistence-unit name="my.persistence.unit" transaction-type="JTA">
<jta-data-source>java:jboss/datasources/ApplicationDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<jar-file></jar-file>
</persistence-unit>
persistence.xml验证器在Eclipse中抱怨这一点,但是当我部署到Wildfly时它可以工作;我的实体很好地从数据库中被发现和检索。
但是我只看到在一个地方提到的这个小技巧,并且找不到任何文件,所以当我不知道我们是不是时,我犹豫是否说“我们已修好它”可能依赖于Hibernate中的bug或其他东西......
有谁知道这是否是该问题的有效解决方案?或者,如果还有其他修复方法,我应该尝试一下吗?
谢谢。