J2EE中的容器究竟是什么?它有何帮助?

时间:2011-11-21 11:01:04

标签: java java-ee

我现在正在阅读J2EE 1.4规范,并且有很多我不明白的术语。 这是来自容器的规格:

  

Containers为J2EE应用程序组件提供运行时支持。   容器为应用程序提供底层J2EE API的联合视图   组件。 J2EE应用程序组件永远不会直接与其他J2EE交互   应用组件。他们使用容器的协议和方法   彼此之间以及与平台服务进行交互。插入一个容器   应用程序组件和J2EE服务之间允许容器   透明地注入组件部署定义的服务   描述符,例如声明式事务管理,安全性检查,资源   汇集和国家管理。

由于我来自Web开发世界,我无法理解,这究竟是做什么的,以及容器的用途是什么。提供运行时支持是什么意思?它如何使J2EE在术语或可伸缩性方面成为更好的系统?

4 个答案:

答案 0 :(得分:62)

J2EE / Java EE应用程序不是自包含的。为了执行它们,需要在容器中部署。换句话说,容器在JVM之上提供执行环境。

此外,应用程序依赖于几个API,如JPA,EJB,servlet,JMS,JNDI等。符合EE的容器的作用是提供所有或部分API的标准实现。这意味着理论上,只要依赖于标准API,您就可以在任何容器上运行应用程序。

从技术角度来看,容器只是另一个带有main()方法的Java SE应用程序。另一方面,EE应用程序是服务/ bean / servlets / etc的集合。容器找到这些组件并运行它们,提供API实现,监视,可伸缩性,可靠性等。

答案 1 :(得分:6)

JEE容器提供了源代码的包装。

典型的容器是经典的EJB数据bean,也是消息驱动的bean。在某种程度上,servlet和portlet也可以被视为容器。

容器提供了大量服务: -

  • 调用 - 您的代码在需要时加载并启动。
  • 事务上下文 - 大多数容器代码出现在ACID事务上下文中。
  • 配置 - 容器会传递JDBC连接等内容。
  • 安全性 - 容器将限制对授权用户访问您的代码和数据。
  • 可伸缩性 - 由于容器负责调度,因此如果负载变重,它可以自动启动额外的副本,或者可以静态配置为并行运行多个实例。
  • 封装。您的程序向容器公开单个接口。但是,从外部来看,它可能会以各种形式公开此接口(Corba,WSDL,JSM等)。
  • 共同服务。例如日志记录,其他EJB公开的服务。等。

答案 2 :(得分:3)

通常,一个Java应用程序使用一个JVM,每个应用程序都有一个操作系统级别的进程。容器允许多个Java应用程序在一个JVM下运行。

答案 3 :(得分:2)

  

提供运行时支持是什么意思?

您来自Web开发世界,这意味着您知道必须通过HTTP协议访问为Web制作的传统应用程序。 Java是一种在设计上在JVM上运行的编程语言。

那么如何将HTTP请求链接到Java代码?

必须要做的事情。像Apache这样的HTTP服务器可以做到这一点,并且使用旧式通用网关接口(CGI),当Apache服务器获取HTTP请求时,您可以调用Java代码。

这很好,但在某些时候,网络应用程序需要身份验证 - 可以为此编写代码,Web应用程序将需要一些数据库访问 - 也可以编写代码,Web应用程序将需要一些UI代码也可以用MVC等编写。

这个网络应用程序需要其他网络应用程序肯定会有,并且可以看到共同需求:身份验证,数据源(如数据库等)等。
Java已经将许多这些需求作为API提供,如前面的答案所述,为什么不将所有这些知识和重用的常见要求放在可以在运行时支持Web应用程序的东西上:JEE容器。

  

如何使JEE成为一个更好的系统或可扩展性,架构?

我认为问题是为什么JEE比使用CGI的简单HTTP服务器更具可扩展性?

其他人已经回答了这个问题,但是我之前的回答让我更清楚。

希望这有帮助。