CXF http-jetty transport do not call the jetty server engine shutdown when the 
server stop
------------------------------------------------------------------------------------------

                 Key: CXF-865
                 URL: https://issues.apache.org/jira/browse/CXF-865
             Project: CXF
          Issue Type: Bug
          Components: Transports
    Affects Versions: 2.0
            Reporter: willem Jiang


It appears that stopping the server in CXF is not shutting down the Jetty 
engine, which causes my application to hang because Jetty's threads are still 
blocking on the server socket accept. After a shutdown, I still see Thread 
[btpool0-0 - Acceptor0 [EMAIL PROTECTED]:10001] (Running).

I have a simple test application pasted below that can reproduce the problem. 
At this point I had to add some calls to get the destination and cast it to a 
Jetty specific class to get things to exit. Is there a better way to do this? 
Is there something I'm not configuring correctly? Any help is appreciated.
 
This is under Java 1.5 with CXF 2.0. Jetty is being included from the CXF libs 
directory. 
 
package org.mpilone.cxftest;
 
import java.io.IOException;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.frontend.ServerFactoryBean;
 
public class CxfJettyTest
{
  public void doIt()
  {
    System.out.println("Running test method");
  }
 
  public static void main(String[] args) throws IOException
  {
    // Create an Service and Server
    ServerFactoryBean serverFactory = new ServerFactoryBean();
    serverFactory.setServiceClass(CxfJettyTest.class);
    serverFactory.setServiceBean(new CxfJettyTest());
    serverFactory.setAddress("http://localhost:10001/RemoteApi";);
    Server mServer = serverFactory.create();
 
    mServer.start();
    System.in.read();
    mServer.stop();
 
    // Adding these lines allows the application to exit, but
    // WARNING: EXCEPTION
    // java.nio.channels.ClosedChannelException
    // log statements are produced.
 
// JettyHTTPDestination jettyDest = (JettyHTTPDestination)
// mServer.getDestination();
// JettyHTTPServerEngine jettyEngine = (JettyHTTPServerEngine)
// jettyDest.getEngine();
// jettyEngine.shutdown();
 
    System.out.println("Exiting");
  }
}


If you looking into the code you will find there is a note in the 
JettyHTTPServerEngine's removeServant(URL url)

            /* Bug in Jetty, we cannot do this.  If we restart later, data goes 
off
             * someplace unknown
            if (servantCount == 0) {
                try {
                   ....
            }*/

I just added the shutdown engine's code below the comments and tested it 
against the systest. There were some  tests (such as ws.rm , mtom )failed.
It looks like if we shutdown the engine, when the engine start again , the 
engine can not get the request info again , specially the http keep alive 
message.
Current I can't reproduce this bug by adding the unit test which simply calls 
start and shutdown method the JettyHTTPServerEngine.
It may take some time to resolve this issue. 


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to