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

标签 java eclipse jakarta-ee jpa ejb-3.0

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

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

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

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

Ejb2中,我创建了另一个 session bean,并注入(inject)了与上面相同的entitymanager(这里我没有配置persistence.xml),但是当我从客户端调用时,我得到了来自Ejb1和Ejb2项目的响应。

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

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

问题3: Ejb 3.0 不再具有正确的本地和远程接口(interface)吗?

最佳答案

Why does the EntityManger get shared between two ejbprojects?

如果您不想,可以通过隔离 Ejb jar 来禁用此共享。如果jboss打开jboss-deployment-struct.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 个 jar 中,则可能出现以下任何情况

  1. 如果bean访问由相同服务提供服务的实体 persistenceUnit/Datasource 打包在一起然后我会创建 2 个 persistence.xml 以及 2 个 jar 中关联的 PersistenceUnit
  2. 如果隔离设置为 false,那么我可以像这样定义我的 persistence.xml 上面或者我会在一个单一的中一起定义 2 个 persistenceUnit persistence.xml 并确保该 jar 首先部署 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)

据我所知,这取决于您的系统架构/设计。如果我是您,我会将远程接口(interface)和 Bean 一起打包在同一个 EJB-Jar 中,并且我会使用业务委托(delegate)来查找 EJB bean,或者当远程接口(interface)在 Web 中可见时,我会在 Web 层中注入(inject)相同的接口(interface)并使用它。

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

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

关于java - ejb j2ee 中的持久上下文范围和其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910468/

相关文章:

java - 如何从 Micronaut Framework 中的依赖项注册 Controller ?

Android Studio 找不到项目库

eclipse - 在 Eclipse 中以 Debug模式启动 WebLogic 9.2 Managed Server

java - Jboss HDScanner 使用 eclipse 调试器占用 100% = 慢

java - 使用 Java 管理非常长时间的操作

java - 如何在java 1.5中向透明JFrame添加非透明组件?

java - JOptionPane 输入对话框和按钮

java - 获取 ArrayIndexOutOfBoundsException : 3 >=3 when trying to export JTable contents to a text file

java - 使用tomcat作为服务器在eclipse ide的服务器上运行网站

java - 在哪里可以找到所有可用的 Java 邮件属性?