Thanks. I'm trying to make a library that both can be used standalone and in a jsr 356 container. Guess there is no away around 2 different versions.
But again, sorry if I am repeating myself. Why can't jetty start the threads as daemon threads? I do have users that might not remember to close the library in a finally block. Which is needed, for example, if some exception is thrown. - Kasper On Mon, Jan 6, 2014 at 6:33 PM, Joakim Erdfelt <[email protected]> wrote: > That is an open bug with no good solution (yet) > > https://bugs.eclipse.org/bugs/show_bug.cgi?id=423646 > > There are 2 current workarounds on standalone client use at the moment. > > 1) use System.exit() on your standalone when you want to shutdown cleanly. > > package jetty.jsr356; > > import java.net.URI; > import java.util.concurrent.CountDownLatch; > > import javax.websocket.ClientEndpoint; > import javax.websocket.CloseReason; > import javax.websocket.ContainerProvider; > import javax.websocket.OnClose; > import javax.websocket.WebSocketContainer; > > @ClientEndpoint > public class TestClientA > { > private CountDownLatch closeLatch = new CountDownLatch(1); > > @OnClose > public void onClose(CloseReason close) > { > closeLatch.countDown(); > } > > public void waitForClose() throws InterruptedException > { > closeLatch.await(); > } > > public static void main(String[] args) > { > try > { > WebSocketContainer ws = > ContainerProvider.getWebSocketContainer(); > > TestClientA socket = new TestClientA(); > ws.connectToServer(socket,new URI("ws://wuhu.wuhu")); > socket.waitForClose(); > } > catch (Throwable t) > { > t.printStackTrace(); > } > finally > { > System.exit(0); > } > } > } > > > 2) or use the Jetty specific lifecycle to shutdown the container. > > > package jetty.jsr356; > > import java.net.URI; > import java.util.concurrent.CountDownLatch; > > import javax.websocket.ClientEndpoint; > import javax.websocket.CloseReason; > import javax.websocket.ContainerProvider; > import javax.websocket.OnClose; > import javax.websocket.WebSocketContainer; > > import org.eclipse.jetty.util.component.LifeCycle; > > @ClientEndpoint > public class TestClientB > { > private CountDownLatch closeLatch = new CountDownLatch(1); > > @OnClose > public void onClose(CloseReason close) > { > closeLatch.countDown(); > } > > public void waitForClose() throws InterruptedException > { > closeLatch.await(); > } > > public static void main(String[] args) > { > try > { > WebSocketContainer ws = > ContainerProvider.getWebSocketContainer(); > > try > { > TestClientB socket = new TestClientB(); > ws.connectToServer(socket,new URI("ws://wuhu.wuhu")); > socket.waitForClose(); > } > finally > { > if (ws instanceof LifeCycle) > { > ((LifeCycle)ws).stop(); > } > } > } > catch (Throwable t) > { > t.printStackTrace(); > } > } > } > > > > -- > Joakim Erdfelt <[email protected]> > webtide.com <http://www.webtide.com/> - intalio.com/jetty > Expert advice, services and support from from the Jetty & CometD experts > eclipse.org/jetty - cometd.org > > > On Mon, Jan 6, 2014 at 9:37 AM, Kasper Nielsen <[email protected]> wrote: > >> just following up on an old thread. >> >> Would it be possible to at least mark all jetty threads as daemon threads? >> >> >> A simple test like this is stuck forever. Because all the jetty threads >> are non daemon threads >> >> @ClientEndpoint >> >> *public* *class* Test { >> >> *public* *static* *void* main(String[] args) *throws* Exception { >> >> WebSocketContainer ws = ContainerProvider.*getWebSocketContainer* >> (); >> >> ws.connectToServer(*new* Test(), *new* URI("ws://wuhu.wuhu")); >> >> } >> >> } >> >> >> Cheers >> Kasper >> >> >> >> >> >> >> On Mon, Sep 9, 2013 at 6:25 PM, Joakim Erdfelt <[email protected]>wrote: >> >>> The JSR-356 websocket containers do not have a lifecycle. >>> It is expected that you request only 1 WebSocketContainer and use it for >>> the life of your JVM. >>> >>> Avoid using ContainerProvider.getWebSocketContainer() multiple times. >>> >>> Note, if all you are wanting is a container suitable for instantiating >>> outgoing connections from a web application, then you can access the >>> ServerContainer from >>> ServerContainer container = (ServerContainer) >>> HttpServletRequest.getAttribute("javax.websocket.server.ServerContainer"); >>> >>> There is only ever 1 of those (per web application) >>> From there you can use the container.connectToServer() calls like before. >>> >>> >>> -- >>> Joakim Erdfelt <[email protected]> >>> webtide.com <http://www.webtide.com/> - intalio.com/jetty >>> Expert advice, services and support from from the Jetty & CometD experts >>> eclipse.org/jetty - cometd.org >>> >>> >>> On Mon, Sep 9, 2013 at 7:18 AM, Kasper Nielsen <[email protected]>wrote: >>> >>>> Hi, >>>> >>>> I'm trying to port an existing Jetty 9.0 websocket implementation to >>>> javax.websocket. >>>> >>>> I'm creating a WebSocketContainer using >>>> WebSocketContainer container = ContainerProvider. >>>> *getWebSocketContainer*(); >>>> which will pick up an instance of ClientContainer/ServerContainer. >>>> >>>> What is the preferred way to shut down the container again seeing that >>>> WebSocketContainer does not have lifecycle methods? >>>> >>>> ((org.eclipse.jetty.util.component.ContainerLifeCycle) container >>>> ).stop(); >>>> works but depends on the Jetty implementation. >>>> >>>> Cheers >>>> Kasper >>>> >>>> _______________________________________________ >>>> jetty-users mailing list >>>> [email protected] >>>> https://dev.eclipse.org/mailman/listinfo/jetty-users >>>> >>>> >>> >>> _______________________________________________ >>> jetty-users mailing list >>> [email protected] >>> https://dev.eclipse.org/mailman/listinfo/jetty-users >>> >>> >> >> _______________________________________________ >> jetty-users mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/jetty-users >> >> > > _______________________________________________ > jetty-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/jetty-users > >
_______________________________________________ jetty-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/jetty-users
