ejb j2ee中的持久化上下文范围和其他问题

时间:2015-01-12 20:45:10

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

我为冗长的问题道歉。

我正在研究EJB应用程序。我有两个EJB eclipse项目(Ejb1Ejb2)和其他动态Web应用程序(Web1),它们将被编译并添加到父EjbEar项目并打包为{ {1}}文件。

问题1:我首先在EjbEar.ear项目的persistence.xml文件夹中创建了EJb1,这有助于我将实体管理员注入会话bean并开始工作。 (以下代码)

META-INF

@PersistenceContext(unitName = "ejbPersistanceunit") private EntityManager em; 中,我创建了另一个会话bean并注入了与上面相同的实体管理器(这里我Ejb2配置了persistence.xml)但是当我从客户端调用时,我得到了来自Ejb1和Ejb2项目的回应。

为什么EntityManger在两个ejbproject之间共享?如果我的Ejb2项目需要另一个persistence.xml用于不同的数据源,我是否要创建另一个或将其包含在现有的persistence.xml中?它也会被分享吗?我的did not项目是否也以同样的方式获得了Entitymanager?

问题2:我在Web1项目中有sessionbeans,他们的远程接口是在Ejb1项目中创建的,但是在这些新创建的实体/接口中公开这些实体/接口的最佳方法是什么一个ejb项目? (对于企业应用程序中的多个Ejb项目)

问题3: Ejb 3.0不再有家庭和远程接口正确吗?

1 个答案:

答案 0 :(得分:1)

  

为什么EntityManger在两个ejbproject之间共享?

如果您不想要,可以通过isoloting Ejb jar来禁用此共享。如果jboss打开jboss-deployment-structure.xml并将属性ear-subdeployments-isolated设置为true

  

如果我的Ejb2项目需要另一个persistence.xml来获取不同的数据   来源,我是创建另一个还是将其包含在现有的中   persistence.xml中?它也会被分享吗?

这完全取决于你的用例, 如果您的系统中有多个数据源,那么我将基于persistence.xml定义 我打包我的bean访问持久性单元的方式。

如果属于两个数据源的所有实体都打包在一起,那么我将在同一个persistence.xml中定义2个持久性单元 如果它们在2个罐子中以不同的方式包装,则以下任何一种可能性

  1. 如果bean访问由同一服务提供的实体 persistenceUnit / Datasource打包在一起然后我会创建 2个persistence.xml,包含2个罐子中的PersistenceUnit
  2. 如果隔离设置为false,那么我可以定义我的persistence.xml 上面或我将在一个单独中定义2 persistenceUnit persistence.xml并确保罐子里有 首先部署Persistence.xml
  3.   

    我的Web1项目是否也同样拥有Entitymanager   方式是什么?

    是的,您可以访问persistenceContext

    注意:我认为您的应用服务器是JBoss

      

    我在Ejb1项目中有sessionbeans,他们的远程接口是   在Web1项目中创建但是暴露的最佳方法是什么   这些新创建的实体/接口在ejb项目中? (更多   而不是企业应用程序中的一个Ejb项目)

    据我所知,这取决于您的系统架构/设计。如果我是你,我会将我的远程接口和Beans打包在同一个EJB-Jar中,我会使用查找EJB bean的Business Delegate或者在Web中可以看到Remote接口,我会在网络层并使用它。

      

    Ejb 3.0不再具有正确的家庭和远程接口吗?

    没有名为home& amp;的界面远程但概念仍然以注释@Remote & @Local的形式出现,这意味着您可以定义接口,并且可以在接口级别或Bean级别声明@Remote or @Local