何时更喜欢EJB而不是GWT Servlet

时间:2012-09-18 08:27:09

标签: java gwt ejb

我的同事告诉我,使用本地EJB并不是一个好主意,因为它们充当JAR中打包的类(即,当EJB仅用作local时,它们与普通类相比没有任何优势)。而且只有当某些代码可能被多个应用程序使用时,我才必须使用EJB。但我读到了EJB的更多优点(安全性,线程安全性,trasanctions等)。

所以我很困惑:什么时候使用GWT Servlet(它比简单的HTTPServlet更方便,它提供RPC样式的方法调用)以及何时使用EJB?

P.S。我不使用任何期货,如JPA 2.0,CDI等(因为我只能在WAS 7上使用Java EE 5)。

3 个答案:

答案 0 :(得分:9)

  

我的同事说我使用本地EJB不是个好主意

我非常不同意这一点。 本地EJB 是一个非常好主意,因为它们是实现业务逻辑的完美bean类型。目前的EJB bean非常轻,所以你不必因为任何所谓的重量级而避免使用它们。

这些类型的bean的最大优点可能是它们的自动事务管理,这在进行任何类型的数据库工作时都会非常有用。

这不仅仅是需要访问JMS队列和复杂EIS系统的企业应用程序。任何一次向数据库写入多个Web应用程序的Web应用程序都会从​​中受益。如果没有事务,您最终会说User,只要发生异常或崩溃,数据库中只有一半持续存在。如果没有EJB,您将不得不使用大量非常详细的start\commit\rollback语句来丢弃您的代码,更不用说将您的事务(通常通过“连接”)传播到您的所有代码中,并且在事务处理时或不活跃。

使用EJB bean,所有这些复杂性都会消失。这就像垃圾收集与手动内存管理一样。

即使是最简单的Web应用程序也可以使用许多其他有趣的功能,例如声明性角色检查(@RolesAllowed),bean的汇集(以节省吞吐量等)和线程安全性。

在Java EE 6中,它们变得更容易用于简单的Web应用程序,并且它们可以出现在.war中的任何地方(不再需要单独的.jar和.ear。)

  

所以我很困惑:何时使用GWT Servlet(它比简单的HTTPServlet更方便,它提供RPC样式的方法调用)以及何时使用EJB?

所以现在我们谈论的是远程EJB 。在这种情况下,答案是不同的。

如果客户端从Internet连接,您几乎从不使用远程EJB。通常需要打开大量端口,包括客户端上的端口。

同样,如果您有异构客户端(.NET,C ++,甚至是运行与远程EJB使用的AS略有不同版本的Java客户端),您通常不会使用远程EJB。

虽然理论上支持Corba(IIOP)并因此允许不同类型的客户端,但实际上远程EJB通信仅在客户端和服务器都运行Java并且是除了相同的AS(Application Server)之外或者其中一个是带有远程服务器客户端库的Java SE客户端(可以巨大)。

远程技术有点尴尬,但EJB规范甚至没有指定如何设置远程连接。事实上的标准是远程JNDI,但由于这不是规范,JBoss例如我想在JBoss AS 7中停止支持它。

在所有这些情况下,您将使用Web Service技术而不是远程EJB。 GWT Servlet可能是一个选项,但在这里并不是一个典型的例子。除非您已经在使用GWT,否则我不建议将其安装为任意(非GWT)客户端的一般Web / rpc连接。

通用Java解决方案是JAX-WS和JAX-RS,它们是SOAP resp REST实现(两者都可以与EJB btw结合使用)。众所周知的JAX-RS实现是Jerseyexample)和RestEasy。在Java EE 6中,您不必为它们安装任何东西,因为它们已经是平台的一部分。对于Java EE 5,您必须单独安装JAX-RS,但JAX-WS已经存在。

人们通常会发现JAX-RS更容易入手以及更现代的方法,尽管JAX-WS具有更多的内置类型安全功能(这也是其大部分复杂性来自的地方)。

最后,当时,我们使用远程EJB?通常,您可以在运行相同AS的本地网络上的应用程序之间进行通信。在这种情况下,有潜在的性能优势(二进制序列化可能比json / xml转换更快),并且有一些强大的选项可用于传播安全上下文和协调分布式事务。如果有的话,简单的网络应用很可能不会经常需要最后一个功能。

经常看到的模式是接受来自远程(Web)客户端的请求的JAX-RS资源(bean),然后将工作委托给包含实际业务逻辑的本地EJB。

答案 1 :(得分:1)

EJB是一种在后端用于自己的容器的技术,它提供了一些对开发人员来说透明的事务安全等功能。

来自Java EE教程:

  

如果您的应用程序有任何问题,您应该考虑使用企业bean   满足以下要求:

     

应用程序必须具有可扩展性。为了适应越来越多的应用程序   用户,您可能需要分发应用程序的组件   多台机器。不仅可以应用程序的企业bean   在不同的机器上运行,但它们的位置也将保留   对客户透明。

     

交易必须确保数据完整性。企业bean支持   事务,管理并发访问的机制   共享对象。

     

该应用程序将拥有各种客户端。只有几行   代码,远程客户端可以轻松找到企业bean。这些   客户可以很薄,多种多样。

现在,当您在单个Web服务器中仅进行Web开发时,EJB将无法真正帮助您,并且还有其他更简单的选项,例如GWT Servlet。

但是,如果要使用托管事务,连接到JMS队列或在后台执行一些批处理,那么EJB就会发挥作用。

例如,您收到了订单,您需要与不同部门沟通才能完成订单。在这种情况下,您需要一个后台流程来完成工作,同时前端会通知客户订单正在准备中。 servlet可以将订单发送到一个队列,消息驱动的bean可以在其中获取它并通过调用其他EJB来进行一些处理。

答案 2 :(得分:0)

这取决于您的应用程序/项目需求范围。 EJB用于支持Java EE功能。它不包括在您的项目范围内。不要使用它。 Java EE Features