2016-05-26 23 views
2

Wir verwenden Jetty 9.3, das mehrere Webservice-Endpunkte integriert und veröffentlicht (unter Verwendung von Endpoint.publish). Ich bin jedoch unsicher, wie man einige von ihnen auf einem anderen TCP-Port veröffentlichen kann.Jetty veröffentlicht Endpunkte auf mehreren TCP-Ports

Endpoint-Publishing:

endpoint = Endpoint.publish("http://0.0.0.0:8081/services/Service1"), service1); 
endpoint = Endpoint.publish("http://0.0.0.0:8081/services/Service2"), service2); 
endpoint = Endpoint.publish("http://0.0.0.0:8082/services/Service3"), service3); 

Erwartet: Fabrikat Leistung 1 und 2 verfügbar auf Port 8081 und nur 8081 und Service3 auf Port 8082 und nur 8082.

Aktuell: Alle drei Dienste verfügbar an beiden TCP-Ports.

Einrichten unserer Embedded-Anlegestelle verwenden mit:

JettyHttpServerProvider.setServer(jettyWebServer); 
System.setProperty("com.sun.net.httpserver.HttpServerProvider", JettyHttpServerProvider.class.getName()); 

Für Vollständigkeit, Anlegestelle Webserver init:

jettyWebServer = new Server(new DelegatingThreadPool(new QueuedThreadPool())); 
ServerConnector connector = new ServerConnector(jettyWebServer); 
//connector.setHost(); 
connector.setPort(8081); 
jettyWebServer.addConnector(connector); 

Wäre dies für die zweite Port sonst Endpoint-Publishing für nicht hinzuzufügen arbeiten Service3:

connector = new ServerConnector(jettyWebServer); 
//connector.setHost(...); 
connector.setPort(8082); 
jettyWebServer.addConnector(connector); 
ContextHandlerCollection contexts = new ContextHandlerCollection(); 
jettyWebServer.setHandler(contexts); 

Aber dann sind alle drei auf Port 8081 und 8082 verfügbar. C Es gibt anscheinend nur eine einzige Methode: JettyHttpServerProvider.setServer(...), kein Add oder ähnliches.

Jede Hilfe wird geschätzt.

Antwort

3

konnte ich diese Arbeit bekommen durch zwei Jetty Server Erstellen von Instanzen und die globale JettyHttpServerProvider.server statisches Feld mit den verschiedenen Instanzen Einstellung wie folgt:

package com.scotth.jettypublish; 

import javax.xml.ws.Endpoint; 

import org.eclipse.jetty.http.spi.DelegatingThreadPool; 
import org.eclipse.jetty.http.spi.JettyHttpServerProvider; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.ServerConnector; 
import org.eclipse.jetty.server.handler.ContextHandlerCollection; 
import org.eclipse.jetty.util.thread.QueuedThreadPool; 

import com.scotth.jettypublish.ws.HelloWorld; 
import com.scotth.jettypublish.ws.impl.HelloWorldImplOne; 
import com.scotth.jettypublish.ws.impl.HelloWorldImplThree; 
import com.scotth.jettypublish.ws.impl.HelloWorldImplTwo; 

public class PublishTesterMain { 

    public static void main(String[] args) throws Exception { 

     Server ws1 = new Server(new DelegatingThreadPool(new QueuedThreadPool())); 
     ServerConnector connector = new ServerConnector(ws1); 
     connector.setPort(8081); 
     ws1.addConnector(connector); 
     ContextHandlerCollection contexts = new ContextHandlerCollection(); 
     ws1.setHandler(contexts); 

     Server ws2 = new Server(new DelegatingThreadPool(new QueuedThreadPool())); 
     ServerConnector connector2 = new ServerConnector(ws2); 
     connector2.setPort(8082); 
     ws2.addConnector(connector2); 
     ContextHandlerCollection contexts2 = new ContextHandlerCollection(); 
     ws2.setHandler(contexts2); 

     System.setProperty("com.sun.net.httpserver.HttpServerProvider", JettyHttpServerProvider.class.getName()); 

     HelloWorld service1 = new HelloWorldImplOne(); 
     HelloWorld service2 = new HelloWorldImplTwo(); 

     JettyHttpServerProvider.setServer(ws1); 
     Endpoint.publish("http://0.0.0.0:8081/services/Service1", service1); 
     Endpoint.publish("http://0.0.0.0:8081/services/Service2", service2); 
     ws1.start(); 

     HelloWorld service3 = new HelloWorldImplThree(); 

     JettyHttpServerProvider.setServer(ws2); 
     Endpoint.publish("http://0.0.0.0:8082/services/Service3", service3); 
     ws2.start(); 
     Thread.sleep(Long.MAX_VALUE); 
    } 

} 

Nach dieser Hauptverfahren läuft beobachtete ich die Standard gedruckt folgenden out:

2016-05-31 22:38:54.818:INFO::main: Logging initialized @212ms 
2016-05-31 22:38:55.807:INFO:oejs.Server:main: jetty-9.3.z-SNAPSHOT 
2016-05-31 22:38:55.870:INFO:oejsh.ContextHandler:main: Started [email protected]{/services/Service1,null,AVAILABLE} 
2016-05-31 22:38:55.870:INFO:oejsh.ContextHandler:main: Started [email protected]{/services/Service2,null,AVAILABLE} 
2016-05-31 22:38:55.901:INFO:oejs.AbstractConnector:main: Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} 
2016-05-31 22:38:55.902:INFO:oejs.Server:main: Started @1299ms 
2016-05-31 22:38:55.939:INFO:oejs.Server:main: jetty-9.3.z-SNAPSHOT 
2016-05-31 22:38:55.939:INFO:oejsh.ContextHandler:main: Started [email protected]{/services/Service3,null,AVAILABLE} 
2016-05-31 22:38:55.941:INFO:oejs.AbstractConnector:main: Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:8082} 
2016-05-31 22:38:55.942:INFO:oejs.Server:main: Started @1339ms 

Anfordern http://localhost:8081/services/Service1 und http://localhost:8081/services/Service2 ergaben die erwartete Web-Service-Endpunkt Gruß Seite, während http://localhost:8081/services/Service3 y ielded ein HTTP 404. Die Anforderung http://localhost:8082/services/Service3 ergab die erwartete Begrüßungsseite für den dritten Service-Endpunkt.

das Codebeispiel vervollständigen (wenn auch nicht erforderlich, wenn Sie bereits Ihr Dienst impl-Objekte zur Verfügung haben), hier ist die Service-Endpunkt-Schnittstelle I (gleiche Schnittstelle für drei impls) verwendet:

package com.scotth.jettypublish.ws; 

import javax.jws.WebMethod; 
import javax.jws.WebService; 

@WebService 
public interface HelloWorld { 

    @WebMethod 
    String sayHello(String name); 
} 

Hier sind die drei Web-Service-Implementierungen in den Endpoint.publish() Anrufe verwendet demonstriert:

One:

package com.scotth.jettypublish.ws.impl; 

import javax.jws.WebService; 

import com.scotth.jettypublish.ws.HelloWorld; 

@WebService(endpointInterface = "com.scotth.jettypublish.ws.HelloWorld") 
public class HelloWorldImplOne implements HelloWorld { 

    @Override 
    public String sayHello(String name) { 
     return "ONE Hello " + (name == null ? "World" : name); 
    } 

} 

Two:

package com.scotth.jettypublish.ws.impl; 

import javax.jws.WebService; 

import com.scotth.jettypublish.ws.HelloWorld; 

@WebService(endpointInterface = "com.scotth.jettypublish.ws.HelloWorld") 
public class HelloWorldImplTwo implements HelloWorld { 

    @Override 
    public String sayHello(String name) { 
     return "TWO Hello " + (name == null ? "World" : name); 
    } 

} 

Drei:

package com.scotth.jettypublish.ws.impl; 

import javax.jws.WebService; 

import com.scotth.jettypublish.ws.HelloWorld; 

@WebService(endpointInterface = "com.scotth.jettypublish.ws.HelloWorld") 
public class HelloWorldImplThree implements HelloWorld { 

    @Override 
    public String sayHello(String name) { 
     return "THREE Hello " + (name == null ? "World" : name); 
    } 

} 
+0

Danke, funktioniert perfekt. Fast excellent ausgezeichnete Antwort, gut gemacht und sehr geschätzt. –