Liberty app-server上的Quartz预定作业调用REST抛出异常

时间:2016-03-10 18:08:09

标签: quartz-scheduler jersey-2.0 websphere-liberty

我真的很麻烦在应用服务器中获取石英作业来调用REST服务 - 完全不解(:

我有石英(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

当我搜索上面的例外情况时,除了一个与之相关的堆栈跟踪之外,我没有看到太多: NullPointerException when running CXF JAX-RS 2.0 client "target" method in Liberty Profile under a Thread 这让我相信这里可能存在某种形式的线程冲突。

为了证明我的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

我的作业类使用注释 - @DisallowConcurrentExecution

我使用的是球衣2.17 libs&杰克逊图书馆 我为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服务很简单。 在app-server中运行quartz时,是否需要执行anyconfig才能调用REST服务? - 任何人都有这个工作?

1 个答案:

答案 0 :(得分:0)

看来我们在最新的Liberty fixpack中修复了这个NPE,看起来here,8.5.5.9 fixpack计划于3月18日上市。一旦发布,请测试并确定它是否解决了这个问题,并且如果没有让我们知道。