Package org.apache.vinci.transport
Class VinciServer
- java.lang.Object
-
- org.apache.vinci.transport.BaseServer
-
- org.apache.vinci.transport.VinciServer
-
public class VinciServer extends BaseServer
"Standard" service container for a VinciServable. This extends BaseServer with functions allowing port negotiation via interaction with VNS. It also provides rudimentary support for service control and monitoring by responding to vinci:SHUTDOWN and vinci:PING. Note that this server class directs requests to a single VinciServable. For many applications it may be desirable to have one server accept requests that get delegated to multiple services, not just a single service. For such applications consider using the MultiplexedServer. You can also implement a VinciServable that implements its own sub-service delegation scheme.
-
-
Field Summary
Fields Modifier and Type Field Description private VinciContextcontextprivate java.lang.StringhostNameprivate intinstanceprivate intportprivate intpriorityprivate java.lang.StringserviceName
-
Constructor Summary
Constructors Constructor Description VinciServer(java.lang.String service_name, java.lang.String host_name, VinciServable servable)Create a new server.VinciServer(java.lang.String service_name, java.lang.String host_name, VinciServable servable, int myPriority)VinciServer(java.lang.String service_name, java.lang.String host_name, VinciServable servable, int myPriority, int myInstance)Create a new server.VinciServer(java.lang.String service_name, VinciServable servable)Create a new server that reports the current machine's IP address as the host.VinciServer(java.lang.String service_name, VinciServable servable, int myPriority)VinciServer(java.lang.String service_name, VinciServable servable, int myPriority, int myInstance)VinciServer(VinciServable servable)servable != null
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static TransportablecreateShutdownCommand(java.lang.String shutdown_message)Factory method for creating a shutdown message.VinciContextgetContext()Get the context associated with this server.java.lang.StringgetHostName()intgetInstance()protected intgetPort()intgetPriority()protected java.lang.RunnablegetRunnable(java.net.Socket client)Get a runnable object to run within a pooled thread that will handle the request.java.lang.StringgetServiceName()intgetServingPort()After invoking serve() or startServing(), this method can be used to determine the port which was negotiated with VNS on which to serve requests.voidserve()Serve requests until a clean shutdown is triggered.voidsetContext(VinciContext c)Set the VinciContext to be used by this server.booleanshutdown(java.lang.String shutdown_message)This method is called by the server when a remote shutdown request is received.voidstartServing()Start a new thread that will serve requests until a clean shutdown is triggered.-
Methods inherited from class org.apache.vinci.transport.BaseServer
cleanExit, createServerSocket, eval, getServable, getServerSocket, handleRequest, handleRequests, makeTransportable, serve, setSocketTimeout, setThreadPoolSize, shutdownServing, startServing
-
-
-
-
Field Detail
-
priority
private int priority
-
instance
private int instance
-
hostName
private java.lang.String hostName
-
serviceName
private java.lang.String serviceName
-
port
private volatile int port
-
context
private VinciContext context
-
-
Constructor Detail
-
VinciServer
public VinciServer(java.lang.String service_name, java.lang.String host_name, VinciServable servable)Create a new server. If an incorrect hostname is provided, this server will not be reachable.- Parameters:
host_name- The DNS hostname of the machine running this server.service_name- -servable- -
-
VinciServer
public VinciServer(java.lang.String service_name, VinciServable servable) throws java.net.UnknownHostExceptionCreate a new server that reports the current machine's IP address as the host. This should not be used for DHCP-based hosts since IP address can change.- Parameters:
service_name- -servable- -- Throws:
java.net.UnknownHostException- If there is an error determining machine IP address.
-
VinciServer
public VinciServer(java.lang.String service_name, java.lang.String host_name, VinciServable servable, int myPriority, int myInstance)Create a new server.- Parameters:
service_name- -host_name- -servable- -myPriority- -myInstance- -
-
VinciServer
public VinciServer(java.lang.String service_name, java.lang.String host_name, VinciServable servable, int myPriority)- Parameters:
service_name- -host_name- -servable- -myPriority- -
-
VinciServer
public VinciServer(java.lang.String service_name, VinciServable servable, int myPriority) throws java.net.UnknownHostException- Parameters:
service_name- -servable- -myPriority- -- Throws:
java.net.UnknownHostException- -
-
VinciServer
public VinciServer(java.lang.String service_name, VinciServable servable, int myPriority, int myInstance) throws java.net.UnknownHostException- Parameters:
service_name- -servable- -myPriority- -myInstance- -- Throws:
java.net.UnknownHostException- -
-
VinciServer
public VinciServer(VinciServable servable)
servable != null- Parameters:
servable- -
-
-
Method Detail
-
getContext
public VinciContext getContext()
Get the context associated with this server. By default clients use the global Vinci context, though this can be overridden.- Returns:
- -
-
getPriority
public int getPriority()
-
getServiceName
public java.lang.String getServiceName()
-
getInstance
public int getInstance()
-
getHostName
public java.lang.String getHostName()
-
getServingPort
public int getServingPort()
After invoking serve() or startServing(), this method can be used to determine the port which was negotiated with VNS on which to serve requests.- Returns:
- -
- Since:
- 2.0.15
-
setContext
public void setContext(VinciContext c)
Set the VinciContext to be used by this server. Set to null if you wish the global context to be used.- Parameters:
c- -
-
serve
public void serve() throws ServiceDownException, VNSException, java.io.IOExceptionServe requests until a clean shutdown is triggered. Note that all three exceptions thrown by this method are IOExceptions so a single IOException catch phrase is sufficient unless it is important to determine the particular failure.- Throws:
ServiceDownException- Thrown if there was a failure to contact VNS for port negotiation.VNSException- Typically thrown if VNS does not recognize the service provided by this server.java.io.IOException- Thrown if there was some problem with the server socket.java.lang.IllegalStateException- if VNS host is not specified.
-
startServing
public void startServing() throws ServiceDownException, VNSException, java.io.IOExceptionStart a new thread that will serve requests until a clean shutdown is triggered. Note that all three exceptions thrown by this method are IOExceptions so a single IOException catch phrase is sufficient unless it is important to determine the particular failure. If this method returns without throwing an exception then the port has been determined and a new thread has been launched.- Throws:
ServiceDownException- Thrown if there was a failure to contact VNS for port negotiation.VNSException- Typically thrown if VNS does not recognize the service provided by this server.java.io.IOException- Thrown if there was some problem with the server socket.java.lang.IllegalStateException- if VNS host is not specified.- Since:
- 2.0.15
-
getRunnable
protected java.lang.Runnable getRunnable(java.net.Socket client)
Description copied from class:BaseServerGet a runnable object to run within a pooled thread that will handle the request.- Overrides:
getRunnablein classBaseServer- Parameters:
client- -- Returns:
- -
-
createShutdownCommand
public static Transportable createShutdownCommand(java.lang.String shutdown_message)
Factory method for creating a shutdown message. Send the returned object to any server, and if it is programmed to respond to shutdown, it will do so.- Parameters:
shutdown_message- Should be used to pass a message explaining the shutdown, or in the future it may also include authentication information for password-protected shutdown.- Returns:
- -
-
shutdown
public boolean shutdown(java.lang.String shutdown_message)
This method is called by the server when a remote shutdown request is received. In general if you want to stop the server call shutdownServing() -- this method should have probably been declared "protected". You can override this method if you want the shutdown message to be ignored in certain cases.- Parameters:
shutdown_message- -- Returns:
- -
-
getPort
protected int getPort() throws ServiceDownException, VNSException- Returns:
- -
- Throws:
ServiceDownException- -VNSException- -java.lang.IllegalStateException- if VNS host isn't specified.
-
-