自动扫描WAR文件

时间:2017-11-30 16:39:15

标签: hibernate jpa java-ee vaadin war

我有一个使用JEE 7,JPA 2.1,Wildfly 10.1和Vaadin 8的多模块Maven Web项目,我试图通过在WAR项目中使用核心应用程序组件并导入各种其他模块来保持模块化,例如核心模块(用户/角色管理等),其中包括:

  • core-api(服务接口,JPA实体等)
  • 核心服务(业务和持久性EJB)
  • core-ui(Vaadin UI组件,如@CDIView类,菜单构建器ejbs)

所以部署如下:

  • 核 - web.war中
    • WEB-INF /
      • beans.xml(空)
      • classes /(单个Vaadin UI类,没有别的)
      • LIB /
        • persistence.jar(资源库只有META-INF / persistence.xml)
        • 芯api.jar文件
        • 芯services.jar
        • 芯ui.jar
        • (Vaadin和其他各种图书馆罐子)

然后,当我们添加其他组件时,我们可以混合和匹配不同的部署配置,例如通过将这些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或其他东西......

有谁知道这是否是该问题的有效解决方案?或者,如果还有其他修复方法,我应该尝试一下吗?

谢谢。

0 个答案:

没有答案