【问题标题】:Which JavaEE container contains which elements?哪个 JavaEE 容器包含哪些元素?
【发布时间】:2015-03-05 22:35:21
【问题描述】:

我正在尝试更深入地了解 JavaEE 容器。我需要了解项目的架构(没关系),尤其是对 Java EE 容器的影响。为简单起见,一切都在同一个完整的 Java EE GlassFish 服务器上运行。

我有一些类定义: (对不起,由于声誉,我无法发布 UML 图)

@Entity public class MyEntity{...}
@Stateless public class MyEntityDAO{...}
@Stateless public class MyEntityFacade{...}
public class MyEntityTO{...} //Data Transfer Object, it's a POJO
@Named @ViewScoped public class MyEntityPageController{...}

和 JSF 页面: myEntityPageJSF.xhtml

现在我想像这样对以下容器中的不同元素进行分类:

EJB 容器

  • MyEntity,因为它是一个实体 Bean
  • MyEntityDAO 因为它是一个会话 Bean
  • MyEntityFacade 因为它是一个会话 Bean

网络容器

  • MyEntityPageController 因为它是一个 CDI Bean
  • JSF 页面
  • 小服务程序

我找到的唯一官方答案是[1]:

企业 JavaBeans (EJB) 容器:管理 Java EE 应用程序的企业 bean 的执行。 Enterprise bean 及其容器在 Java EE 服务器上运行。

Web 容器:管理 Java EE 应用程序的网页、servlet、和一些 EJB 组件的执行。 Web 组件及其容器在 Java EE 服务器上运行。

问题在于“和一些 EJB 组件” 部分......不知道他们到底在说什么。那么,任何人都可以在正确的容器中对以下元素 [2] 进行分类吗?

  • 会话 Bean
  • 实体 Bean
  • 消息 Bean
  • JSF
  • sevelet
  • 所以它不是那么困难,但现在:
  • 托管 Bean
  • CDI 豆
  • WebService(可能也是一个Session Bean,我不知道)

提前致谢。

参考文献:

  1. http://docs.oracle.com/javaee/6/tutorial/doc/bnabo.html
  2. http://docs.oracle.com/javaee/6/tutorial/doc/bnacj.html

【问题讨论】:

  • 请解释一下投反对票,以便我更正。

标签: jakarta-ee


【解决方案1】:

这一切都与容器、组件和服务有关。

Java EE 应用程序容器

Java EE 应用服务器仅包含两种容器类型(Web 和 EJB 容器)。这些容器有一些组件使用容器本身提供的一些 API。

您的应用程序服务器可以被解释为应用程序容器。仅举几例:Tomcat、JBoss/Wildfly、Oracle Weblogic、Jetty 或 GlassFish 是 Java EE 应用程序容器。

此时,您已经可以注意到 server 通常是 container 的同义词。它存在于这样一个事实,对于小型应用程序,每个服务器通常有一个容器。但是,服务器可以包含多个容器。

严格来说,Java 应用服务器是基于 Java Platform Enterprise Edition 的,它是一个多层分布式模型。该模型由:

  • 客户端层(可以是一个或多个应用程序或浏览器),
  • 中间层(Web 容器和 EJB 容器),
  • EIS 层(数据库、集成服务、资源……)

多层架构意味着,在 Java EE 世界中,一些容器在客户端,而一些在服务器端。

Java EE 容器类型

从您的服务器的角度来看,JCP(Java Community Process)在 JSR 342 中仅定义了四种类型的 Java EE 容器

  • Applet 容器(在客户端浏览器中运行)
  • 应用程序客户端容器(在客户端计算机上运行)
  • Web 容器(有时称为 Web 服务器,运行在 JEE 应用服务器上)
  • EJB 容器(有时称为 EJB 服务器,在 JEE 应用服务器上运行)

Java EE 容器是组件与 Java EE 平台为支持该组件而提供的低级功能之间的接口。

容器为 Java EE 应用程序提供运行时支持 组件。容器提供底层 Java 的联合视图 应用程序组件的 EE API。 Java EE 应用程序组件 从不直接与其他 Java EE 应用程序组件交互。 [...] 典型的 Java EE 产品将为每个 应用组件类型:应用客户端容器、小程序 容器、Web 组件容器和企业 bean 容器。

Web 容器作为 EJB 容器,为其组件提供命名上下文和生命周期管理。 请注意,即使 Web 容器可以与 EJB 容器一起使用,它们也不需要部署在同一台机器上。

完全符合 JEE 的应用程序服务器,例如 Websphere、Glassfish 或 JBoss,具有这两个容器。

Java EE 核心组件

JEE 应用程序由组件组成。组件是一个独立的功能软件单元,它与相关的类和文件一起组装到 JEE 应用程序中,并与其他组件进行通信。

从技术上讲,容器为组件提供了宿主执行环境。

规格说明:

  • 应用程序客户端容器有一个名为应用程序客户端(独立或小程序)的组件。
  • Web 容器有一个 Servlet 组件,或 JavaServer Pages (JSP) 组件。
  • EJB 容器具有 EJB 组件。 EJB 容器由平台供应商提供。

来自不同容器的组件之间的通信示例: Web 容器包含 JavaBeans 组件,用于管理用户输入并将该输入发送到在 EJB 容器中运行的企业 bean 进行处理。

Java EE 容器服务

Sun 定义了一个容器如下:

容器是提供服务的运行时环境,例如 Java EE 组件的安全性和事务管理。

即容器还负责提供 API 和分布式通信协议。

容器服务:

  • 命名:允许组件定位其他组件和资源。
  • 事务:在数据库或其他系统中读取和/或修改操作的结果,具有定义的开始和定义的结束。
  • 安全性:用于支持身份验证和授权。
  • 远程处理:EJB 远程处理或 Web 服务。
  • 坚持
  • 异步性
  • 消息:进程之间异步传输数据的通信模型。
  • 并发:Java EE 应用程序中的并行性。
  • 验证
  • ...

这些容器服务或 API 在逻辑上可以分为以下几层:后端层、中间层和 Web 层:

【讨论】:

    【解决方案2】:

    Managed Bean 是 JSF 的一部分,但 JSF 没有定义一个单独的容器——它的支持 bean 是标准的 JavaEE bean(看看here)。请记住,现在建议使用 CDI 托管 bean 而不是“JSF bean”。

    CDI bean 由 CDI 容器 (JSR 346) 管理。

    WebService... 这取决于它是如何定义的。当服务同时使用@WebService 和@Stateless 注释时,它由EJB 容器管理。当它使用 CDI 范围注释进行注释时,它由 CDI 容器管理。但它也可以存在于任何 JavaEE 容器之外,因为它与 JavaSE 规范相关。

    【讨论】:

    • 所以如果我理解得很好,JSF 和 CDI bean 嵌入在 .war 中,它们将在 JavaEE 应用程序服务器中运行,例如:Web 容器中的 JSF 和 CDI 容器中的 CDI。如果我离开 JavaEE 服务器并且只将 CDI 元素嵌入到 .jar 中,它们将在 CDI 容器中的 JVM 中运行。对吗?
    • 是和不是。在纯 JavaSE 环境中,您需要添加 CDI 运行时库,例如。 JBoss 焊接。
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2020-06-27
    相关资源
    最近更新 更多