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

Persistence context scope in a ejb j2ee and other questions

对于冗长的问题,我深表歉意。

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

问题 1: 我首先在 EJb1 项目的 META-INF 文件夹中创建了一个 persistence.xml,这有助于我将 entitymanager 注入到会话 bean 并开始工作。 (下面的代码)

@PersistenceContext(unitName = "ejbPersistanceunit")
private EntityManager em;

Ejb2 中,我创建了另一个会话 bean 并像上面一样注入了实体管理器(这里我 did not 配置了 persistence.xml)但是当我从客户端调用时,我从 Ejb1 和 Ejb2 项目获得响应。

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

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

问题3:Ejb 3.0不再有正确的home和remote接口?

Why does the EntityManger get shared between two ejbprojects?

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

If my Ejb2 project needs another persistence.xml for a different data source, do I create another one or have it included in the existing persistence.xml? will it also be shared ?

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

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

  1. 如果 beans 访问由相同服务的实体 persistenceUnit/Datasource 打包在一起然后我会创建 2 persistence.xml 与关联的 PersistenceUnit 在 2 个罐子
  2. 如果隔离设置为 false,那么我可以定义我的 persistence.xml 上面或者我会在单个中定义 2 persistenceUnit persistence.xml 并确保罐子与 Persistence.xml 先部署

Does my Web1 project also get hold of the Entitymanager in the same way?

是的,您可以访问 persistenceContext

注意:我假设你的应用程序服务器是 JBoss

I have sessionbeans in Ejb1 project and their remote interfaces are created in Web1 project but what is the best approach in exposing these newly created Entities/Interfaces in an ejb project? (For more than one Ejb project in an Enterprise application)

据我所知,这取决于您的系统架构/设计。如果我是你,我会把我的远程接口和 Bean 打包在同一个 EJB-Jar 中,我会使用查找 EJB bean 的业务委托,或者当远程接口在网络中可见时,我会在web层并使用它。

Ejb 3.0 no longer have the home and remote interfaces correct?

没有称为 home 和 remote 的接口,但概念仍然以注释的形式存在 @Remote & @Local,这意味着您定义接口并且可以在接口中声明 @Remote or @Local级别或 Bean 级别。