计算密集型编程模型
计算密集型应用程序是用于执行计算密集型工作的应用程序,该工作不适合于传统的 Java™ Platform, Enterprise Edition (Java EE) 请求和响应范例。
计算密集型应用程序
- 需要异步提交和工作的启动
- 需要工作的运行时间延长某些时间段
- 需要各个工作单元可由操作员和管理员查看并进行管理
- 使用作业以异步方式提交和管理工作
- 对异步 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 任务来包装计算密集型应用程序。
计算密集型应用程序的生命周期
- 实例化由作业步骤的 xJCL 中的类名元素通过使用 CIWork 类的无参数构造方法指定的应用程序 CIWork 对象。
- 调用 CIWork 对象的 setProperties() 方法以传递作业步骤的 xJCL 中定义的任何属性。
- 查找定义在企业 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”。