【问题标题】:NullPointerException running Batch job in WebLogic with managedScheduledExecutorServiceNullPointerException 在 WebLogic 中使用 managedScheduledExecutorService 运行批处理作业
【发布时间】:2018-04-20 12:32:37
【问题描述】:

我在我的项目中使用批处理作业并将其部署在 weblogic 上。我在 weblogic 控制台中设置数据源和模式名称。当我想通过运行BatchRuntime.getJobOperator().start("test-job", new Properties())开始工作时,出现以下错误:

javax.batch.operations.JobStartException: java.lang.NullPointerException
        at com.ibm.jbatch.container.api.impl.JobOperatorImpl.start(JobOperatorImpl.java:92)
        at com.test.job.JobUtils.startJob(JobUtils.java:19)
        at com.test.job.WaitScheduler.execute(WaitScheduler.java:33)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused By: java.lang.NullPointerException
        at com.ibm.jbatch.container.services.impl.SPIDelegatingThreadPoolServiceImpl.executeTask(SPIDelegatingThreadPoolServiceImpl.java:59)
        at com.ibm.jbatch.container.impl.BatchKernelImpl.startJob(BatchKernelImpl.java:135)
        at com.ibm.jbatch.container.api.impl.JobOperatorImpl.startInternal(JobOperatorImpl.java:123)
        at com.ibm.jbatch.container.api.impl.JobOperatorImpl.start(JobOperatorImpl.java:88)
        at com.test.job.JobUtils.startJob(JobUtils.java:19)
        at com.test.job.WaitScheduler.execute(WaitScheduler.java:33)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

在 EXECUTIONINSTANCEDATA 我有以下记录:

+-------------+-----------------+--------------------------------+-------------+-----------+--------------------------------+--------------+---------------+--------------+
| "JOBEXECID" | "JOBINSTANCEID" |          "CREATETIME"          | "STARTTIME" | "ENDTIME" |          "UPDATETIME"          | "PARAMETERS" | "BATCHSTATUS" | "EXITSTATUS" |
+-------------+-----------------+--------------------------------+-------------+-----------+--------------------------------+--------------+---------------+--------------+
| "25457"     | "25457"         | "20-APR-18 12.55.24.157000 PM" | ""          | ""        | "20-APR-18 12.55.24.157000 PM" | "<BLOB>"     | "STARTING"    | ""           |
+-------------+-----------------+--------------------------------+-------------+-----------+--------------------------------+--------------+---------------+--------------+

编辑: 新的堆栈跟踪(由 managedScheduledExecutorService 调度的作业)

javax.batch.operations.JobStartException: java.lang.NullPointerException
        at com.ibm.jbatch.container.api.impl.JobOperatorImpl.start(JobOperatorImpl.java:92)
        at com.test.job.JobUtils.startJob(JobUtils.java:22)
        at com.test.job.JobStarter.run(JobStarter.java:18)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at weblogic.work.concurrent.TaskWrapper.call(TaskWrapper.java:151)
        at weblogic.work.concurrent.future.AbstractFutureImpl.runTask(AbstractFutureImpl.java:391)
        at weblogic.work.concurrent.future.AbstractFutureImpl.doRun(AbstractFutureImpl.java:436)
        at weblogic.work.concurrent.future.ManagedScheduledFutureImpl.timerExpired(ManagedScheduledFutureImpl.java:86)
        at weblogic.work.concurrent.future.ManagedPeriodFutureImpl.timerExpired(ManagedPeriodFutureImpl.java:97)
        at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:301)
        at weblogic.work.concurrent.future.ManagedScheduledFutureImpl.run(ManagedScheduledFutureImpl.java:96)
        at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
        at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
        at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
        at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
        at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:644)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:415)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:355)
Caused by: java.lang.NullPointerException: null
        at com.ibm.jbatch.container.services.impl.SPIDelegatingThreadPoolServiceImpl.executeTask(SPIDelegatingThreadPoolServiceImpl.java:59)
        at com.ibm.jbatch.container.impl.BatchKernelImpl.startJob(BatchKernelImpl.java:135)
        at com.ibm.jbatch.container.api.impl.JobOperatorImpl.startInternal(JobOperatorImpl.java:123)
        at com.ibm.jbatch.container.api.impl.JobOperatorImpl.start(JobOperatorImpl.java:88)
        ... 17 common frames omitted

【问题讨论】:

  • 我取出石英并再次获得 NPE。我在上面添加了新的堆栈跟踪。
  • 您是在应用程序中打包 com.ibm.jbatch. 批处理容器,还是从 WebLogic 服务器获取它?
  • 我从 weblogic 得到的,我的包中没有依赖。
  • 粗略地说:批处理运行时在 WebLogic 中没有正确初始化,但我不确定问题出在哪里。什么版本的网络逻辑? (另外,我删除了我之前关于使用 Quartz 的评论,因为这不是你遇到的问题。)
  • Weblogic版本:12.2.1.3.0

标签: jakarta-ee weblogic weblogic12c java-batch jbatch


【解决方案1】:

我在 WLS 12.2.1.2.0 中遇到了类似的问题。仅当使用 EAR 部署重新启动 WLS 但在第一次部署所述 EAR 部署后会正常工作时,才会出现该错误。

问题是一个带有 @Startup 注释的单例 bean,它将调用 JobOperator 并将其存储在私有字段中:

private JobOperator jobOperator;

@PostConstruct
public void initialize() {
    jobOperator = BatchRuntime.getJobOperator();
}

解决方案是删除 @Startup 注释,以便 WLS 可以初始化 Batch 运行时,而不是使用 @PostConstruct 中 EAR 文件的类加载器,然后每次在应用程序中需要 JobOperator 时调用 BatchRuntime.getJobOperator()

【讨论】:

    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2021-01-15
    • 2015-07-30
    相关资源
    最近更新 更多