为什么要在嵌入式容器中测试ejb3?

时间:2010-11-01 18:13:20

标签: testing java-ee ejb-3.0 embedded-container

这可能是一个愚蠢的问题,因为几乎每个人都在使用嵌入式容器技术来测试EJB,但我必须澄清这一点,因为我缺乏经验。 此外,我的一些人认为嵌入式容器不会重现在真实应用服务器中部署的真实情况。 那么,在测试ejb3时,为什么要指示使用嵌入式容器而不是独立容器? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

时间。

在完整的应用程序服务器中测试EJB通常会占用大量时间,因为应用程序。服务器必须在进行更改时“旋转”,因此浪费了大量时间。因此,OpenEJB等嵌入式容器可以为您节省大量时间。嵌入式Glassfish现在也是一种选择,虽然我没有亲自尝试过。

零周转是Java EE中的一种圣杯。

答案 1 :(得分:1)

以下是我发现的最相关的论点。请在此旁边发表评论,或者添加自己的理由使用可嵌入容器与真实应用服务器容器进行测试。谢谢。

  1. 使用嵌入式容器测试技术可确保灵活性(您只需将新库添加到类路径中)。据我所知,如果我们希望能够为多个应用程序服务器提供测试项目,我们就不必在测试实现中绑定到应用程序服务器容器。某些应用服务器可能会使用某些特定的注释或部署描述符,如果使用它们,那么您将被绑定到应用服务器
  2. 嵌入式容器更轻 - 这意味着减少了运行测试的时间。真正的应用程序服务器在启动和停止时很难或可能挂断。因此,使用真正的应用服务器构建完全自动化的测试流程可能太难了......
  3. 另一个问题是大多数Java EE应用程序的无状态特性。在调用事务边界的方法(例如,无状态会话bean)之后,所有JPA实体都会分离。客户失去了状态。这会强制您在客户端和服务器之间来回传输整个上下文 - 负载很重,客户端状态的每次更改都必须与服务器合并
  4. 使用嵌入式容器,您有一个运行所有(test和ejbs)的进程,使用真正的应用服务器,您应该协调2个进程(AppServer和测试)
  5. 进行全面测试,当然,您还需要在真正的appserver上进行测试。不同的服务器可能有一些特殊性,例如类加载等。然而,嵌入式容器有助于测试逻辑(单元测试的单元和集成),因此对于每日自动化测试,这可能足够且更容易。

答案 2 :(得分:0)

嵌入式容器的执行(启动/停止)比完整容器快得多 - >这肯定会影响开发者。设置/配置更容易自动化,特别是持续集成。另一方面,由于某些核心功能在嵌入式容器上被禁用,因此无法测试所有内容。

您可能需要调查http://www.jboss.org/arquillian以同时拥有这两个选项。来自网站:

  

Arquillian让您可以测试您的   远程或嵌入式业务逻辑   容器。或者,它可以   将存档部署到容器中   测试可以作为远程进行交互   客户端。

最后,它取决于您要测试的EJB的类型。如果没有对某些外部服务进行模拟,某些复杂方案将无法在嵌入式容器上运行。在我的项目中,我们使用我们创建的自定义模拟容器测试EJBS(超快且易于使用),如果一切顺利,我们使用远程控制API测试真实的,完整的JBoss,就像Arquillian一样。 / p>

希望它有所帮助。