我是EJB 3的新手,并且对谷歌没有提供满意答案的一些疑惑感到困惑。
我正在尝试使用一些基类和一些其他应用程序可以使用的实用程序方法来创建框架。所有应用程序都将部署在同一台服务器上。
当我试图在eclipse中创建一个新的EJB 3.0项目时,它会询问我是否也要创建一个客户端jar。这个客户端jar有什么用途?我的ejbmodule是作为EAR文件的一部分添加的。所以我真的需要这个客户端jar吗? 我是否需要创建本地和远程接口?或者只是远程接口会做什么?
我决定将所有接口保留在名为 projCommon 的项目中,并将bean定义保存在 projApps 中。 bean类实现的远程接口在projCommon中。所以projApps依赖于projCommon。
我计划使用projCommon中定义的委托方法来调用bean类。这意味着projCommon也依赖于projApps,rt?并导致循环依赖。
如何直接注入EJB?
如果你能对我的疑惑提供解释,那将会非常有用。
答案 0 :(得分:24)
当我尝试创建新EJB时 在Eclipse中的3.0项目,它询问我是否也想创建一个客户端jar。什么 这个客户端罐子的用途是什么?
EJB客户端JAR文件是一个可选的JAR文件,它可以包含客户端程序需要使用EJB JAR文件中包含的企业bean的客户端视图所需的所有类文件。如果您决定不为EJB模块创建客户端JAR文件,则所有客户端接口类都将位于EJB JAR文件中
我的ejbmodule是作为其中一部分添加的 EAR文件。所以我真的需要这个 客户端罐子?
您真的不需要EJB客户端它只是提供了一个更容易的包装来使用客户端的EJB。
我是否需要创建本地和 远程接口?或者只是远程 接口会做什么?
如果所有EJB都在同一个EAR中,那么您可以使用本地接口,如果不是,则需要远程接口。本地接口更有效,呼叫完成参考 一些容器(即WebSphere)将在运行时为您优化它,并在可能的情况下自动调用本地接口。
我决定保留所有接口 在一个名为projCommon的项目中 projApps中的bean定义。该 bean的远程接口 类实现在projCommon中。 所以projApps依赖于 projCommon。
我会按功能区域组织我的项目。在功能区域内进行本地调用,在功能区域外进行远程调用,这使您可以在以后拆分要部署在不同服务器上的功能以进行扩展。它还使代码更加模块化。这也避免了任何循环依赖。
EJB究竟是如何直接的 注射?
它的工作方式并不重要,这将由容器完成。 J2EE的重点在于如何抽象出来。
根据http://www.developer.com/print.php/3650661:
EJB 3容器提供了将各种类型的资源注入无状态会话bean的工具。通常,为了执行用户任务或处理来自客户端应用程序的请求,会话bean中的业务方法需要一种或多种类型的资源。这些资源可以是其他会话bean,数据源或消息队列。
可以使用注释或部署描述符注入无状态会话Bean尝试使用的资源。可以通过实例变量的注释或setter方法的注释来获取资源。
答案 1 :(得分:0)
有关详细信息,请参阅here。希望这有帮助。