EJB 命令组

AdminTask 对象的 EJB 命令组提供您可以用于处理企业 Bean 的命令。

removeAutomaticEJBTimers

应用程序或模块使用注解或 XML 来指示应用程序服务器自动创建 EJB 计时器。

自动创建的计时器保留在创建自动 EJB 计时器时应用程序或模块在其上运行的服务器关联的调度程序实例中。每个服务器上都配置调度,这样,拓扑中的每个服务器可能使用唯一的调度程序实例。在此情况下,特定于每个服务器的调度程序实例支持在该服务器中运行的 EJB 计时器。

每个调度程序实例与一组数据库表关联。如果您具有多个调度程序实例,请以唯一的前缀来配置每个调度程序实例以确保该实例映射到唯一的数据库表集合。

从服务器移除请求自动 EJB 计时器的应用程序或模块时,必须从相应的调度程序实例移除自动 EJB 计时器。 如果应用程序或模块安装在多个服务器上,且其中每个服务器使用唯一的调度程序实例,那么必须从其中每个调度程序实例移除计时器。换言之,在每个服务器上移除自动创建 EJB 计时器。

在某些情况下,移除或更新应用程序或模块导致从调度程序实例移除自动创建的 EJB 计时器。在此场景中,无需用户操作。

但是,在其他情况下,移除或更新应用程序或模块不会导致从调度程序实例移除自动创建的 EJB 计时器。在此情况下,您使用 removeAutomaticEJBTimers 命令来手动移除 EJB 计时器。

仅在连接方式中支持此命令。在网络部署拓扑中,Deployment Manager、NodeAgent 以及包含调度程序实例的受管服务器必须都在运行。在基础拓扑中,独立服务器必须在运行。

在 Rational® Application Developer 松散配置场景中,您必须手动移除自动创建的 EJB 计时器。而且,以编程方式创建的 EJB 计时器(与自动创建的 EJB 计时器不同)不会被自动移除或者被该命令移除。

在网络部署拓扑中,单个模块仅安装在拓扑中的部分服务器上时,必须从只与该部分服务器关联的调度程序实例移除与该模块关联的自动创建的计时器。无需清理对应于其上没有安装模块的服务器的调度程序实例。

目标对象:无

必需参数:
-appName
请求您要移除的自动创建的 EJB 计时器的应用程序的名称。(字符串,必需)

-serverName
运行应用程序或模块(其中包含您要移除的自动创建的 EJB 计时器)的服务器的名称。 该参数表示应用程序服务器的逻辑名,不是主机名。(字符串,必需)
可选参数:
-schedulerJNDIName
该参数表示调度程序实例的 JNDI 名称,该实例保留您要移除的自动创建的 EJB 计时器。

服务器实例始终配置来使用特定调度程序实例以支持自动创建的 EJB 计时器。您可以显式配置使用哪个调度程序实例,或者您可以选择不显式配置调度程序实例。在后一种情况中,使用缺省调度程序实例。

如果包含您要移除的自动创建的 EJB 计时器的调度程序实例是当前为服务器配置的同一调度程序实例,那么您可以省略此参数。在此情况下,该命令检查配置,发现当前配置的调度程序实例,然后予以使用。

但是,如果当前配置的调度程序实例是包含您要移除的 EJB 计时器的实例,那么指定包含这些计时器的调度程序实例的 JNDI 名称。 (字符串,可选)

-nodeName
包含服务器的节点的名称。(字符串,必需)
-moduleName
请求您要移除的自动创建的 EJB 计时器的模块的名称。如果您要移除应用程序中所有自动创建的计时器(无论其定义在哪个模块中),那么将忽略此参数。您希望移除应用程序中一个模块请求的自动创建的计时器,但是不移除同一应用程序中另一模块请求的计时器时,才指定此参数。(字符串,可选)

返回值:无

以下信息有助于确定何时需要此命令:
  • WebSphere® Application Server 尝试在满足以下条件时移除自动创建的 EJB 计时器:
    • 执行以下操作之一:
      • 应用程序卸载
      • 应用程序更新
      • 模块卸载
      • 模块更新
    • 以连接方式执行操作(不是 wsadmin -conntype none)。
    • 所需的服务器在操作时运行。
      • 对于网络部署拓扑,Deployment Manager、Node Agent 和包含自动创建的 EJB 计时器的受管服务器都在运行。
      • 对于基础拓扑,独立服务器正在运行。
    • 执行了正确的后续操作。
      • 对于网络部署拓扑,您保存更改并将其同步到 Node Agent。如果您保存更改而没有将其同步,那么不会移除自动创建的 EJB 计时器。 在同步处理期间,才移除自动创建的 EJB 计时器。
      • 对于基础拓扑,您保存更改。
    • 支持调度程序实例的数据库正在运行。
  • WebSphere Application Server 在发生以下任何情况时不会移除自动创建的 EJB 计时器:
    • 执行除了更新或卸载应用程序或模块之外的任何操作。
    • 以断开连接方式执行该操作(即使它是应用程序/模块卸载/更新)
    • 所需服务器未在运行。
      • 对于网络部署拓扑,Deployment Manager、Node Agent 或受管服务器未在运行。
      • 对于基础拓扑,独立服务器未在运行。
    • 没有执行正确的后续操作。
      • 对于网络部署拓扑,没有执行保存或同步。
      • 对于基础拓扑,没有执行保存。
    • 支持调度程序实例的数据库未在运行。
如果 WebSphere Application Server 在尝试从服务器移除自动创建的 EJB 计时器时遇到错误,那么将警告写入日志文件。

如果出错,或者如果应用程序服务器没有尝试移除自动创建的 EJB 计时器,或者如果您不确定是否移除了自动创建的 EJB 计时器,请手动发布 removeAutomaticEJBTimers 命令来确保移除自动创建的 EJB 计时器。如果从调度程序实例实际移除了自动创建的计时器,那么无需运行该命令,但是这样做没有坏处。

如果您在集群环境中运行,且您的集群包含多个节点,而其中每个节点包含映射到同一集群级别调度程序实例的服务器,那么只是必须从其中一个服务器移除自动创建的计时器。这是因为更新了共享的调度程序实例,而使用该共享的调度程序实例的所有服务器都看到此更改。

因此,如果一个节点中的服务器未在运行而您收到日志警告(无法从其移除自动计时器),但是您知道服务器与其他节点中成功清除的服务器共享集群级别调度程序实例,那么无需用户操作,因为已经更新了共享的调度程序实例。

集群中存在多个服务器,它们都是同一节点的一部分并共享单个集群级别调度程序实例,而其中一个或多个集群成员未在运行时,同样为 true。在此情况下,应用程序服务器发布日志警告:无法从这些服务器移除自动计时器。但是,如果您知道它们共享公共的调度程序实例,而成功清除了集群成员之一,那么无需用户操作,因为已经更新了共享的调度程序实例。

如果您在网络部署拓扑中运行且拥有多个服务器,那么使用的调度程序类型(缺省与定制配置)在计划程序清除方面对性能有影响。缺省 EJBContainer 调度程序对于每个服务器是唯一的。如果您在使用缺省 EJBContainer 调度程序实例,且您拥有五个服务器,这表示您拥有五个唯一的调度程序实例,在更新或移除应用程序时必须从全部五个实例中移除自动计时器。但是,如果您在使用单个共享定制配置调度程序实例,那么必须仅从该调度程序实例移除自动计时器一次。

示例 1

拓扑:

  • 在工作站 A 上运行的 Deployment Manager。
  • 在工作站 B 上运行的 Node Agent。该节点称为 Node01。
  • 在工作站 C 上运行的受管服务器 server1。
  • 在工作站 D 上运行的受管服务器 server2。
  • 安全性已启用。
  • server2 当前配置来使用包含计时器的同一调度程序实例。

背景:

以连接方式从管理控制台卸载 testApp 应用程序。您希望移除应用程序中所有自动创建的计时器(无论是哪个模块请求它们)。

Deployment Manager、Node Agent 和 server1 服务器都在运行,从 server1 移除自动 EJB 计时器。但是,server2 未在运行,所以没有从 server2 移除自动 EJB 计时器。

现在,您必须从 server2 手动移除自动 EJB 计时器。

操作:
  • 使用 Jacl,从 Deployment Manager 中已连接 wsadmin 会话,输入以下代码行:
    $AdminTask removeAutomaticEJBTimers "-appName testApp -serverName server2 -nodeName Node01"
  • 使用 Jython,从 Deployment Manager 中已连接 wsadmin 会话,输入以下代码行:
    AdminTask.removeAutomaticEJBTimers('-appName testApp -serverName server2 -nodeName Node01')

示例 2

拓扑:

  • 独立 server1 运行在工作站 A 上。该节点称为 Node01。
  • 管理安全性已禁用。
  • 创建自动 EJB 计时器时,server1 配置来使用调度程序实例 jndi/sched_1。但是,server1 当前配置来使用调度程序实例 jndi/sched_2

背景:

已从应用程序 testApp 卸载模块 mod1,但是因为 server1 配置来在卸载时使用 jndi/sched_2 实例,所以没有从调度程序实例 jndi/sched_1 移除自动 EJB 计时器。

现在,您必须从 server1 上的 jndi/sched_1 调度程序实例手动移除自动 EJB 计时器。

应用程序包含模块 mod1 和 mod2。这两个模块请求自动创建的 EJB 计时器。仍然安装了 mod2 模块,且您仍然需要其请求的自动创建的 EJB 计时器。您只希望移除 mod1 请求的自动创建的 EJB 计时器。

操作:
  • 使用 Jacl,从独立服务器中已连接 wsadmin 会话,输入以下代码行:
    $AdminTask removeAutomaticEJBTimers "-appName testApp -moduleName mod1 -serverName server1 -nodeName Node01 -schedulerJNDIName jndi/sched_1"
  • 使用 Jython,从独立服务器中已连接 wsadmin 会话,输入以下代码行:
    AdminTask.removeAutomaticEJBTimers('-appName testApp -moduleName mod1 -serverName server1 -nodeName Node01 -schedulerJNDIName jndi/sched_1')

指示主题类型的图标 参考主题



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