JNDI 树:自定义工作管理器与默认工作管理器

问题描述

我通过 Weblogic 控制台创建了一个全局范围的自定义工作管理器“WorkManagerHighPrio”。
认工作管理器“default”列在 JNDI 树中,可以通过 java:global/wm/default 查找其引用。我想知道为什么我的自定义工作管理器没有列在 JNDI 树中,而且查找 URL 是 java:comp/env/wm/WorkManagerHighPrio

java:globaljava:comp/env

我签入了 config.xml,两个工作经理的配置相似:

    <work-manager>
      <name>default</name>
      <target>app01_cluster</target>
      <min-threads-constraint>default_MinThreads</min-threads-constraint>
      <max-threads-constraint>default_MaxThreads</max-threads-constraint>
      <ignore-stuck-threads>false</ignore-stuck-threads>
    </work-manager>
    <work-manager>
      <name>WorkManagerHighPrio</name>
      <target>app01_cluster</target>
    </work-manager>

我需要在 java:global/wm 中绑定自定义工作管理器,因为我需要在资源适配器中使用这个工作管理器。

WorkManager wm = (WorkManager) ic.lookup("java:global/wm/default");

在资源适配器应用程序中,我设法通过查找检索了认工作管理器的引用,即使我遇到了下一个问题:

weblogic.work.j2ee.J2EEWorkManager cannot be cast to javax.resource.spi.work.WorkManager

我以为,如果我在 ra 中查找工作经理,它会自动转换为 javax.resource.spi.work.WorkManager,但我错了。

解决方法

您必须使用的“WorkManager”类是:commonj.work.WorkManager

如文档中所述:

工作管理器 API

工作管理器 API,commonj.work,提供了一组接口,用于 允许应用程序同时执行多个工作项 容器内。

那里也有一个简单的“工作经理示例”:

https://docs.oracle.com/middleware/12212/wls/COMMJ/using_commonj.htm#GUID-72F860BE-9315-417E-B406-2C1ED17CE87F