1

このコードで簡単に説明できるコンソールアプリケーションがあります。

public static void main(String[] args) throws InterruptedException {
    JAXRSServerFactoryBean sfb = new JAXRSServerFactoryBean();
    sfb.setResourceClasses(DummyService.class);
    sfb.setResourceProvider(DummyService.class, new SingletonResourceProvider(new DummyServiceImpl()));
    sfb.setProvider(new JacksonJaxbJsonProvider());
    sfb.setAddress("http://0.0.0.0:9000/");
    BindingFactoryManager manager = sfb.getBus().getExtension(BindingFactoryManager.class);
    JAXRSBindingFactory bindingFactory = new JAXRSBindingFactory();
    bindingFactory.setBus(sfb.getBus());
    manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID, bindingFactory);
    Server server = sfb.create();       
    server.stop(); // here
}

私はこのプログラムをEclipseから実行していますが、最終的にはすぐに終了することを期待していserver.stop()ます。このコード行はアプリケーションによって実行されたままなので、手動でシャットダウンする必要があります。CXFがコンソールに出力するログは次のとおりです。

Aug 13, 2012 10:51:10 PM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be http://0.0.0.0:9000/
2012-08-13 22:51:10.598:INFO:oejs.Server:jetty-7.5.3.v20111011
2012-08-13 22:51:10.646:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:9000 STARTING
2012-08-13 22:51:10.662:INFO:oejsh.ContextHandler:started o.e.j.s.h.ContextHandler{,null}
2012-08-13 22:51:10.663:INFO:oejsh.ContextHandler:stopped o.e.j.s.h.ContextHandler{,null}

アプリケーションへの呼び出しserver.stop()がまだ実行されているが、サーバーが要求に応答しないため、何か他のものをシャットダウンする必要があるように感じます。

それを止める適切な方法は何ですか?

アップデート

server.stop();
server.destroy();

また、動作しません。

アップデート

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-bundle-jaxrs</artifactId>
  <version>2.6.1</version>
</dependency>
4

2 に答える 2

8

で修正

server.stop();
server.destroy();
sfb.getBus().shutdown(true)

汚いハックのように感じます。

于 2012-08-13T19:29:41.187 に答える
0

javadoc(http://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.html)から:

[..]これにより、サーバーが起動し、ServerManagerに登録されます。終了したら、作成したサーバーを明示的に閉じる必要があることに注意してください。

myServer.close();
myServer.destroy();
于 2012-08-13T19:00:59.187 に答える