Как освободить порт CXF-Endpoint изящно? - PullRequest
0 голосов
/ 30 марта 2020

Я использую CXF, чтобы просто опубликовать sh конечную точку, скажем:

final String uri = http://myServiceEndpoint:12345
final Endpoint endpoint = Endpoint.publish(uri, MyService());

После некоторой обработки я хочу закрыть конечную точку и освободить порт с помощью:

endpoint.stop();

Сразу после инструкции «стоп» другая служба должна запустить и связать вышеупомянутый порт, но я получаю следующую ошибку:

Bind to port 12345 failed: java.net.BindException: Address already in use: bind
    at java.base/sun.nio.ch.Net.bind0(Native Method)
    at java.base/sun.nio.ch.Net.bind(Net.java:455)
    at java.base/sun.nio.ch.Net.bind(Net.java:447)
    at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
    at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
    at org.apache.http.impl.nio.reactor.DefaultListeningIOReactor.processSessionRequests(DefaultListeningIOReactor.java:243)
    at org.apache.http.impl.nio.reactor.DefaultListeningIOReactor.processEvents(DefaultListeningIOReactor.java:144)
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:348)
    at de.hacon.dds.actor.net.http.hc.HttpApacheManager.lambda$startTheReactorQuaid$2(HttpApacheManager.java:135)
    at java.base/java.lang.Thread.run(Thread.java:834)

Что я могу сделать, чтобы немедленно освободить порт?

1 Ответ

0 голосов
/ 31 марта 2020

Тем временем я мог бы решить проблему, освобождая порт изящно:

endpoint.stop();
JettyHTTPServerEngineFactory.destroyForPort(myPort);

Дополнительный вызов метода уничтожения, порт немедленно освобождается, и другая служба может связать тот же порт.

...