我正在尝试将UI应用程序(使用commonj.Workmanager实现)从IBM Websphere迁移到Apache Tomcat + HTTPD。作为应用程序的一部分,任何时候,我们都会在MQ上接收消息,生成workItem并使用workManager.schedule(worker)方法对其进行调度。当它作为初始化Servlet的一部分执行时,此方法有效。但是,一旦应用程序启动并运行后,新消息进入队列,schedule方法将接受工作,而不会启动工作线程。你能帮忙吗?
我尝试将WorkItems添加到列表中并等待它们,但是线程没有启动,应用程序一直等到我不得不手动将其杀死。
我还尝试查找wi.getResult()和workItem.getStatus()的输出。结果是工作者对象和状态为1。尽管等待了很长时间,但工作仍未开始。
我检查它是否正在等待任何其他资源,它不需要任何其他资源。正在使用Workmanager异步执行它,以提高性能。
也没有抛出异常。
WorkManager wm = ServiceLocator.getInstance().getWorkManager("wm/default");
VerifyWorker worker = null;
worker = new VerifyWorker();
try
{
WorkItem wi= wm.schedule(worker);
System.out.println("Result: " + wi.getResult());
System.out.println("Status::::: " + wi.getStatus());
} catch (WorkException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
}
catch (ServiceLocatorException e)
{
e.printStackTrace();
}
VerifyWorker.java实现Work:
此方法具有一个运行方法,该方法对此工作线程具有业务逻辑。
预期:应执行VerifyWorker的run()中的逻辑。 实际:未调用run()方法。没有例外。状态为1(工作已接受但尚未开始)