Hi Mike,
Yes, we don't shutdown the Jetty Engine when the mServer.stop is called.
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 Jetty bug by adding the unit test which
simply calls start and shutdown method the JettyHTTPServerEngine.
It may take some time to resolve this issue.
Now I am afraid you still need to shutdown the Jetty Engine by using the
code that you showed below.
Anyway, I filled a JIRA for it[1], maybe we can find a better way to
resolve this later.
[1] https://issues.apache.org/jira/browse/CXF-865
Willem.
Pilone, Mike wrote:
Hello all,
I was previously using XFire and I am moving my application over to CXF. Right now I am just prototyping some application features and I needed a quick solution for remote administration. The simple frontend/embedded Jetty solution was working really well for me with XFire, but I am having a problem in CXF. 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");
}
}
Michael Pilone
Senior Software Engineer
Vangent, Inc.
Blueprint Solutions
(c) 703-969-7493
Updated email address: [EMAIL PROTECTED]
Visit our new web site: www.vangent.com
****************************************************************************
This email may contain material confidential to
Pearson. If you were not an intended recipient,
please notify the sender and delete all copies.
We may monitor email to and from our network.
****************************************************************************