You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsrf-commits@ws.apache.org by sc...@apache.org on 2005/08/02 18:30:44 UTC
svn commit: r227033 [23/27] - in /webservices/wsrf/trunk: ./
src/java/org/apache/ws/ src/java/org/apache/ws/addressing/
src/java/org/apache/ws/addressing/v2003_03/
src/java/org/apache/ws/addressing/v2004_08_10/
src/java/org/apache/ws/resource/ src/java...
Modified: webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisServer.java
URL: http://svn.apache.org/viewcvs/webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisServer.java?rev=227033&r1=227032&r2=227033&view=diff
==============================================================================
--- webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisServer.java (original)
+++ webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisServer.java Tue Aug 2 09:28:49 2005
@@ -1,468 +1,512 @@
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ws.util.test.axis;
-
-import org.apache.axis.EngineConfiguration;
-import org.apache.axis.collections.LRUMap;
-import org.apache.axis.components.logger.LogFactory;
-import org.apache.axis.components.threadpool.ThreadPool;
-import org.apache.axis.configuration.EngineConfigurationFactoryFinder;
-import org.apache.axis.management.ServiceAdmin;
-import org.apache.axis.server.AxisServer;
-import org.apache.axis.session.Session;
-import org.apache.axis.session.SimpleSession;
-import org.apache.axis.transport.http.SimpleAxisWorker;
-import org.apache.axis.transport.http.SimpleAxisServer;
-import org.apache.axis.utils.Messages;
-import org.apache.axis.utils.NetworkUtils;
-import org.apache.axis.utils.Options;
-import org.apache.commons.logging.Log;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.util.Map;
-
-/**
- * This is a simple implementation of an HTTP server for processing SOAP requests via Apache's xml-axis. This is not
- * intended for production use. Its intended uses are for demos, debugging, and performance profiling.
- * <p/>
- * Note this classes uses static objects to provide a thread pool, so you should not use multiple instances of this
- * class in the same JVM/classloader unless you want bad things to happen at shutdown.
- *
- * TODO: delete any methods that can be safely inherited from superclass
- *
- * @author Ian Springer
- */
-public class NotSoSimpleAxisServer extends SimpleAxisServer implements Runnable
-{
-
- public static final File DEFAULT_DOC_ROOT_DIR = new File( "./src/wsdl" );
- public static final int DEFAULT_MAX_THREADS = 200;
- public static final int DEFAULT_MAX_SESSIONS = 100;
-
- protected static final Log LOG = LogFactory.getLog( NotSoSimpleAxisServer.class.getName() );
-
- // session state.
- // This table maps session keys (random numbers) to SimpleAxisSession objects.
- //
- // There is a simple LRU based session cleanup mechanism, but if clients are not
- // passing cookies, then a new session will be created for *every* request.
- private Map m_sessions;
- //Maximum capacity of the LRU Map used for session cleanup
- private int m_maxSessions;
-
- private File m_docRootDir;
-
- /**
- * get the thread pool
- *
- * @return
- */
- public static ThreadPool getPool()
- {
- return m_pool;
- }
-
- /*
- * pool of threads
- */
- private static ThreadPool m_pool;
-
- /*
- * Are we doing threads?
- */
- private static boolean s_doThreads = true;
-
- /*
- * Are we doing sessions? Set this to false if you don't want any session overhead.
- */
- private static boolean s_doSessions = true;
-
- /**
- * Create a server with default options.
- */
- public NotSoSimpleAxisServer()
- {
- this( DEFAULT_DOC_ROOT_DIR );
- }
-
- /**
- * Create a server with the specified docRoot.
- */
- public NotSoSimpleAxisServer( File docRootDir )
- {
- this( docRootDir, DEFAULT_MAX_THREADS );
- }
-
- /**
- * Create a server with the specified docRoot and max threads.
- */
- public NotSoSimpleAxisServer( File docRootDir, int maxPoolSize )
- {
- this( docRootDir, maxPoolSize, DEFAULT_MAX_SESSIONS );
- }
-
- /**
- * Create a server with the specified docRoot, max threads, and max sessions.
- */
- public NotSoSimpleAxisServer( File docRootDir, int maxPoolSize, int maxSessions )
- {
- m_docRootDir = docRootDir;
- m_pool = new ThreadPool( maxPoolSize );
- m_sessions = new LRUMap( maxSessions );
- }
-
- /**
- * stop the server if not already told to.
- *
- * @throws Throwable
- */
- protected void finalize() throws Throwable
- {
- stop();
- super.finalize();
- }
-
- /**
- * get max session count
- *
- * @return
- */
- public int getMaxSessions()
- {
- return m_maxSessions;
- }
-
- /**
- * Resize the session map
- *
- * @param maxSessions maximum sessions
- */
- public void setMaxSessions( int maxSessions )
- {
- this.m_maxSessions = maxSessions;
- ( (LRUMap) m_sessions ).setMaximumSize( maxSessions );
- }
- //---------------------------------------------------
-
- protected boolean isSessionUsed()
- {
- return s_doSessions;
- }
-
- /**
- * turn threading on or off. This sets a static value
- *
- * @param value
- */
- public void setDoThreads( boolean value )
- {
- s_doThreads = value;
- }
-
- public boolean getDoThreads()
- {
- return s_doThreads;
- }
-
- public EngineConfiguration getMyConfig()
- {
- return m_myConfig;
- }
-
- public void setMyConfig( EngineConfiguration myConfig )
- {
- m_myConfig = myConfig;
- }
-
- /**
- * demand create a session if there is not already one for the string
- *
- * @param cooky
- *
- * @return a session.
- */
- protected Session createSession( String cooky )
- {
-
- // is there a session already?
- Session session = null;
- if ( m_sessions.containsKey( cooky ) )
- {
- session = (Session) m_sessions.get( cooky );
- }
- else
- {
- // no session for this cooky, bummer
- session = new SimpleSession();
-
- // ADD CLEANUP LOGIC HERE if needed
- m_sessions.put( cooky, session );
- }
- return session;
- }
-
- // What is our current session index?
- // This is a monotonically increasing, non-thread-safe integer
- // (thread safety not considered crucial here)
- public static int sessionIndex = 0;
-
- // Axis server (shared between instances)
- private static AxisServer myAxisServer = null;
-
- private EngineConfiguration m_myConfig = null;
-
- /**
- * demand create an axis server; return an existing one if one exists. The configuration for the axis server is
- * derived from #myConfig if not null, the default config otherwise.
- *
- * @return
- */
- public synchronized AxisServer getAxisServer()
- {
- if ( myAxisServer == null )
- {
- if ( m_myConfig == null )
- {
- m_myConfig = EngineConfigurationFactoryFinder.newFactory().getServerEngineConfig();
- }
- myAxisServer = new AxisServer( m_myConfig );
- ServiceAdmin.setEngine( myAxisServer, NetworkUtils.getLocalHostname() + "@" + m_serverSocket.getLocalPort() );
- }
- return myAxisServer;
- }
-
- /**
- * are we stopped? latch to true if stop() is called
- */
- private boolean stopped = false;
-
- /**
- * Accept requests from a given TCP port and send them through the Axis engine for processing.
- */
- public void run()
- {
- LOG.info( Messages.getMessage( "start01", "SimpleAxisServer",
- new Integer( getServerSocket().getLocalPort() ).toString(), getCurrentDirectory() ) );
-
- // Accept and process requests from the socket
- while ( !stopped )
- {
- Socket socket = null;
- try
- {
- socket = m_serverSocket.accept();
- }
- catch ( java.io.InterruptedIOException iie )
- {
- }
- catch ( Exception e )
- {
- LOG.debug( Messages.getMessage( "exception00" ), e );
- break;
- }
- if ( socket != null )
- {
- SimpleAxisWorker worker = new NotSoSimpleAxisWorker( this, socket, m_docRootDir );
- if ( s_doThreads )
- {
- m_pool.addWorker( worker );
- }
- else
- {
- worker.run();
- }
- }
- }
- LOG.info( Messages.getMessage( "quit00", "SimpleAxisServer" ) );
- }
-
- /**
- * Gets the current directory
- *
- * @return current directory
- */
- private String getCurrentDirectory()
- {
- return System.getProperty( "user.dir" );
- }
-
- // per thread socket information
- private ServerSocket m_serverSocket;
-
- /**
- * Obtain the serverSocket that that SimpleAxisServer is listening on.
- */
- public ServerSocket getServerSocket()
- {
- return m_serverSocket;
- }
-
- /**
- * Set the serverSocket this server should listen on. (note : changing this will not affect a running server, but if
- * you stop() and then start() the server, the new socket will be used).
- */
- public void setServerSocket( ServerSocket serverSocket )
- {
- m_serverSocket = serverSocket;
- }
-
- /**
- * Start this server.
- * <p/>
- * Spawns a worker thread to listen for HTTP requests.
- *
- * @param daemon a boolean indicating if the thread should be a daemon.
- */
- public void start( boolean daemon ) throws Exception
- {
- stopped = false;
- if ( s_doThreads )
- {
- Thread thread = new Thread( this );
- thread.setDaemon( daemon );
- thread.start();
- }
- else
- {
- run();
- }
- }
-
- /**
- * Start this server as a NON-daemon.
- */
- public void start() throws Exception
- {
- start( false );
- }
-
- /**
- * Stop this server. Can be called safely if the system is already stopped, or if it was never started.
- * <p/>
- * This will interrupt any pending accept().
- */
- public void stop()
- {
- //recognise use before we are live
- if ( stopped )
- {
- return;
- }
- /*
- * Close the server socket cleanly, but avoid fresh accepts while
- * the socket is closing.
- */
- stopped = true;
-
- try
- {
- if ( m_serverSocket != null )
- {
- m_serverSocket.close();
- }
- }
- catch ( IOException e )
- {
- LOG.info( Messages.getMessage( "exception00" ), e );
- }
- finally
- {
- m_serverSocket = null;
- }
-
- LOG.info( Messages.getMessage( "quit00", "SimpleAxisServer" ) );
-
- //shut down the pool
- m_pool.shutdown();
- }
-
- /**
- * Server process.
- */
- public static void main( String args[] )
- {
-
- Options opts = null;
- try
- {
- opts = new Options( args );
- }
- catch ( MalformedURLException e )
- {
- LOG.error( Messages.getMessage( "malformedURLException00" ), e );
- return;
- }
-
- String maxPoolSize = opts.isValueSet( 't' );
- if ( maxPoolSize == null )
- {
- maxPoolSize = ThreadPool.DEFAULT_MAX_THREADS + "";
- }
-
- String maxSessions = opts.isValueSet( 'm' );
- if ( maxSessions == null )
- {
- maxSessions = DEFAULT_MAX_SESSIONS + "";
- }
-
- String[] nonOptionArgs = opts.getRemainingArgs();
- NotSoSimpleAxisServer server = new NotSoSimpleAxisServer( new File( nonOptionArgs[0] ), Integer.parseInt( maxPoolSize ),
- Integer.parseInt( maxSessions ) );
-
- try
- {
- s_doThreads = ( opts.isFlagSet( 't' ) > 0 );
-
- int port = opts.getPort();
- ServerSocket ss = null;
- // Try five times
- final int retries = 5;
- for ( int i = 0; i < retries; i++ )
- {
- try
- {
- ss = new ServerSocket( port );
- break;
- }
- catch ( java.net.BindException be )
- {
- LOG.debug( Messages.getMessage( "exception00" ), be );
- if ( i < ( retries - 1 ) )
- {
- // At 3 second intervals.
- Thread.sleep( 3000 );
- }
- else
- {
- throw new Exception( Messages.getMessage( "unableToStartServer00",
- Integer.toString( port ) ) );
- }
- }
- }
- server.setServerSocket( ss );
- server.start();
- }
- catch ( Exception e )
- {
- LOG.error( Messages.getMessage( "exception00" ), e );
- return;
- }
- }
-}
+/*=============================================================================*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *=============================================================================*/
+package org.apache.ws.util.test.axis;
+
+import org.apache.axis.EngineConfiguration;
+import org.apache.axis.collections.LRUMap;
+import org.apache.axis.components.logger.LogFactory;
+import org.apache.axis.components.threadpool.ThreadPool;
+import org.apache.axis.configuration.EngineConfigurationFactoryFinder;
+import org.apache.axis.management.ServiceAdmin;
+import org.apache.axis.server.AxisServer;
+import org.apache.axis.session.Session;
+import org.apache.axis.session.SimpleSession;
+import org.apache.axis.transport.http.SimpleAxisServer;
+import org.apache.axis.transport.http.SimpleAxisWorker;
+import org.apache.axis.utils.Messages;
+import org.apache.axis.utils.NetworkUtils;
+import org.apache.axis.utils.Options;
+import org.apache.commons.logging.Log;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.Map;
+
+/**
+ * This is a simple implementation of an HTTP server for processing SOAP requests via Apache's xml-axis. This is not
+ * intended for production use. Its intended uses are for demos, debugging, and performance profiling.
+ * <p/>
+ * Note this classes uses static objects to provide a thread pool, so you should not use multiple instances of this
+ * class in the same JVM/classloader unless you want bad things to happen at shutdown.
+ *
+ * TODO: delete any methods that can be safely inherited from superclass
+ *
+ * @author Ian Springer
+ */
+public class NotSoSimpleAxisServer
+ extends SimpleAxisServer
+ implements Runnable
+{
+ /** DOCUMENT_ME */
+ public static final File DEFAULT_DOC_ROOT_DIR = new File( "./src/wsdl" );
+
+ /** DOCUMENT_ME */
+ public static final int DEFAULT_MAX_THREADS = 200;
+
+ /** DOCUMENT_ME */
+ public static final int DEFAULT_MAX_SESSIONS = 100;
+
+ /** DOCUMENT_ME */
+ protected static final Log LOG = LogFactory.getLog( NotSoSimpleAxisServer.class.getName( ) );
+
+ /*
+ * pool of threads
+ */
+ private static ThreadPool m_pool;
+
+ /*
+ * Are we doing threads?
+ */
+ private static boolean s_doThreads = true;
+
+ /*
+ * Are we doing sessions? Set this to false if you don't want any session overhead.
+ */
+ private static boolean s_doSessions = true;
+
+ // What is our current session index?
+ // This is a monotonically increasing, non-thread-safe integer
+ // (thread safety not considered crucial here)
+
+ /** DOCUMENT_ME */
+ public static int sessionIndex = 0;
+
+ // Axis server (shared between instances)
+ private static AxisServer myAxisServer = null;
+
+ // session state.
+ // This table maps session keys (random numbers) to SimpleAxisSession objects.
+ //
+ // There is a simple LRU based session cleanup mechanism, but if clients are not
+ // passing cookies, then a new session will be created for *every* request.
+ private Map m_sessions;
+
+ //Maximum capacity of the LRU Map used for session cleanup
+ private int m_maxSessions;
+ private File m_docRootDir;
+ private EngineConfiguration m_myConfig = null;
+
+ /**
+ * are we stopped? latch to true if stop() is called
+ */
+ private boolean stopped = false;
+
+ // per thread socket information
+ private ServerSocket m_serverSocket;
+
+ /**
+ * Create a server with default options.
+ */
+ public NotSoSimpleAxisServer( )
+ {
+ this( DEFAULT_DOC_ROOT_DIR );
+ }
+
+ /**
+ * Create a server with the specified docRoot.
+ */
+ public NotSoSimpleAxisServer( File docRootDir )
+ {
+ this( docRootDir, DEFAULT_MAX_THREADS );
+ }
+
+ /**
+ * Create a server with the specified docRoot and max threads.
+ */
+ public NotSoSimpleAxisServer( File docRootDir,
+ int maxPoolSize )
+ {
+ this( docRootDir, maxPoolSize, DEFAULT_MAX_SESSIONS );
+ }
+
+ /**
+ * Create a server with the specified docRoot, max threads, and max sessions.
+ */
+ public NotSoSimpleAxisServer( File docRootDir,
+ int maxPoolSize,
+ int maxSessions )
+ {
+ m_docRootDir = docRootDir;
+ m_pool = new ThreadPool( maxPoolSize );
+ m_sessions = new LRUMap( maxSessions );
+ }
+
+ /**
+ * get the thread pool
+ *
+ * @return
+ */
+ public static ThreadPool getPool( )
+ {
+ return m_pool;
+ }
+
+ /**
+ * demand create an axis server; return an existing one if one exists. The configuration for the axis server is
+ * derived from #myConfig if not null, the default config otherwise.
+ *
+ * @return
+ */
+ public synchronized AxisServer getAxisServer( )
+ {
+ if ( myAxisServer == null )
+ {
+ if ( m_myConfig == null )
+ {
+ m_myConfig = EngineConfigurationFactoryFinder.newFactory( ).getServerEngineConfig( );
+ }
+
+ myAxisServer = new AxisServer( m_myConfig );
+ ServiceAdmin.setEngine( myAxisServer,
+ NetworkUtils.getLocalHostname( ) + "@" + m_serverSocket.getLocalPort( ) );
+ }
+
+ return myAxisServer;
+ }
+
+ /**
+ * turn threading on or off. This sets a static value
+ *
+ * @param value
+ */
+ public void setDoThreads( boolean value )
+ {
+ s_doThreads = value;
+ }
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ public boolean getDoThreads( )
+ {
+ return s_doThreads;
+ }
+
+ /**
+ * Resize the session map
+ *
+ * @param maxSessions maximum sessions
+ */
+ public void setMaxSessions( int maxSessions )
+ {
+ this.m_maxSessions = maxSessions;
+ ( (LRUMap) m_sessions ).setMaximumSize( maxSessions );
+ }
+
+ /**
+ * get max session count
+ *
+ * @return
+ */
+ public int getMaxSessions( )
+ {
+ return m_maxSessions;
+ }
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @param myConfig DOCUMENT_ME
+ */
+ public void setMyConfig( EngineConfiguration myConfig )
+ {
+ m_myConfig = myConfig;
+ }
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ public EngineConfiguration getMyConfig( )
+ {
+ return m_myConfig;
+ }
+
+ /**
+ * Set the serverSocket this server should listen on. (note : changing this will not affect a running server, but if
+ * you stop() and then start() the server, the new socket will be used).
+ */
+ public void setServerSocket( ServerSocket serverSocket )
+ {
+ m_serverSocket = serverSocket;
+ }
+
+ /**
+ * Obtain the serverSocket that that SimpleAxisServer is listening on.
+ */
+ public ServerSocket getServerSocket( )
+ {
+ return m_serverSocket;
+ }
+
+ /**
+ * Server process.
+ */
+ public static void main( String[] args )
+ {
+ Options opts = null;
+ try
+ {
+ opts = new Options( args );
+ }
+ catch ( MalformedURLException e )
+ {
+ LOG.error( Messages.getMessage( "malformedURLException00" ),
+ e );
+ return;
+ }
+
+ String maxPoolSize = opts.isValueSet( 't' );
+ if ( maxPoolSize == null )
+ {
+ maxPoolSize = ThreadPool.DEFAULT_MAX_THREADS + "";
+ }
+
+ String maxSessions = opts.isValueSet( 'm' );
+ if ( maxSessions == null )
+ {
+ maxSessions = DEFAULT_MAX_SESSIONS + "";
+ }
+
+ String[] nonOptionArgs = opts.getRemainingArgs( );
+ NotSoSimpleAxisServer server =
+ new NotSoSimpleAxisServer( new File( nonOptionArgs[0] ),
+ Integer.parseInt( maxPoolSize ),
+ Integer.parseInt( maxSessions ) );
+
+ try
+ {
+ s_doThreads = ( opts.isFlagSet( 't' ) > 0 );
+
+ int port = opts.getPort( );
+ ServerSocket ss = null;
+
+ // Try five times
+ final int retries = 5;
+ for ( int i = 0; i < retries; i++ )
+ {
+ try
+ {
+ ss = new ServerSocket( port );
+ break;
+ }
+ catch ( java.net.BindException be )
+ {
+ LOG.debug( Messages.getMessage( "exception00" ),
+ be );
+ if ( i < ( retries - 1 ) )
+ {
+ // At 3 second intervals.
+ Thread.sleep( 3000 );
+ }
+ else
+ {
+ throw new Exception( Messages.getMessage( "unableToStartServer00",
+ Integer.toString( port ) ) );
+ }
+ }
+ }
+
+ server.setServerSocket( ss );
+ server.start( );
+ }
+ catch ( Exception e )
+ {
+ LOG.error( Messages.getMessage( "exception00" ),
+ e );
+ return;
+ }
+ }
+
+ /**
+ * Accept requests from a given TCP port and send them through the Axis engine for processing.
+ */
+ public void run( )
+ {
+ LOG.info( Messages.getMessage( "start01",
+ "SimpleAxisServer",
+ new Integer( getServerSocket( ).getLocalPort( ) ).toString( ),
+ getCurrentDirectory( ) ) );
+
+ // Accept and process requests from the socket
+ while ( !stopped )
+ {
+ Socket socket = null;
+ try
+ {
+ socket = m_serverSocket.accept( );
+ }
+ catch ( java.io.InterruptedIOException iie )
+ {
+ }
+ catch ( Exception e )
+ {
+ LOG.debug( Messages.getMessage( "exception00" ),
+ e );
+ break;
+ }
+
+ if ( socket != null )
+ {
+ SimpleAxisWorker worker = new NotSoSimpleAxisWorker( this, socket, m_docRootDir );
+ if ( s_doThreads )
+ {
+ m_pool.addWorker( worker );
+ }
+ else
+ {
+ worker.run( );
+ }
+ }
+ }
+
+ LOG.info( Messages.getMessage( "quit00", "SimpleAxisServer" ) );
+ }
+
+ /**
+ * Start this server.
+ * <p/>
+ * Spawns a worker thread to listen for HTTP requests.
+ *
+ * @param daemon a boolean indicating if the thread should be a daemon.
+ */
+ public void start( boolean daemon )
+ throws Exception
+ {
+ stopped = false;
+ if ( s_doThreads )
+ {
+ Thread thread = new Thread( this );
+ thread.setDaemon( daemon );
+ thread.start( );
+ }
+ else
+ {
+ run( );
+ }
+ }
+
+ /**
+ * Start this server as a NON-daemon.
+ */
+ public void start( )
+ throws Exception
+ {
+ start( false );
+ }
+
+ /**
+ * Stop this server. Can be called safely if the system is already stopped, or if it was never started.
+ * <p/>
+ * This will interrupt any pending accept().
+ */
+ public void stop( )
+ {
+ //recognise use before we are live
+ if ( stopped )
+ {
+ return;
+ }
+
+ /*
+ * Close the server socket cleanly, but avoid fresh accepts while
+ * the socket is closing.
+ */
+ stopped = true;
+
+ try
+ {
+ if ( m_serverSocket != null )
+ {
+ m_serverSocket.close( );
+ }
+ }
+ catch ( IOException e )
+ {
+ LOG.info( Messages.getMessage( "exception00" ),
+ e );
+ }
+ finally
+ {
+ m_serverSocket = null;
+ }
+
+ LOG.info( Messages.getMessage( "quit00", "SimpleAxisServer" ) );
+
+ //shut down the pool
+ m_pool.shutdown( );
+ }
+
+ //---------------------------------------------------
+ protected boolean isSessionUsed( )
+ {
+ return s_doSessions;
+ }
+
+ /**
+ * demand create a session if there is not already one for the string
+ *
+ * @param cooky
+ *
+ * @return a session.
+ */
+ protected Session createSession( String cooky )
+ {
+ // is there a session already?
+ Session session = null;
+ if ( m_sessions.containsKey( cooky ) )
+ {
+ session = (Session) m_sessions.get( cooky );
+ }
+ else
+ {
+ // no session for this cooky, bummer
+ session = new SimpleSession( );
+
+ // ADD CLEANUP LOGIC HERE if needed
+ m_sessions.put( cooky, session );
+ }
+
+ return session;
+ }
+
+ /**
+ * stop the server if not already told to.
+ *
+ * @throws Throwable
+ */
+ protected void finalize( )
+ throws Throwable
+ {
+ stop( );
+ super.finalize( );
+ }
+
+ /**
+ * Gets the current directory
+ *
+ * @return current directory
+ */
+ private String getCurrentDirectory( )
+ {
+ return System.getProperty( "user.dir" );
+ }
+}
\ No newline at end of file