使用 TaskNameManager 接口

通过使用 TaskNameManager 接口,可以编程方式设置当前的任务名。它支持覆盖当前与执行线程相关联的任务并支持将当前任务复位为原始任务。

关于此任务

除了那些在选定了 5.x 兼容性方式属性的服务器上运行的 J2EE 1.3 应用程序之外,在为容器管理的事务或容器管理的 ActivitySession 配置的 Enterprise JavaBeans 中无法使用此接口,因为只能在启动工作单元时将工作单元与任务相关联。因此,设置任务名的调用必须在工作单元开始前调用。工作单元在开始后不能命名。只要忽略容器管理的工作单元执行期间对此接口的调用。

应用程序概要分析不支持在运行时的操作中执行任务查询。相反,应用程序与公开配置为应用程序管理的任务的逻辑任务名进行交互。逻辑引用允许在不重新编译应用程序的情况下,更改实际任务名。

在可能的情况下,避免程序化设置任务。公开的方法导致更便携的功能,它可以在不需要重新开发和重新编译的情况下简单地调整。

注: 如果您在“应用程序概要文件服务的控制台”页面上选择 5.x 兼容性方式属性,那么 J2EE 1.3 应用程序上配置的任务不需要与工作单元关联,而且可任意被应用或覆盖。这不是建议的操作方式,而且可能导致数据库访问期间的意外死锁。对于在 Application Profiling 5.x 兼容性方式下运行的应用程序和不在兼容性方式下运行的应用程序之间的请求,任务不进行通信。

要让 V6.0 客户机与 Application Profiling 5.x 兼容性方式下运行的应用程序进行交互,必须将客户机进程中的 appprofileCompatibility 系统属性设置为 true。您可通过在调用 launchClient 命令时指定 -CCDappprofileCompatibility=true 选项来完成此任务。

过程

  1. 配置应用程序管理的任务。 应用程序概要分析要求以程序化方式设置的任何任务声明任务名引用。任务名引用引入间接的级别,以便运行时的实际任务可在不需要重新编码或重新编译的情况下,由重新装配来调整。任何尝试设置未声明为任务引用的任务名都会导致异常的产生。如果在设置任务时工作单元已开始,那么现有工作单元与任务名不关联。只有任务名设置后开始的工作单元与任务相关联。
    配置应用程序管理的任务,如以下主题中所描述。要完成这些任务,请参阅组装工具信息中心:
    • 为 Web 组件配置应用程序管理的任务。
    • 为应用程序客户机配置应用程序管理的任务。
    • 为 Enterprise JavaBeans 配置应用程序管理的任务。
  2. 对 TaskNameManager 接口执行 Java 命名和目录接口 (JNDI) 查询技术:
    InitialContext ic = new InitialContext(); 
    TaskNameManager tnManager = ic.lookup
    ("java:comp/websphere/AppProfile/TaskNameManager");
    如果禁用应用程序概要分析服务,那么 TaskNameManager 接口不绑定到名称空间。
  3. 设置任务名:
    try {
    tnManager.setTaskName("updateAccount");
    }
    catch (IllegalTaskNameException e) {
    // task name reference not configured. Handle error.
    }
    // . . .
    //
    传递至 setTaskName() 方法的名称(在此示例中为“updateAccount”)实际上是您在步骤 1 中配置的任务名引用。
  4. 开始 UserTransaction
    注: 如果在设置了 5.x 兼容性方式的情况下使用 J2EE 1.3 应用程序,那么在步骤 3 中设置的任务名现在就是活动任务名,而且您可以忽略此步骤。
    如果使用的是 J2EE 应用程序且未设置兼容性方式,或使用的是 J2EE 1.4 应用程序,那么必须开始事务以使任务名变成活动的。任务名只能与事务相关联。而且,它是在该事务开始时与该事务相关联的,而且在该事务的生命期内,该任务名将始终与该事务相关联。因此,上面设置的任务名在此时不是活动的。必须如以下代码段所示那样开始 UserTransaction:
    try{
        InitialContext initCtx = new InitialContext();
        userTran = (UserTransaction) initCtx.lookup("java:comp/UserTransaction");
        userTran.begin();
    }
    catch(Exception e){
    }         
    // . . .
    //
    注意 TaskNameManager 接口的 resetTaskName() 方法。除非是在“应用程序概要文件服务的控制台”页面上选定了 5.x 兼容性方式属性的服务器上运行的 J2EE 1.3 应用程序调用,否则重置任务名不起作用。这不是建议的操作方式,而且可能导致数据库访问期间的意外死锁。如果 5.x 兼容性方式设置为撤销任何 setTaskName() 方法操作的影响,而且在组件开始执行时,不管当前任务名是什么都重新建立任务名,J2EE 1.3 应用程序才应该使用对 resetTask( ) 的调用。如果尚未调用 setTaskName() 方法,那么 resetTaskName() 方法就不起作用。

指示主题类型的图标 任务主题



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