EJB - 家庭/远程和本地家庭/本地接口

2022-09-03 14:53:32

在修改一些过去的考试试卷时,主要关注面向组件的设计和J2EE,我遇到了以下问题:

对场景 3 的初步调查:“Exchange Request”表明,两个 EJB 将提供一个合适的解决方案:一个名为 EnterExchangeRequest 的会话 Bean 用于控制处理,一个名为 ExchangeRequest 的实体 Bean 用于表示请求的持久性属性。讨论以下接口的作用:

  • 远程
  • 本地主页
  • 当地

以及它们将如何提供对上述 EJB 服务的访问。

我可以尝试解释如何和界面适合图片。我也聽到講師說,一個可以由取代,並被(為什麼?),但為什麼他們要求我同時討論這四個角色的角色呢?HomeRemoteHomeLocalHomeRemoteLocal


当我说,EJB容器(应用程序服务器)会看到一个接口是或然后决定bean可以“存在于”集群中的任何机器上,而在这种情况下,接口是并且容器会知道bean不能分布在多台机器上,因此只会在一台机器中保持它们“活动”吗?HomeRemoteLocalHomeLocal


我完全迷失在这个企业Java丛林中。我正在经历一次豆溢。你能告诉我我的哪些假设是错误的,指出我的误解和失误。

感谢所有愿意帮助我使用这些 EJB 接口的人。

附言:请注意,我不是要求您回答过去试卷中的问题。只是好奇,如果你有任何想法,当他们问这个时,他们会是什么。


答案 1

正如Yishay所指出的,Home/Remote和LocalHome/Local是绑定在一起的,Home接口充当构造函数。

本地豆子与它们所在的JVM相关联,您无法从外部访问它们。可以从其他 JVM 访问远程 Bean。

我使用类似的方法:我总是部署耳朵。豆子为耳朵我做本地豆子,豆子意味着由我制作的其他耳朵使用远程。但是可以在其他耳朵中使用本地bean,只要它们部署在同一JVM中即可


答案 2

Home负责创建Remote(有点像它的构造器),LocalHome和Local具有相同的关系。

在每种情况下,容器都会为您提供一个代理,该代理引用您编写的实际 EJB 类。

如果我必须猜测,问题正在寻找的是会话Bean使用远程,而实体Bean使用本地。

无论如何,尽管这些概念仍然存在,但在 EJB3 中,事情已经得到了更好的简化。

编辑:为了响应注释,使用EJB3,Bean类本身可以直接实现远程和主接口(对于会话bean)。它们是用单个注释制作的 EJB。有状态 bean 还有几个注释来处理状态问题。实体 bean 没有 Home 接口,也不需要本地接口,可以直接与 java 对象交互。有一个 EntityManager,它根据查询检索正确的实体 Bean,并且 EntityManager 通过注释注入。

这可以用一个段落来总结。网络上有关于这些东西的很棒的教程,但是EJB通常解决了一类问题,除非你处理这个问题,否则很难理解。它们不是解决它的唯一方法,但除非你处理这种类型的编程,否则仅仅阅读它并不能真正帮助你与它建立联系。