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

giz*_*gok 34 java java-ee

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

容器为J2EE应用程序组件提供运行时支持.容器为应用程序组件提供底层J2EE API的联合视图.J2EE应用程序组件从不与其他J2EE应用程序组件直接交互.他们使用容器的协议和方法相互交互并与平台服务进行交互.在应用程序组件和J2EE服务之间插入容器允许容器透明地注入由组件的部署描述符定义的服务,例如声明式事务管理,安全性检查,资源池和状态管理.

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

Tom*_*icz 65

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

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

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

  • @gizgok Java SE应用程序是自包含的,因为您只需要一个运行应用程序的JAR(当然还有JRE).另一方面,使用Java EE,servlet,EJB或MDB本身就没用了.您需要一个容器来实际运行它们,管理它们的生命周期并调用它们.例如,即使没有`main()`,servlet也只是一个Java类.但是一旦部署在Web容器上,容器就会自动调用每个HTTP请求.容器实现HTTP.当然,您可以在Java SE中自己实现HTTP服务器 - 但容器为您执行此操作,您可以专注于业务逻辑. (5认同)

Jam*_*son 6

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

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

容器提供了大量服务: -

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