1

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

4

3 回答 3

2

时间。

由于应用程序的原因,在成熟的应用程序服务器中测试 EJB 通常会占用大量时间。每当进行更改时,服务器都必须“启动”,因此浪费了大量时间。正因为如此,OpenEJB等嵌入式容器可以为您节省大量时间。如今,嵌入式 Glassfish 也是一种选择,尽管我没有亲自尝试过。

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

于 2010-11-01T18:17:36.753 回答
1

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

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

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

您可能需要调查http://www.jboss.org/arquillian以获得这两种选择。从网站:

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

最后,这取决于您要测试的 EJB 类型。如果没有对某些外部服务的模拟,某些复杂的场景将无法在嵌入式容器上运行。在我的项目中,我们使用我们创建的自定义模拟容器(超快速且易于使用)来测试 EJBS,如果一切顺利,我们将使用与 Arquillian 非常相似的远程控制 API 在真实的东西中测试完整的 JBoss。

希望能帮助到你。

于 2010-11-10T11:59:13.543 回答