Liberty 应用程序服务器上的 Quartz 计划作业调用 REST 抛出异常
Quartz scheduled job on Liberty app-server calling REST throwing exception
我在应用程序服务器中获取 quartz 作业来调用 REST 服务时遇到了真正的麻烦 - 完全困惑(:
我部署了 quartz (v 2.2.2) 并在带有 Java 1.8 的 IBM Liberty Application Server (v 8.5.5.8) 上工作
它扫描目录中的文件,然后调用我的虚拟任务。
但是,当我用 REST WebClient 调用替换 Dummy Task 时 - 我得到了一个非常奇怪的堆栈跟踪。
java.lang.NullPointerException
[err] at com.ibm.ws.jaxrs20.client.bus.LibertyJAXRSClientBusFactory.getClientScopeBus(LibertyJAXRSClientBusFactory.java:89)
[err] at com.ibm.ws.jaxrs20.client.JAXRSClientImpl.target(JAXRSClientImpl.java:109)
[err] at org.apache.cxf.jaxrs.client.spec.ClientImpl.target(ClientImpl.java:100)
[err] at notification.server.rest.MyIBMHandler.testClient4(MyIBMHandler.java:61)
最后一行是我的,我写的代码只是基于此:https://www.ibm.com/support/knowledgecenter/was_beta_liberty/com.ibm.websphere.wlp.nd.multiplatform.doc/ae/twlp_jaxrs2.0_clientconfig.html
当我用谷歌搜索上面的异常时,除了一个与堆栈跟踪相关的异常之外,我没有看到太多:-
这让我相信这里可能存在某种形式的线程冲突。
为了证明我的 REST 客户端代码在我的 Liberty 应用程序服务器上没有问题,我确实将我的 REST 方法放入一个 servlet 并在那里调用它并且它确实工作正常。
即
public void testClient4() {
javax.ws.rs.client.ClientBuilder cb = ClientBuilder.newBuilder();
javax.ws.rs.client.Client c = cb.build();
String res = null;
try {
String resourceURL = "http://localhost:9080/SampleRest/sample/";
res = c.target(resourceURL).path("Greeting").request().get(String.class);
System.out.println("res:" + res);
} catch (Exception e) {
res = "[Error]:" + e.toString();
System.err.println("error:" + e.getMessage());
e.printStackTrace();
} finally {
if (c != null)
c.close();
System.out.println("res:" + res);
}
}
我的 Quartz 道具接近开箱即用,这里是线程池部分:-
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
我的工作 class 使用注释 - @DisallowConcurrentExecution
我正在使用 jersey 2.17 库和 jackson 库
我在我的 Liberty 配置文件中添加了许多功能 - 即
<featureManager>
<feature>jsp-2.3</feature>
<feature>jaxrs-2.0</feature>
<feature>servlet-3.1</feature>
<feature>apiDiscovery-1.0</feature>
<feature>jaxrsClient-2.0</feature>
</featureManager>
目前,调用的 REST 服务是一个简单的服务。
当 运行 石英在应用程序服务器中时,我是否需要执行任何配置才能调用 REST 服务? - 有人让这个工作吗?
看来我们在最新的 Liberty 修复包中修复了这个 NPE,看起来 here,8.5.5.9 修复包计划在 3 月 18 日可用。一旦发布,请测试并确定它是否修复了这个问题, 如果没有请告诉我们。
我在应用程序服务器中获取 quartz 作业来调用 REST 服务时遇到了真正的麻烦 - 完全困惑(:
我部署了 quartz (v 2.2.2) 并在带有 Java 1.8 的 IBM Liberty Application Server (v 8.5.5.8) 上工作 它扫描目录中的文件,然后调用我的虚拟任务。
但是,当我用 REST WebClient 调用替换 Dummy Task 时 - 我得到了一个非常奇怪的堆栈跟踪。
java.lang.NullPointerException
[err] at com.ibm.ws.jaxrs20.client.bus.LibertyJAXRSClientBusFactory.getClientScopeBus(LibertyJAXRSClientBusFactory.java:89)
[err] at com.ibm.ws.jaxrs20.client.JAXRSClientImpl.target(JAXRSClientImpl.java:109)
[err] at org.apache.cxf.jaxrs.client.spec.ClientImpl.target(ClientImpl.java:100)
[err] at notification.server.rest.MyIBMHandler.testClient4(MyIBMHandler.java:61)
最后一行是我的,我写的代码只是基于此:https://www.ibm.com/support/knowledgecenter/was_beta_liberty/com.ibm.websphere.wlp.nd.multiplatform.doc/ae/twlp_jaxrs2.0_clientconfig.html
当我用谷歌搜索上面的异常时,除了一个与堆栈跟踪相关的异常之外,我没有看到太多:-
为了证明我的 REST 客户端代码在我的 Liberty 应用程序服务器上没有问题,我确实将我的 REST 方法放入一个 servlet 并在那里调用它并且它确实工作正常。 即
public void testClient4() {
javax.ws.rs.client.ClientBuilder cb = ClientBuilder.newBuilder();
javax.ws.rs.client.Client c = cb.build();
String res = null;
try {
String resourceURL = "http://localhost:9080/SampleRest/sample/";
res = c.target(resourceURL).path("Greeting").request().get(String.class);
System.out.println("res:" + res);
} catch (Exception e) {
res = "[Error]:" + e.toString();
System.err.println("error:" + e.getMessage());
e.printStackTrace();
} finally {
if (c != null)
c.close();
System.out.println("res:" + res);
}
}
我的 Quartz 道具接近开箱即用,这里是线程池部分:-
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
我的工作 class 使用注释 - @DisallowConcurrentExecution
我正在使用 jersey 2.17 库和 jackson 库 我在我的 Liberty 配置文件中添加了许多功能 - 即
<featureManager>
<feature>jsp-2.3</feature>
<feature>jaxrs-2.0</feature>
<feature>servlet-3.1</feature>
<feature>apiDiscovery-1.0</feature>
<feature>jaxrsClient-2.0</feature>
</featureManager>
目前,调用的 REST 服务是一个简单的服务。 当 运行 石英在应用程序服务器中时,我是否需要执行任何配置才能调用 REST 服务? - 有人让这个工作吗?
看来我们在最新的 Liberty 修复包中修复了这个 NPE,看起来 here,8.5.5.9 修复包计划在 3 月 18 日可用。一旦发布,请测试并确定它是否修复了这个问题, 如果没有请告诉我们。