Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Exception deploying Servlet and Metro WS

If I use the http-spi functions in a non-shared mode I will end up with two servers
listening on two different ports, and the main reason for using the http-spi is sharing
the same port in all my servlets.

If I manage the server myself, It won't be possible to publish the Endpoint as you suggested:

--(snip)--
System.setProperty("com.sun.net.httpserver.HttpServerProvider",
"org.eclipse.jetty.http.spi.JettyHttpServerProvider");

InetSocketAddress addr = new InetSocketAddress("localhost", 8080);
HttpServer server = new JettyHttpServerProvider.createHttpServer(addr, 10);
Endpoint endpoint = Endpoint.publish(endpointURL, myWebServices);
server.start();

--(snip)--

In this code snippet the Endpoint.publish() will instantiate another
server using ServerMgr and won't use the server manually created.

---
Alejandro Alberola
Bio Data Systems
---
El 02/07/14 18:17, Joakim Erdfelt escribió:
That stacktrace is telling you that 

com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:85) is attempting to create a context on a server.

The fact that it attempts to .setExecutor() means that it created a new server at the point of ServerMgr.createContext().
But what is odd is that this attempt to .setExecutor() occurred on an already started server. (which is a no-no, and the cause of the error).

You might want to enable java.util.logging and set the logger named "com.sun.xml.internal.ws" to level FINEST and see what its attempting to do.

Some thoughts, because you are using JettyhttpServerProvider.setServer(server), you are essentially wanting to use a shared server instance, regardless of subsequent HttpServer.createHttpServer() calls.
This might be tripping up the WS implementation.

You'll either want to manage the server entirely yourself, or use the http-spi functions in a non-shared mode.

So that simplifies your codebase to the following ....

--(snip)--
System.setProperty("com.sun.net.httpserver.HttpServerProvider",
"org.eclipse.jetty.http.spi.JettyHttpServerProvider");

InetSocketAddress addr = new InetSocketAddress("localhost", 8080);
HttpServer server = new JettyHttpServerProvider.createHttpServer(addr, 10);
Endpoint endpoint = Endpoint.publish(endpointURL, myWebServices);
server.start();

--(snip)--

This is using the http-spi directly, allowing it to manage the http server state and whatnot.
Not the hybrid approach that you were working with.

It seems that the WS implementation you are using requires this approach.


--
Joakim Erdfelt <joakim@xxxxxxxxxxx>
Expert advice, services and support from from the Jetty & CometD experts


On Wed, Jul 2, 2014 at 8:32 AM, Alejandro Alberola <alberola@xxxxxx> wrote:
The fix works. But, is there a way to hot deploy the WS once the Server has been started ?

If I publish the WS after the Server has been started I get:

Caused by: java.lang.IllegalStateException: STARTED
    at org.eclipse.jetty.http.spi.DelegatingThreadPool.setExecutor(DelegatingThreadPool.java:55)
    at org.eclipse.jetty.http.spi.JettyHttpServer.setExecutor(JettyHttpServer.java:129)
    at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:85)
    ... 9 more


Thanks.
---
Alejandro Alberola
Bio Data Systems
---
El 01/07/14 19:47, Joakim Erdfelt escribió:
You are hitting this requirement ...


To fix, change:

Server server = new Server(8080);

to

Server server = new Server(new DelegatingThreadPool()); // <-- required for http-spi
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);  // <-- your port is now set via a connector
server.addConnector(connector);

and try again.

--
Joakim Erdfelt <joakim@xxxxxxxxxxx>
Expert advice, services and support from from the Jetty & CometD experts


On Tue, Jul 1, 2014 at 2:21 AM, Alejandro Alberola <alberola@xxxxxx> wrote:
Hello,

I have an embedded Jetty 9.2.1 server in my application where I have deployed a
servlet in a ServletContextHandler. At the same time I want to deploy a Metro WS
in the same server using JettyHttpServerProvider, but when I try to publish the
WS Endpoint I get the following exception:

Caused by: com.sun.xml.internal.ws.server.ServerRtException: Server Runtime Error: java.lang.UnsupportedOperationException: !DelegatingThreadPool
    at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:102)
    at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:63)
    at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:171)
    at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:118)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:240)

If I use two Jetty server instances embedded in my application and listening in different ports,
all work properly, but I would like to share the same port among the servlet and the Metro WS.

My faulty code follows:

-------------------------------------------------
Server server = new Server(8080);

System.setProperty("com.sun.net.httpserver.HttpServerProvider",
"org.eclipse.jetty.http.spi.JettyHttpServerProvider");
JettyHttpServerProvider.setServer(server);

ContextHandlerCollection contexts = new ContextHandlerCollection();

servletContext =  new ServletContextHandler(server, "/myapp", true, false);
contexts.addHandler(servletContext);

ServletHolder servletHolder = new ServletHolder(MyServlet);
servletContext.addServlet(servletHolder, "/servlet-path");

HandlerCollection handlerCollection = new HandlerCollection();
handlerCollection.setHandlers(new Handler[]{ contexts });

Endpoint endpoint = Endpoint.publish(endpointURL, myWebServices);

server.setHandler(contexts);

server.start();
-------------------------------------------------

Any idea ?
Thanks.

---
Alejandro Alberola
Bio Data Systems
---

_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users



_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users


_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users



_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users


Back to the top