任务和工作单元注意事项
应用程序概要分析功能在工作单元 (UOW) 概念下工作。在这种情况下,UOW 表示事务或 ActivitySession。
仅当由于要调用某方法而开始 UOW 时,才能对该方法使用任务名。这将根据活动工作单元给它指定一种更可预测的数据访问模式。更具体地说,由于在应用程序概要文件中仅使用一种访问意向来配置 Bean,因此此方法可确保在 UOW 中装入仅具有一种已配置访问意向的 Bean 类型。bean 类型的这个已配置访问意向在组装时确定,且由应用程序概要文件服务实现。
任务名始终与工作单元相关联,而且此任务名在该 UOW 的持续时间之内不会更改。如果因为方法正被调用而开始与此方法相关联的 UOW,那么当任务名与此方法相关联时,此任务名就用于命名 UOW。指定给工作单元的任务被视为已命名的 UOW。
如果任务名未与开始 UOW 的那种方法相关联,那么使用缺省访问意向且 UOW 是未命名的。在开始 UOW 时只能给一个工作单元命名,并且该任务名在 UOW 的生命期之内保持不变。而且,在 UOW 的生命期之内无法更改指定给该 UOW 的任务。如果方法未开始 UOW(不管是容器管理的还是组件管理的),那么忽略任何与此方法相关联的任务名。
不能更改指定给工作单元的任务名。但是,可能存在这样的情况:调用序列包含许多不同的应用程序调用,可能需要对不同的调用使用不同的任务名。在这种情况下,部署者开始新的 UOW 并将必要的任务名与此 UOW 相关联就非常重要。例如,假设您具有下列 Bean:sb1 是会话 Bean,eb2 和 eb3 是容器管理的持久性 (CMP) 实体 Bean。调用 sb1 时,就开始了一个事务并将任务“t1”与 sb1 相关联。进一步假设 sb1 接着调用 eb2 和 eb3。如果 eb2 或 eb3 均未创建工作单元,那么这些 Bean 将在 UOW 上下文中从 sb1 和诸如其任务名 (t1) 之类的地方执行。如果 eb2 或 eb3 需要在 t1 之外的任务名中执行,那么这些 Bean 必须定义工作单元并将相应的任务名与工作单元相关联。
注意,如果应用程序部署者未专门针对某种方法配置事务,那么在缺省情况下,WebSphere Application Server 会创建全局事务。这很重要,其原因是如果对某种方法定义了任务,但没有专门对该方法配置 UOW,那么 EJB 容器会自动代表该方法创建全局事务。因此,此任务名与 UOW 相关联,并且使用映射至此任务的任何应用程序概要文件。