计算密集型编程模型

计算密集型应用程序是用于执行计算密集型工作的应用程序,该工作不适合于传统的 Java™ Platform, Enterprise Edition (Java EE) 请求和响应范例。

计算密集型应用程序

这些应用程序的以下几个特征使得它们不适合于传统的 Java EE 编程模型:
  • 需要异步提交和工作的启动
  • 需要工作的运行时间延长某些时间段
  • 需要各个工作单元可由操作员和管理员查看并进行管理
计算密集型编程模型提供了可解决这些需要的环境。以计算密集型编程模型为中心围绕着两个基本概念:
  1. 使用作业以异步方式提交和管理工作
  2. 对异步 bean 编程模型的次要扩展以支持延长时间运行的工作

以下部分提供了关于异步 bean 编程模型扩展的其他信息。

控制器 Bean

控制器 Bean 是定义在计算密集型应用程序部署描述符中的无状态会话 Bean,允许运行时环境控制应用程序的作业。此无状态会话 Bean 的实现由应用程序服务器提供。该应用程序包括它的其中一个企业 Bean 模块的部署描述符中的无状态会话 Bean(显示在以下定义中)。 必须且只能为每一个计算密集型应用程序定义一个控制器 Bean。由于控制器 Bean 的实现是在应用程序服务器运行时中提供,所以应用程序开发人员在部署计算密集型应用程序期间不请求部署企业 Bean。
<session id="supply a suitable name here">
   <ejb-name>CIController</ejb-name>
   <home>com.ibm.ws.ci.CIControllerHome</home>
   <remote>com.ibm.ws.ci.CIController</remote>
   <ejb-class>com.ibm.ws.ci.CIControllerBean</ejb-class>
   <session-type>Stateless</session-type>
   <transaction-type>Bean</transaction-type>
   <resource-ref id="WorkManager_ResourceRef">
      <description>
         WorkManager that is used to execute jobs.
      
      <res-ref-name>wm/CIWorkManager</res-ref-name>
      <res-type>commonj.work.WorkManager</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
   

包装计算密集型应用程序

带有一些 CIWork 对象以及支持这些 CIWork 对象的类的计算密集型应用程序逻辑包装在 Java EE 应用程序企业归档 (EAR) 文件中的企业 Bean 模块内。企业 Bean 模块的部署描述符必须包含先前描述的无状态会话 Bean 的定义。如果应用程序本身使用其他企业 Bean 或资源,那么这些 Bean 或资源的定义可能也在部署描述符中。您可以使用 Java EE 开发工具(例如 IBM® Rational® Application Developer)来开发和包装计算密集型应用程序,这种开发和包装方式与使用这些工具来构造包含企业 Bean 模块和异步 Bean 的 Java EE 应用程序的方式相同。还可以使用 pgcpackager 任务来包装计算密集型应用程序。

计算密集型应用程序的生命周期

计算密集型应用程序由应用程序服务器启动,其启动方式与其他 Java EE 应用程序的启动方式相同。如果应用程序定义了任何启动 Bean,那么这些 Bean 将在应用程序服务器启动时运行。当作业到达以运行应用程序时,计算密集型执行环境将调用定义在应用程序 EJB 模块部署描述符中的 CIControllerBean 无状态会话 Bean。此无状态会话 Bean 的 Java 命名和目录接口 (JNDI) 名称在作业的 XML 作业控制语言 (xJCL) 中进行指定。对于每一个作业步骤,CIControllerBean 无状态会话 Bean 将完成下列操作:
  1. 实例化由作业步骤的 xJCL 中的类名元素通过使用 CIWork 类的无参数构造方法指定的应用程序 CIWork 对象。
  2. 调用 CIWork 对象的 setProperties() 方法以传递作业步骤的 xJCL 中定义的任何属性。
  3. 查找定义在企业 Bean 模块的部署描述符中的工作管理器并使用它以异步方式调用 CIWork 对象的 run() 方法。

如果在 run() 方法返回之前取消了作业,那么 CIControllerBean 将在单独的线程上调用 CIWork 对象 release() 方法。由长期运行应用程序的开发人员来安排 release() 方法中的逻辑,从而使 run() 方法迅速返回。作业将保持处于取消暂挂状态,直到 run() 方法返回为止。

如果未取消作业并且 run() 方法返回但未返回异常,那么该作业已成功地完成。如果 run() 方法返回异常,那么作业状态为执行失败。 run() 方法成功返回或返回异常之后,不会对 CIWork 对象执行其他调用。对 run() 方法的所有引用都将删除。

计算密集型作业步骤

与其他批处理作业不同的是,计算密集型作业由一个作业步骤组成。此作业步骤由用于实现 com.ibm.websphere.ci.CIWork 接口的类的实例表示。CIWork 接口会扩展应用程序服务器异步 bean 编程模型和 Java 规范请求 (JSR) 237 中的 commonj.Work 工作接口。 这些扩展由两个方法组成,这两个方法提供了将作业中指定的特定于作业步骤的属性传递给 CIWork 对象的方式。

有关更多详细信息,请参阅 API 文档。

要了解有关异步 bean 的信息,请参阅“使用异步 bean”。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cgrid_schintensve
文件名:cgrid_schintensve.html