在Glassfish服务器上跨EAR共享(JPA)业务实体

时间:2014-10-24 18:22:56

标签: java-ee jpa glassfish java-ee-6 glassfish-3

我在glassfish 3.1.2实例中部署了几个EAR。我希望能够将EAR A中的BE交给EAR B中的类 - 这意味着B类可以更新BE。

这甚至可能吗?如何配置persistence.xmls使其工作?

我在网上找到的所有信息都集中在一个应用程序(耳朵)中模块之间的共享(jar,war)。我想在不同的耳朵之间分享模块(耳朵B中的战争A从耳朵D中的罐子C中取出BE)。

更新 我怀疑自己,我想在这里实现的是良好的设计或最佳实践。整个故事是我正在将一个应用程序从JEE5和Weblogic 10迁移到Glassfish 3上的JEE6。它曾经在旧环境中运行良好,没有任何特殊设置。现在,Glassfish“将”传递给另一个EAR中的类的BE的所有值“空”。

如果我将所有罐子和战争包装在一个EAR中它运行正常,但我松开了预期的包装结构。我希望在不删除两个组件的底层耦合的情况下可能有一种方法。

2 个答案:

答案 0 :(得分:0)

您可以将实体打包到实用程序jar中,并让双耳在其lib文件夹中包含此jar。

对于每个persistence.xml,您可以使用<jar-file>元素来包含实体。

例如

 <persistence version="2.0" 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_2_0.xsd">
    <persistence-unit name="xxx">
        <provider>org.hibernate.ejb.HibernatePersistence</provider> 
        <jta-data-source>xxx</jta-data-source>      
        <mapping-file>META-INF/orm.xml</mapping-file>
        <jar-file>lib/entities.jar</jar-file>       

        <properties>
            xxx
    </persistence-unit>
</persistence>

之后,您可以使用远程ejb查找来传递实体。

不确定如果我会建议这个..你需要分享确切的实体吗?你不能使用dto并将持久性的责任委托给一个应用程序吗?

希望它有所帮助!

答案 1 :(得分:0)

我会告诉你我的项目结构,我有几个。战争和EJB模块共享所有人。

首先:必须创建一个项目库,您应该在其中声明EJB远程接口和实用程序类(例如:clintLib.jar)。

second :在EJB模块中,必须使用clientLib.jar作为lib。添加您的实体。

第三:在war模块中,您必须将clientLib.jar用作lib。

通过这种方式,您可以通过clientLib.jar中声明的远程接口从任何war中访问EJB模块。 EJB容器将使用透明的方式提供对查找EJB实例的访问。我的app结构是:3 war 1库项目1 EJB项目