jpa - JEE6 war 打包成几个模块

标签 jpa jar ejb war packaging

我想将部分 WAR 应用程序拆分为不同的 JAR 组件。
每个 JAR 组件都包含 JPA-Entities、EJB 和 JSF-Composite-Components。

示例:将用户管理(XHTML、EJB、JPA-Entities)提取到自己的 jar 中。

起初,只要我不必使用 entityManager,一切看起来都很好。

问题:
在 JAR 文件的 EJB 中,entityManager 永远不会被注入(inject)。

我正在使用 @PersistenceContext 注释进行注入(inject)。

我在所有 META-INF 文件夹中有一个 beans.xml,并且所有内容(entityManager 除外)都已正确注入(inject)。我是否将persistence.xml 放在所有JAR 文件中或仅放在WAR 文件中都没有关系。

有没有人有胶水如何做到这一点?

我必须在哪里放置不同的配置文件(beans.xml、persistence.xml)?

我需要一个 ejb-jar.xml 文件吗?

这可能吗?

技术栈:
JBoss 6.1/PrimeFaces 3.2/Maven/EJB 3.1/休眠/JTA/CDI

最佳答案

在每个包含实体的 jar 中都需要一个 persistence.xml 文件。
每个这样的持久性 xml 都应该定义一个不同的持久性单元。

如果您希望一个持久性单元引用在不同的持久性单元中定义的实体,那么您需要将其作为 jar 文件条目包含在持久性单元定义中(参见下面的示例)。
这适用于我们非常相似的堆栈 JBoss 5.1(然后是 7)/EJB3/Hibernate、Maven、...

http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
版本="1.0">

<persistence-unit name="PersistenceUnitA">
    <jar-file>JarContainingOtherPersistenceUnit</jar-file>
    <jta-data-source>java:/jboss-mysql-ds</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
    </properties>
</persistence-unit>

关于jpa - JEE6 war 打包成几个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14942982/

相关文章:

java - 将程序打包为 jar 后文件输出发生变化

java - 代码分区的好习惯

java - 使用 J2EE 和 Jboss 每次测试后回滚

java - 如何强制重新加载实体?

java - 具有两个抽象类的 JPA 继承

java - 如何使 Maven 插件仅包含必要的依赖项?

java - 组合 JPA、EJB 和 JSF 托管 bean 的首选设计模式是什么?

java - Java JAR 文件是否类似于 .Net 程序集?

jakarta-ee - 具有抽象类继承的 JPA 实体

Java、EJB框架、RBAC