Package com.martiansoftware.nailgun
Class NGSession
- java.lang.Object
-
- java.lang.Thread
-
- com.martiansoftware.nailgun.NGSession
-
- All Implemented Interfaces:
java.lang.Runnable
public class NGSession extends java.lang.Thread
Reads the NailGun stream from the client through the command, then hands off processing to the appropriate class. The NGSession obtains its sockets from an NGSessionPool, which created this NGSession.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.ClassLoader
classLoader
A ClassLoader that may be set by a client.private boolean
done
True if the server has been shutdown and this NGSession should terminate completelyprivate int
heartbeatTimeoutMillis
The interval to wait between heartbeats before considering the client to have disconnected.private static java.util.concurrent.atomic.AtomicLong
instanceCounter
The instance counter shared among all NGSessionsprivate long
instanceNumber
The instance number of this NGSession.private java.lang.Object
lock
Synchronization objectprivate static java.util.logging.Logger
LOG
private static java.lang.Class[]
mainSignature
signature of main(String[]) for reflection operationsprivate static java.lang.Class[]
nailMainSignature
signature of nailMain(NGContext) for reflection operationsprivate java.net.Socket
nextSocket
The next socket this NGSession has been tasked with processing (by NGServer)private NGServer
server
The server this NGSession is working forprivate NGSessionPool
sessionPool
The pool this NGSession came from, and to which it will return itself
-
Constructor Summary
Constructors Constructor Description NGSession(NGSessionPool sessionPool, NGServer server)
Creates a new NGSession running for the specified NGSessionPool and NGServer.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.net.Socket
nextSocket()
Returns the next socket to process.void
run()
The main NGSession loop.void
run(java.net.Socket socket)
Instructs this NGSession to process the specified socket, after which this NGSession will return itself to the pool from which it came.(package private) void
shutdown()
Shuts down this NGSession gracefullyprivate void
updateThreadName(java.lang.String detail)
Updates the current thread name (useful for debugging).-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
LOG
private static final java.util.logging.Logger LOG
-
server
private final NGServer server
The server this NGSession is working for
-
sessionPool
private final NGSessionPool sessionPool
The pool this NGSession came from, and to which it will return itself
-
lock
private final java.lang.Object lock
Synchronization object
-
nextSocket
private java.net.Socket nextSocket
The next socket this NGSession has been tasked with processing (by NGServer)
-
done
private boolean done
True if the server has been shutdown and this NGSession should terminate completely
-
instanceNumber
private final long instanceNumber
The instance number of this NGSession. That is, if this is the Nth NGSession to be created, then this is the value for N.
-
heartbeatTimeoutMillis
private final int heartbeatTimeoutMillis
The interval to wait between heartbeats before considering the client to have disconnected.
-
instanceCounter
private static java.util.concurrent.atomic.AtomicLong instanceCounter
The instance counter shared among all NGSessions
-
mainSignature
private static final java.lang.Class[] mainSignature
signature of main(String[]) for reflection operations
-
nailMainSignature
private static final java.lang.Class[] nailMainSignature
signature of nailMain(NGContext) for reflection operations
-
classLoader
public static volatile java.lang.ClassLoader classLoader
A ClassLoader that may be set by a client. Defaults to the classloader of this class.
-
-
Constructor Detail
-
NGSession
NGSession(NGSessionPool sessionPool, NGServer server)
Creates a new NGSession running for the specified NGSessionPool and NGServer.- Parameters:
sessionPool
- The NGSessionPool we're working forserver
- The NGServer we're working for
-
-
Method Detail
-
shutdown
void shutdown()
Shuts down this NGSession gracefully
-
run
public void run(java.net.Socket socket)
Instructs this NGSession to process the specified socket, after which this NGSession will return itself to the pool from which it came.- Parameters:
socket
- the socket (connected to a client) to process
-
nextSocket
private java.net.Socket nextSocket()
Returns the next socket to process. This will block the NGSession thread until there's a socket to process or the NGSession has been shut down.- Returns:
- the next socket to process, or
null
if the NGSession has been shut down.
-
run
public void run()
The main NGSession loop. This gets the next socket to process, runs the nail for the socket, and loops until shut down.- Specified by:
run
in interfacejava.lang.Runnable
- Overrides:
run
in classjava.lang.Thread
-
updateThreadName
private void updateThreadName(java.lang.String detail)
Updates the current thread name (useful for debugging).
-
-