调度程序配置或拓扑
调度程序使用一个数据库来存留运行哪些任务以及何时运行它们的相关信息。 更改应用程序服务器拓扑、应用程序配置或服务器配置时可能出错。 等您更改配置或拓扑时,请慎重考虑这一操作对调度程序的影响。
配置 EJB 计时器/调度程序
避免麻烦: 配置 EJB 计时器/调度程序时,请记住缺省调度程序在缺省情况下使用基于简单文件的 Apache Derby 数据库,以便您可以快速启动并运行正常运行的环境。 请勿将 Derby 数据库用于生产用途。 此外,缺省 Derby 数据库既不支持集群作业调度程序,也不支持集群批处理容器。
限制安全性
如果当禁用安全性时,您在应用程序服务器中创建任务并且后来决定启用安全性,那么调度程序可能无法运行任务。 当您创建任务时,应用程序线程的安全上下文将自动与任务存储在一起。 如果未随任务一起存储安全性 (请参阅 调度程序任务用户授权) ,并且您稍后在要运行该任务的服务器或应用程序上启用安全性,那么可能会记录以下错误:
SECJ0053E: Authorization failed for /UNAUTHENTICATED while invoking (Home)com/ibm/websphere/scheduler
/TaskHandler create:2 securityName: /UNAUTHENTICATED;accessID: UNAUTHENTICATED is not granted any of
the required roles: MySecurityRole在您启用服务器或应用程序中的安全性之前,请确定是否会对任何任务造成负面影响。 如果是这样,请使用 Scheduler API 或 WASScheduler MBean 取消这些任务并在配置安全性后重新创建它们。
应用程序服务器拓扑更改
创建任务时,调度程序将存储 TaskHandler、NotificationSink 和 UserCalendar home 的 javax.ejb.HomeHandle 对象。 稍后运行该任务时,这些主句柄将重新膨胀并用于访问 Enterprise JavaBeans (EJB) 组件主目录。 当 Home 句柄引用单服务器环境中的某个 EJB 时,Home 句柄与该服务器具有亲缘关系。 当 Home 句柄引用集群中的某个 EJB 组件时,Home 句柄与该集群具有亲缘关系。
如果 Home 句柄引用的应用程序服务器或工作负载管理 (WLM) 集群不可用,那么调度程序将无法运行该任务并记录以下错误:
SCHD0063E: A task with ID 123 failed to run on Scheduler MyScheduler (sched/MyScheduler) because of
an exception: {cause of failure}如果您将应用程序服务器升级为集群或对象请求代理 (ORB) ORB_LISTENER_ADDRESS 未设置到一个固定端口号(请参阅“配置入站传输”),那么任务也可能失败,因为 Home 句柄中存储的信息不包含查找期望服务器的相应信息。
升级为调度程序集群
调度程序集群 (不与 WLM 集群混淆) 是不同应用程序服务器上的调度程序配置的集合,它们共享相同的 Java 命名和目录接口 (JNDI) 名称, Java 数据库连接 (JDBC) 数据源和表前缀。 如果您将一个独立调度程序升级为一个集群调度程序,那么应用程序以及它所需的任何相关资源都必须是可用的。 否则,安排的任务将无法运行并且可能记录错误消息:
SCHD0103W: The Scheduler MyScheduler (sched/MyScheduler) was unable to run task 123 because the
application or module is unavailable: MyTaskHandlerEJB为避免应用程序可用性的相关问题并实现最优结果,请在调度程序集群中使用与 WLM 集群中相同的服务器。
复用调度程序表
当更改任何拓扑、从开发环境转向生产环境或作出增加环境限制的任何配置更改时,如果使用一组不同的调度程序表,您可能获得最优结果。 不慎重规划而直接复用前发行版中用于安排任务的调度程序表可能导致下列问题:
- EJB 组件运行于意外应用程序服务器中。
- 由于安全凭证无效或缺少安全凭证导致任务无法运行。
- 由于 Java Platform, Enterprise Edition (Java EE) 上下文信息无效或缺少这些信息而导致任务无法运行。
对此类问题进行诊断相当棘手并且需要对安装并配置了调度程序的所有服务器中的日志进行分析。 当找到存在问题的任务时,您可以使用 Scheduler API 取消这些任务或删除并重新创建表。