哪个JavaEE容器包含哪些元素?

时间:2015-03-05 22:35:21

标签: java-ee

我试图更深入地了解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页面
  • 的Servlet

我找到的唯一正式答案是[1]:

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

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

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

  • 会话Bean
  • 实体Bean
  • Message Bean
  • JS​​F
  • sevelet
  • 所以它不是那么困难但是现在:
  • Managed Bean
  • CDI Bean
  • WebService(也许它也是会话Bean,我不知道)

提前致谢。

参考文献:

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

2 个答案:

答案 0 :(得分:2)

关于容器,组件和服务。

Java EE应用程序容器

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

enter image description here

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

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

严格地说,Java应用程序服务器基于Java平台企业版,这是一个多层分布式模型。该模型由以下内容组成:

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

在Java EE世界中,多层体系结构意味着某些容器位于客户端,而某些容器位于服务器端。

Java EE容器类型

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

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

Java EE Containers

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

  

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

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

完全符合JEE的应用服务器,例如Websphere,Glassfish或JBoss,都有两个容器。

Java EE核心组件

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

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

规范说:

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

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

Java EE容器服务

Sun已将容器定义如下:

  

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

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

集装箱服务:

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

这些容器服务或API可以在逻辑上划分为多个层:后端层,中间层和Web层: enter image description here

答案 1 :(得分:1)

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规范有关。