如何在耳朵之间注入EntityManager

时间:2010-07-02 18:13:39

标签: java jpa jboss java-ee ejb-3.0

我正在使用JBoss 4.2.3并且我部署了两个名为triad-1.0.earreportservices-1.0.ear的耳朵,问题是我想在项目reportservices中使用项目三元组的实体管理器。这是JBoss遵循的架构:

triad-1.0.ear:
             triad-core-1.0.jar:
                                META-INF:
                                         MANIFEST.MF
                                         components.xml
                                         ejb-jar.xml
                                         jboss.xml 
                                         persistence.xml    
reportservices-1.0.ear:
              reportservices-core-1.0.jar:
                                          META-INF:
                                                  MANIFEST.MF
                                                  components.xml
                                                  ejb-jar.xml
                                                  jboss.xml
                                                  persistence.xml

这是我尝试在persistence.xml中使实体管理器在ear之间全局化:

<?xml version="1.0" encoding="UTF-8"?>
<!--
     Attention: Generated code! Do not modify by hand!
     Generated by: persistence.xml.vsl in andromda-ejb3-cartridge.
-->
<persistence 
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
                        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">
    <persistence-unit name="triad">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/jdbc/triad</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
            <property name="jboss.entity.manager.jndi.name" value="java:/triadFactory"/>
            <property name="jboss.entity.manager.factory.jndi.name" value="java:/triadFactory"/>
        </properties>
    </persistence-unit>
</persistence>

2 个答案:

答案 0 :(得分:0)

我很抱歉,但在我看来这个问题没有多大意义(我甚至没有明白你的意思“公开persistence.xml”)。以防万一,有可能:

  • 在多个持久性单元中使用相同的数据源。
  • (重新)在多个应用程序中使用持久性单元(前提是包装使其成为可能)。

我的建议是用简单的英语解释你想做什么(暂时忘记技术细节)。

答案 1 :(得分:0)

我终于用注入解决了mi问题,你需要在persistence.xml中设置这个属性并检查jboss jmx控制台,在jdni视图的选项中如果注入是正确的,这里的属性是持久性的一个例子。 XML

<persistence  xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="example">  
        <provider>org.hibernate.ejb.HibernatePersistence</provider>  
        <jta-data-source>java:/jdbc/example</jta-data-source>  
        <properties>  
            <property name="hibernate.hbm2ddl.auto" value="update"/>  
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>  
            <property name="jboss.entity.manager.jndi.name" value="java:/example"/>  
            <property name="jboss.entity.manager.factory.jndi.name" value="java:/example"/>  
        </properties>  
    </persistence-unit>  
</persistence>`

允许注入的属性是“jboss.entity.manager.jndi.name”和“jboss.entity.manager.factory.jndi.name”

注意数据的名称与数据源的名称相同,但是他的jdni名称在数据源项目的xml中设置了这些名称。