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

我是EJB 3的新手,并且对谷歌没有提供满意答案的一些疑惑感到困惑。

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

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

我决定将所有接口保存在一个名为projCommon的项目和projApps中的bean定义中。 bean类实现的远程接口在projCommon中。 所以projApps依赖于projCommon。

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

EJB是如何直接注入的?

如果你能对我的怀疑提供解释,那将非常有帮助。

当我试图在eclipse中创建一个新的EJB 3.0项目时,它会询问我是否也要创建一个客户端jar。 这个客户端jar有什么用途?

EJB客户机JAR文件是一个可选的JAR文件,它可以包含客户机程序需要使用EJB JAR文件中包含的企业bean的客户机视图所需的所有类文件。 如果您决定不为EJB模块创建客户端JAR文件,则所有客户端接口类都将位于EJB JAR文件中

我的ejbmodule是作为EAR文件的一部分添加的。 所以我真的需要这个客户端jar吗?

您并不真正需要EJB客户端,它只是提供了一个更容易的包装来使用客户端的EJB。

我是否需要创建本地和远程接口? 或者只是远程接口会做什么?

如果所有EJB都在同一个EAR中,那么您可以使用本地接口,如果不是,则需要远程接口。 本地接口更有效,调用完成后参考。
一些容器(即WebSphere)将在运行时为您优化,并在可能的情况下自动调用本地接口。

我决定将所有接口保存在一个名为projCommon的项目和projApps中的bean定义中。 bean类实现的远程接口在projCommon中。 所以projApps依赖于projCommon。

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

EJB是如何直接注入的?

它的工作原理无关紧要,这将由容器完成。 J2EE的重点是如何抽象出来。

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

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

可以使用注释或部署描述符来注入无状态会话Bean尝试使用的资源。 可以通过实例变量的注释或setter方法的注释来获取资源。

有关详细信息,请参见此处 希望这有帮助。