我有一个web应用程序,它在部署到tomcat时使用javax.ws.rs.client ping rest服务。休息服务不是故意的。
但是,如果ping不是在一个单独的线程上,tomcat应用程序将不会部署,并且将被卡住(我猜http调用会超时吗?)。
我似乎不明白这是为什么。应用程序必须部署到tomcat才能使用javax.ws.rs.client,因为tomcat提供了实现?
这两种方法用于ping rest服务:
private Object sendGetRequest(WebTarget webTarget, Class<?> returnClass) throws BatchConnectionException {
if (returnClass != null) {
return webTarget.request().get(returnClass);
} else {
Response response = webTarget.request().get();
validateResponseStatus(response.getStatus());
return response;
}
}
public boolean isRestAccessible() {
boolean accessible = true;
try {
batchTaskUtils.sendRequest(batchTaskUtils.getBatchWebTarget().path(Resources.ROOT), String.class,
BatchTaskUtils.RequestType.GET);
} catch (BatchConnectionException e) {
accessible = false;
}
return accessible;
}
不作为扩展工作:
public class App extends GuiceServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
super.contextInitialized(servletContextEvent);
// stuck here
isRestAccessible();
}
}
按预期工作:
public class App extends GuiceServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
super.contextInitialized(servletContextEvent);
ExecutorService loggingExecutor = Executors.newFixedThreadPool(1);
loggingExecutor.execute(() -> {
isRestAccessible();
});
}
暂无答案!
目前还没有任何答案,快来回答吧!