Java web作业(3)

Java EE容器(Containers)

通常,瘦客户端(thin-client)多层应用程序很难编写,因为它们涉及许多行复杂的代码来处理事务和状态管理、多线程、资源池和其他复杂的底层细节。基于组件且独立于平台的Java EE体系结构使Java EE应用程序易于编写,因为业务逻辑被组织成可重用的组件。此外,Java EE服务器以容器(container)的形式为每种组件类型提供底层服务。因为您不必亲自开发这些服务,所以您可以自由地集中精力解决手头的业务问题。

容器服务(Container Services)

容器是组件与支持组件的底层特定于平台的功能之间的接口。在执行之前,必须将web、企业bean或应用程序客户机组件组装到Java EE模块中并部署到其容器中。

组装过程涉及为Java EE应用程序中的每个组件和Java EE应用程序本身指定容器设置。容器设置自定义Java EE服务器提供的底层支持,包括安全性、事务管理、Java命名和目录接口API查找以及远程连接等服务。以下是一些亮点。

Java EE安全模型允许您配置web组件或企业bean,以便只有授权用户才能访问系统资源。

Java EE事务模型允许您指定组成单个事务的方法之间的关系,以便将一个事务中的所有方法视为单个单元。

JNDI查找服务为企业中的多个命名和目录服务提供了统一的接口,以便应用程序组件能够访问这些服务。

Java EE远程连接模型管理客户机和企业bean之间的底层通信。创建企业bean之后,客户机调用它的方法,就好像它在同一虚拟机中一样。

由于Java EE体系结构提供了可配置的服务,同一个Java EE应用程序中的应用程序组件可以根据其部署位置进行不同的行为。例如,企业bean可以有安全设置,允许它在一个生产环境中具有一定级别的数据库数据访问权限,在另一个生产环境中具有一定级别的数据库访问权限。

容器还管理不可配置的服务,如企业bean和servlet生命周期、数据库连接资源池、数据持久性和对Java EE平台api的访问。

容器类型(Container Types)

部署流程在Java EE容器中安装Java EE应用程序组件,如图所示。

  1. Java EE server: Java EE产品的运行时部分。Java EE服务器提供EJB和web容器。

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

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

  4. 应用程序客户机容器:管理应用程序客户机组件的执行。应用程序客户机及其容器在客户机上运行。

  5. Applet容器:管理Applet的执行。由web浏览器和在客户机上同时运行的Java插件组成。

CDI(Contexts and Dependency Injection)

Java EE平台的上下文和依赖项注入(CDI)是几个Java EE 6特性之一,这些特性有助于将Java EE平台的web层和事务层组合在一起。CDI是一组服务,它们一起使用,使得开发人员可以很容易地在web应用程序中使用企业bean和JavaServer Faces技术。CDI设计用于有状态对象,它还有许多更广泛的用途,允许开发人员以松散耦合但类型安全的方式集成各种组件,从而具有极大的灵活性。

CDI提供的最基本的服务如下:

  • 上下文:将有状态组件的生命周期和交互绑定到定义良好但可扩展的生命周期上下文的能力
  • 依赖项注入:以类型安全的方式将组件注入应用程序的能力,包括在部署时选择注入特定接口的哪个实现的能力

此外,CDI还提供以下服务:

  • 与表达式语言(EL)集成,该语言允许在JavaServer Faces页面或JavaServer Pages页面中直接使用任何组件
  • 修饰注入组件的能力
  • 使用类型安全拦截器绑定将拦截器与组件关联的能力
  • 一个事件通知模型
  • 一个web会话范围(除了Java Servlet规范定义的三个标准范围——请求、会话和应用程序之外)
  • 一个完整的服务提供者接口(SPI),它允许第三方框架干净地集成到Java EE 6环境中

CDI的一个主要主题是松散耦合。CDI做以下工作:

  • 通过定义良好的类型和限定符解耦服务器和客户机,因此服务器实现可能会有所不同
  • 通过以下步骤来解耦协作组件的生命周期:

使用自动生命周期管理使组件具有上下文关系

允许有状态组件像服务一样交互,完全通过消息传递

  • 通过事件将消息生产者与消费者完全解耦
  • 通过Java EE拦截器解耦正交关注点

除了松耦合之外,CDI还提供了强类型:

  • 消除使用基于字符串的名称进行连接和关联的查找,以便编译器将检测输入错误
  • 允许使用声明性Java注释来指定所有内容,这在很大程度上消除了对XML部署描述符的需求,并使得在开发时提供内省代码和理解依赖结构的工具变得很容易

猜你喜欢

转载自blog.csdn.net/blow_bb/article/details/88387088