Package com.martiansoftware.nailgun
Class NGServer
java.lang.Object
com.martiansoftware.nailgun.NGServer
- All Implemented Interfaces:
Runnable
Listens for new connections from NailGun clients and launches NGSession threads to process them.
This class can be run as a standalone server or can be embedded within larger applications as a means of providing command-line interaction with the application.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
A shutdown hook that will cleanly bring down the NGServer if it is interrupted. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate InetAddress
The address on which to listen, or null to listen on all local addressesprivate AliasManager
This NGServer's AliasManager, which maps aliases to classesprivate Map
a collection of all classes executed by this server so farprivate boolean
If true, fully-qualified classnames are valid commandsstatic final int
Default size for thread poolprivate Class
The default class to use if an invalid alias or classname is specified by the client.final PrintStream
System.err
at the time of the NGServer's creationfinal InputStream
System.in
at the time of the NGServer's creationprivate SecurityManager
Remember the security manager we start with so we can restore it laterfinal PrintStream
System.out
at the time of the NGServer's creationprivate int
The port on which to listen, or zero to select a port automaticallyprivate boolean
True if this NGServer has been started and is accepting connectionsprivate ServerSocket
The socket doing the listeningprivate NGSessionPool
A pool of NGSessions ready to handle client connectionsprivate boolean
True if this NGServer has received instructions to shut down -
Constructor Summary
ConstructorsConstructorDescriptionNGServer()
Creates a new NGServer that will listen on the default port (defined inNGConstants.DEFAULT_PORT
).NGServer
(InetAddress addr, int port) Creates a new NGServer that will listen at the specified address and on the specified port with the default session pool size.NGServer
(InetAddress addr, int port, int sessionPoolSize) Creates a new NGServer that will listen at the specified address and on the specified port with the specified session pool size. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Returns a flag that indicates whether Nail lookups by classname are allowed.Returns the AliasManager in use by this NGServer.Returns the default class that will be used if no Nails can be found via alias or classname.Returns a snapshot of this NGServer's nail statistics.private NailStats
getOrCreateStatsFor
(Class nailClass) Returns the current NailStats object for the specified class, creating a new one if necessaryint
getPort()
Returns the port on which this server is (or will be) listening.private void
init
(InetAddress addr, int port, int sessionPoolSize) Sets up the NGServer internalsboolean
Returns true iff the server is currently running.static void
Creates and starts a newNGServer
.(package private) void
nailFinished
(Class nailClass) Provides a means for an NGSession to register the completion of a nails execution with the server.(package private) void
nailStarted
(Class nailClass) Provides a means for an NGSession to register the starting of a nail execution with the server.void
run()
Listens for new connections and launches NGSession threads to process them.void
setAllowNailsByClassName
(boolean allowNailsByClassName) Sets a flag that determines whether Nails can be executed by class name.void
setDefaultNailClass
(Class defaultNailClass) Sets the default class to use for the Nail if no Nails can be found via alias or classname.void
shutdown
(boolean exitVM) Shuts down the server.private static void
usage()
-
Field Details
-
DEFAULT_SESSIONPOOLSIZE
public static final int DEFAULT_SESSIONPOOLSIZEDefault size for thread pool- See Also:
-
addr
The address on which to listen, or null to listen on all local addresses -
port
private int portThe port on which to listen, or zero to select a port automatically -
serversocket
The socket doing the listening -
shutdown
private boolean shutdownTrue if this NGServer has received instructions to shut down -
running
private boolean runningTrue if this NGServer has been started and is accepting connections -
aliasManager
This NGServer's AliasManager, which maps aliases to classes -
allowNailsByClassName
private boolean allowNailsByClassNameIf true, fully-qualified classnames are valid commands -
defaultNailClass
The default class to use if an invalid alias or classname is specified by the client. -
sessionPool
A pool of NGSessions ready to handle client connections -
out
System.out
at the time of the NGServer's creation -
err
System.err
at the time of the NGServer's creation -
in
System.in
at the time of the NGServer's creation -
allNailStats
a collection of all classes executed by this server so far -
originalSecurityManager
Remember the security manager we start with so we can restore it later
-
-
Constructor Details
-
NGServer
Creates a new NGServer that will listen at the specified address and on the specified port with the specified session pool size. This does not cause the server to start listening. To do so, create a newThread
wrapping thisNGServer
and start it.- Parameters:
addr
- the address at which to listen, ornull
to bind to all local addressesport
- the port on which to listen.sessionPoolSize
- the max number of idle sessions allowed by the pool
-
NGServer
Creates a new NGServer that will listen at the specified address and on the specified port with the default session pool size. This does not cause the server to start listening. To do so, create a newThread
wrapping thisNGServer
and start it.- Parameters:
addr
- the address at which to listen, ornull
to bind to all local addressesport
- the port on which to listen.sessionPoolSize
- the max number of idle sessions allowed by the pool
-
NGServer
public NGServer()Creates a new NGServer that will listen on the default port (defined inNGConstants.DEFAULT_PORT
). This does not cause the server to start listening. To do so, create a newThread
wrapping thisNGServer
and start it.
-
-
Method Details
-
init
Sets up the NGServer internals- Parameters:
addr
- the InetAddress to bind toport
- the port on which to listensessionPoolSize
- the max number of idle sessions allowed by the pool
-
setAllowNailsByClassName
public void setAllowNailsByClassName(boolean allowNailsByClassName) Sets a flag that determines whether Nails can be executed by class name. If this is false, Nails can only be run via aliases (and you should probably remove ng-alias from the AliasManager).- Parameters:
allowNailsByClassName
- true iff Nail lookups by classname are allowed
-
allowsNailsByClassName
public boolean allowsNailsByClassName()Returns a flag that indicates whether Nail lookups by classname are allowed. If this is false, Nails can only be run via aliases.- Returns:
- a flag that indicates whether Nail lookups by classname are allowed.
-
setDefaultNailClass
Sets the default class to use for the Nail if no Nails can be found via alias or classname. (may benull
, in which case NailGun will use its own default)- Parameters:
defaultNailClass
- the default class to use for the Nail if no Nails can be found via alias or classname. (may benull
, in which case NailGun will use its own default)
-
getDefaultNailClass
Returns the default class that will be used if no Nails can be found via alias or classname.- Returns:
- the default class that will be used if no Nails can be found via alias or classname.
-
getOrCreateStatsFor
Returns the current NailStats object for the specified class, creating a new one if necessary- Parameters:
nailClass
- the class for which we're gathering stats- Returns:
- a NailStats object for the specified class
-
nailStarted
Provides a means for an NGSession to register the starting of a nail execution with the server.- Parameters:
nailClass
- the nail class that was launched
-
nailFinished
Provides a means for an NGSession to register the completion of a nails execution with the server.- Parameters:
nailClass
- the nail class that finished
-
getNailStats
Returns a snapshot of this NGServer's nail statistics. The result is ajava.util.Map
, keyed by class name, with NailStats objects as values.- Returns:
- a snapshot of this NGServer's nail statistics.
-
getAliasManager
Returns the AliasManager in use by this NGServer.- Returns:
- the AliasManager in use by this NGServer.
-
shutdown
public void shutdown(boolean exitVM) Shuts down the server. The server will stop listening and its thread will finish. Any running nails will be allowed to finish.
Any nails that provide a
method will have this method called with this NGServer as its sole parameter.public static void nailShutdown(NGServer)
- Parameters:
exitVM
- if true, this method will also exit the JVM after calling nailShutdown() on any nails. This may prevent currently running nails from exiting gracefully, but may be necessary in order to perform some tasks, such as shutting down any AWT or Swing threads implicitly launched by your nails.
-
isRunning
public boolean isRunning()Returns true iff the server is currently running.- Returns:
- true iff the server is currently running.
-
getPort
public int getPort()Returns the port on which this server is (or will be) listening.- Returns:
- the port on which this server is (or will be) listening.
-
run
public void run()Listens for new connections and launches NGSession threads to process them. -
usage
private static void usage() -
main
Creates and starts a newNGServer
. A single optional argument is valid, specifying the port on which thisNGServer
should listen. If omitted,NGServer.DEFAULT_PORT
will be used.- Parameters:
args
- a single optional argument specifying the port on which to listen.- Throws:
NumberFormatException
- if a non-numeric port is specifiedUnknownHostException
-