java - 在 EJB 3 和设计模式中使用客户端 jar

标签 java jakarta-ee ejb-3.0 ejb

我是 EJB 3 的新手,对 Google 没有提供满意答案的一些疑问感到很困惑。

我正在尝试创建一个框架,其中包含我的其他应用程序可以使用的一些基类和一些实用方法。所有应用程序都将部署在同一台服务器上。

当我试图在 eclipse 中创建一个新的 EJB 3.0 项目时,它会询问我是否也想创建一个客户端 jar。这个客户端 jar 有什么作用?我的 ejbmodule 作为 EAR 文件的一部分添加。那么我真的需要这个客户端 jar 吗? 我需要同时创建本地和远程接口(interface)吗?或者只是远程接口(interface)就可以了?

我决定将所有接口(interface)保留在名为 projCommon 的项目中,并将 bean 定义保留在 projApps 中。 bean 类实现的远程接口(interface)在 projCommon 中。所以 projApps 依赖于 projCommon。

我计划使用 projCommon 中定义的委托(delegate)方法来调用 bean 类。这意味着 projCommon 也依赖于 projApps,rt?并导致循环依赖。

EJB 是如何直接注入(inject)的?

如果您能为我的疑惑提供解释,那将非常有帮助。

最佳答案

When I'm trying to create a new EJB 3.0 project in eclipse, it asks if I want to create a client jar also. What purpose does this client jar serve?

EJB 客户端 JAR 文件是一个可选的 JAR 文件,它可以包含客户端程序使用 EJB JAR 文件中包含的企业 bean 的客户端 View 所需的所有类文件。如果您决定不为 EJB 模块创建客户端 JAR 文件,所有客户端接口(interface)类都将在 EJB JAR 文件中

My ejbmodule is added as a part of the EAR file. So do I really need this client jar?

您实际上并不需要 EJB 客户端,它只是提供了一个更简单的包装来从客户端使用 EJB。

Do I need to create both local and remote interfaces? Or just remote interfaces will do?

如果您所有的 EJB 都在同一个 EAR 中,那么您可以使用本地接口(interface),否则您需要远程接口(interface)。本地接口(interface)效率更高,调用做引用。
某些容器(即 WebSphere)会在运行时为您优化这一点,并在可能的情况下自动调用本地接口(interface)。

I decided to keep all the interfaces in a project called projCommon and the bean definitions in projApps. The remote interfaces which the bean classes implement are in projCommon. So projApps is dependent on projCommon.

我会按职能领域组织我的项目。在功能区内进行本地调用,在功能区外进行远程调用,这允许您稍后拆分要部署在不同服务器上的功能以扩展它。它还使代码更加模块化。这也避免了任何循环依赖。

How exactly are EJB's directly injected?

它如何工作并不重要,这将由容器完成。 J2EE 的全部意义在于抽象出操作方法。

根据 http://www.developer.com/print.php/3650661 :

EJB 3 容器提供了将各种类型的资源注入(inject)无状态 session bean 的工具。通常,为了执行用户任务或处理来自客户端应用程序的请求, session bean 中的业务方法需要一种或多种类型的资源。这些资源可以是其他 session bean、数据源或消息队列。

无状态 session bean 尝试使用的资源可以使用注释或部署描述符注入(inject)。可以通过注解实例变量或者注解setter方法来获取资源。

关于java - 在 EJB 3 和设计模式中使用客户端 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484063/

相关文章:

java xslt 转换本地名称

java - 有没有比 Icefaces 更好的 Ajax Push for JSF 2.0

java - 在带有oracle serverjre 8的docker中运行Java无法找到或加载主类

java - 为什么我应该使用 JSF 而不是使用简单的 ZK 框架

java - Mojarra Java EE 5/6 兼容性

Java 多线程与 Shell 脚本

java - 减少 Wildfly 连接超时

java - 另一个支持 ejbql 连接的工具,如 Ireport (JasperReport)

JBoss 6 EJB教程.jar

java - 在 EJB 容器中执行 IBM DB2 存储过程时出错