I've just sent the email to Jetty list:
http://article.gmane.org/gmane.comp.java.jetty.general/8218 

BTW, I've tested the code snippet with Jetty 5, Simple and AsyncWeb and they
all appear to properly stop/restart the container and connector. So, this is
definitely a Jetty 6 issue.

Thanks,
Jerome

> -----Message d'origine-----
> De : Jerome Louvel 
> Envoyé : lundi 23 octobre 2006 13:54
> À : discuss@restlet.tigris.org
> Objet : RE: starting, stopping and starting a container 
> throws an exception
> 
> 
> Hi again,
> 
> Thanks an interesting issue :-) After investigation, the 
> Container does close the connectors as intended. This is 
> actually done by the Component super class. In the Jetty 6 
> case, it does invoke the stop() method on the Jetty server, 
> which apparently invokes the close() / stop() methods on the 
> internal connectors...
> 
> That was weird to see that. Looking at the JDK's docs on 
> ServerSocket, I've realized that a call to 
> "setReuseAddress(true)" must be done before binding if you 
> want to reuse the socket. Jetty 6 doesn't seem to set this 
> property so I guess that the core of the problem.
> 
> I'll send an email to Jetty's list for confirmation. Any 
> other thoughts?
> 
> Best regards,
> Jerome  
> 
> > -----Message d'origine-----
> > De : Piyush Purang [mailto:[EMAIL PROTECTED] 
> > Envoyé : dimanche 22 octobre 2006 14:54
> > À : discuss@restlet.tigris.org
> > Objet : starting, stopping and starting a container throws an 
> > exception
> > 
> > Hi, 
> > 
> > stopping a running container and then starting it again throws the 
> > following exception 
> > 
> > 2006-10-21 23:55:11.968::INFO:  Logging to STDERR via 
> > org.mortbay.log.StdErrLog 
> > 2006-10-21 23:55:12.007::INFO:  jetty-6.0.x 
> > 2006-10-21 23:55:12.041::INFO:  Started 
> > SelectChannelConnector @ 127.0.0.1:8184 
> > Stopping container! 
> > Starting the container again! 
> > 2006-10-21 23:55:22.059::INFO:  jetty-6.0.x 
> > 2006-10-21 23:55:22.060::INFO:  Started 
> > SelectChannelConnector @ 127.0.0.1:8184 
> > 2006-10-21 23:55:22.061::WARN:  failed SelectChannelConnector 
> > @ 127.0.0.1:8184 
> > 2006-10-21 23:55:22.061::WARN:  failed 
> > [EMAIL PROTECTED] 
> > Exception in thread "main" java.net.BindException: Address 
> > already in use 
> >         at sun.nio.ch.Net.bind(Native Method) 
> >         at 
> > sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImp
> > l.java:119) 
> >         at 
> > sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) 
> >         at 
> > org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChanne
> > lConnector.java:152) 
> >         at 
> > org.mortbay.jetty.AbstractConnector.doStart(AbstractConnector.
> > java:313) 
> >         at 
> > org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectCha
> > nnelConnector.java:124) 
> >         at 
> > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycl
> > e.java:38) 
> >         at org.mortbay.jetty.Server.doStart(Server.java:217) 
> >         at 
> > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycl
> > e.java:38) 
> >         at 
> > com.noelios.restlet.ext.jetty.JettyServerHelper.start(JettySer
> > verHelper.java:152) 
> >         at 
> > com.noelios.restlet.ext.jetty.HttpServerHelper.start(HttpServe
> > rHelper.java:90) 
> >         at org.restlet.Server.start(Server.java:265) 
> >         at org.restlet.Component.start(Component.java:100) 
> >         at org.restlet.Container.start(Container.java:162) 
> >         at com.piy.restlet.Playground.main(Playground.java:71) 
> > 
> > 
> > 
> > If i look at the stacktrace I think the problem lies in the 
> fact that 
> > container.stop() doesn't stop the server (Doesn't propogate 
> the call 
> > to Server(s)) and the next call to start() tries to start the 
> > (new?)server. 
> > 
> > Now is that a bug or does the contract of the container say 
> that once 
> > you have started a container stop doesn't stop the servers or that 
> > there is latency to be expected or that starting after a stop isn't 
> > expected? 
> > 
> > Cheers 
> > Piyush 
> > 
> > --------------------------------------------------------------
> > ----------------------------- 
> > Code snippet to reproduce the problem 
> > 
> > 
> >         Container container = new Container(); 
> >         ServerList servers = container.getServers(); 
> > 
> >         Protocol httpProtocol = Protocol.HTTP; 
> >         String ipAddress = "127.0.0.1"; 
> >         int httpPort = 8184; 
> > 
> >         servers.add(httpProtocol, ipAddress, httpPort); 
> > 
> > 
> >         VirtualHost host = 
> > VirtualHost.createLocalHost(container.getContext()); 
> >         host.attach("/something", new Restlet() { 
> >             protected void handleGet(Request request, 
> > Response response) { 
> > 
> > response.setEntity("ManagedDelegatedRestletContainerFlavTwo 
> > says Hello 
> > World!", MediaType.TEXT_PLAIN); 
> >             } 
> >         }); 
> >         container.setDefaultHost(host); 
> >         container.start(); 
> > 
> >         try { 
> >             Thread.sleep(5000); 
> >         } catch (InterruptedException ex) { 
> >             Thread.currentThread().interrupt(); 
> >         } 
> >         System.out.println("Stopping container!"); 
> >         container.stop(); 
> > 
> > 
> >         try { 
> >             Thread.sleep(5000); 
> >         } catch (InterruptedException ex) { 
> >             Thread.currentThread().interrupt(); 
> >         } 
> >         System.out.println("Starting the container again!"); 
> > 
> >         container.start(); 
> > 
> > 

Reply via email to