At 6:37 PM -0700 04/23/2001, Arun Katkere wrote:
>In my experience (having started/stopped Tomcat engine programatically via
>ContextManager API in a loop 100s of times), server socket is always closed
>correctly. And looking at 3.2.2 beta 3 source code, both PoolTcpEndpoint and
>SimpleTcpEndpoint close the server socket during shutdownEndpoint().
Could you provide sample code? Better yet, an explanation for the
symptoms I provided? I'm inferring the cause but the symptoms are
100% rock solid.
>BTW, doesn't your doStop() below kill the VM because there is a
>System.exit() in Ajp12ConnectionHandler shutdown?
It does kill the GUI, but System.exit() doesn't kill VisualAge.
Hadnn't dug into this gui problem because the gui is useless after
doStop anyway.
>ps: Each invocation leaves some threads running, which is bug 1418
>(http://nagoya.apache.org/bugzilla/show_bug.cgi?id=1418), resolved for 3.3
>(not 3.2.2). There is also some memory leak which I haven't had a chance to
>track down, yet.
>
>> -----Original Message-----
>> From: Brad Cox PhD [mailto:[EMAIL PROTECTED]]
>> Sent: Monday, April 23, 2001 6:04 PM
>> To: [EMAIL PROTECTED]
>> Subject: ServerSocket not being closed properly.
>>
>>
>> At 7:06 PM -0500 04/23/2001, Marc Saegesser wrote:
>> >I was just about to call the vote for the final release of
>> Tomcat 3.2.2
>> ...
>>
>> While you're at it, could you ensure that tomcat closes its server
>> socket instead of relying on the system to do it when the VM exits?
>> This is a long-standing problem that interferes with running tomcat
>> inside IBM's VisualAge, or (equivalently) building java GUIs for
>> starting and stopping the server.
>>
>> Here's what I've been using in a GUI for starting and stopping tomcat.
>>
>> private void doStart(String[] args)
>> {
>> org.apache.tomcat.startup.Tomcat.main(args);
>> }
>> private void doStop()
>> {
>> String[] stopArgs = new String[] { "-stop" };
>> org.apache.tomcat.startup.Tomcat.main(stopArgs);
>> }
>>
>> The buttons work the first time they're used. The start buttons fails
>> the second times (either by the same GUI or by any other means during
>> the same VisualAge session) because the server socket is still being
>> held open by the lack of an explicit close. The only way I've found
>> to clear the problem is to exit VisualAge altogether; a SLOOOWWWW
>> process.
>>
>> I've seen the same problem in my own applications. The fix was to be
>> SURE that the ServerSocket is closed EXPLICITLY rather than leaving
>> it to the operating system to do when the process exits.
>>
>> This session console log may help locate the problem.
>>
>> 2001-04-24 08:51:00 - ContextManager: Adding context Ctx( /examples )
>> 2001-04-24 08:51:01 - ContextManager: Adding context Ctx( /admin )
> > 2001-04-24 08:51:01 - Ctx( /svlt ): Set debug to 9
> > 2001-04-24 08:51:01 - ContextManager: Adding context Ctx( /svlt )
> > Starting tomcat. Check logs/tomcat.log for error messages
>> 2001-04-24 08:51:01 - ContextManager: Adding context Ctx( )
>> 2001-04-24 08:51:01 - ContextManager: Adding context Ctx( /test )
>> 2001-04-24 08:51:01 - ContextManager: Adding context Ctx( /digiprop )
>> 2001-04-24 08:51:02 - Ctx( /svlt ): XmlReader - init /svlt /digiprop
>> 2001-04-24 08:51:02 - Ctx( /svlt ): Reading /digiprop/WEB-INF/web.xml
>> 2001-04-24 08:51:02 - Ctx( /svlt ): Loading -2147483646 jsp
>> 2001-04-24 08:51:02 - Ctx( /svlt ): Loading 1 flush
>> 2001-04-24 08:51:03 - Ctx( /svlt ): Loading 1 page
>> 2001-04-24 08:51:03 - Ctx( /svlt ): Loading 1 login
>> FATAL:java.net.SocketException: Address already in use
>> java.net.SocketException: Address already in use
>> java.lang.Throwable(java.lang.String)
>> java.lang.Exception(java.lang.String)
>> java.io.IOException(java.lang.String)
>> java.net.SocketException(java.lang.String)
>> void
>> java.net.PlainSocketImpl.socketBind(java.net.InetAddress, int)
>> void java.net.PlainSocketImpl.bind(java.net.InetAddress, int)
>> java.net.ServerSocket(int, int, java.net.InetAddress)
> > java.net.ServerSocket(int, int)
>> java.net.ServerSocket
>> org.apache.tomcat.net.DefaultServerSocketFactory.createSocket(int,
>> int)
>> void org.apache.tomcat.service.PoolTcpEndpoint.startEndpoint()
>> void org.apache.tomcat.service.PoolTcpConnector.start()
>> void org.apache.tomcat.core.ContextManager.start()
>> void
>> org.apache.tomcat.startup.Tomcat.execute(java.lang.String [])
>> void org.apache.tomcat.startup.Tomcat.main(java.lang.String [])
>> ----> void digiprop.site.TomcatView.doStart()
>> void
>> digiprop.site.TomcatView.connEtoC2(java.awt.event.ActionEvent)
>> void
>> digiprop.site.TomcatView$IvjEventHandler.actionPerformed(java.
>awt.event.ActionEvent)
>> void
>> java.awt.Button.processActionEvent(java.awt.event.ActionEvent)
>> void java.awt.Button.processEvent(java.awt.AWTEvent)
>> void java.awt.Component.dispatchEventImpl(java.awt.AWTEvent)
>> void java.awt.Component.dispatchEvent(java.awt.AWTEvent)
>> void java.awt.EventDispatchThread.run()
>>
>> --
>> ---
>> Brad Cox, Ph.D.; [EMAIL PROTECTED]
>> Phone: 703 361 4751 Cell: 703 919-9623
>> http://virtualschool.edu
>>
--
---
Brad Cox, Ph.D.; [EMAIL PROTECTED]
Phone: 703 361 4751 Cell: 703 919-9623
http://virtualschool.edu