Thanks for looking into it Willem. I'm not sure if you saw my other
email in this thread, but it looks like the shutdown order in the
JettyHttpServletEngine is not currently correct as well. That seems to
be causing the WARNING log messages when my work-around code is used. I
don't know if you want to include this as part of the issue report or in
a new report. BTW, I also noticed that the hang problem does not show up
in unit tests. My guess is that JUnit is calling System.exit or some
other hard termination of the JVM.

Is there any better work-around? Is it possible to use Jetty directly
and simply pass in a the CXFServlet? I'm relatively new to CXF (coming
from XFire) so I'm not completely familiar with the architecture.

Thanks,
-mike


-----Original Message-----
From: Willem Jiang [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, July 31, 2007 3:42 AM
To: [email protected]
Subject: Re: Application Hang at Exit with Simple Frontend

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. 
>
************************************************************************
****
>
>   
**************************************************************************** 
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. 
****************************************************************************

Reply via email to