如何在EAR中的ejb模块和Web模块之间共享Persistence.xml?

时间:2011-04-08 00:20:57

标签: hibernate spring jpa maven

我们有一个EAR应用程序,其中包含一个ejb模块,其中包含所有enity bean以及很少的会话bean和pojos。它有一个persistence.xml。现在还有其他的web模块是spring mvc app,它在ejb模块中使用实体bean。现在使用jpa我也必须在web模块中创建一个persistence.xml。但它与我们在ejb模块中已有的重复。有什么方法可以只保留一个persistence.xml,并将在ejb和web模块中使用。有人可以给我一个简单的项目结构作为例子。只是为了知识,我们正在使用maven。

由于

3 个答案:

答案 0 :(得分:3)


您可以将persistence.xml与实体类一起放入一个单独的jar中,该jar放在EAR的/ lib文件夹中。

yourEar.ear
    |
    |_ yourEjb.jar
    |
    |_ yourWeb.war
    |
    |_ lib
        |
        |_ yourPersistence.jar
               |
               |_ META-INF/persistence.xml
               |
               |_ yourEntity.class

答案 1 :(得分:0)

以下是我的persistence.xml和applicationContext.xml的示例 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd”     版本= “1.0” >

<persistence-unit name="acme" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/acmeDS</jta-data-source>
    <properties>
        <property name="hibernate.hbm2ddl.auto" value="none" />
        <property name="hibernate.show_sql" value="true" />
        <property name="jboss.entity.manager.factory.jndi.name" value="persistence-units/acmeManager"/>
         <property name="jboss.entity.manager.jndi.name" value="persistence-units/acme"/>
    </properties>
</persistence-unit>

和Spring context.xml

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence-units/acme" />
<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

答案 2 :(得分:0)

我很难用Maven实现这个。如果您将使用Maven打包您的项目,则以下设置将共享ejb和Web模块之间的依赖关系(耳朵中的任何内容的依赖关系定义为<type>jar</type>)在您的ear文件的/ lib目录中:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <configuration>
        <defaultLibBundleDir>lib/</defaultLibBundleDir>
    …
</plugin>