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.
-
-
Constructor Summary
Constructors Constructor Description VinciServer(String service_name, String host_name, VinciServable servable)
Create a new server.VinciServer(String service_name, String host_name, VinciServable servable, int myPriority)
VinciServer(String service_name, String host_name, VinciServable servable, int myPriority, int myInstance)
Create a new server.VinciServer(String service_name, VinciServable servable)
Create a new server that reports the current machine's IP address as the host.VinciServer(String service_name, VinciServable servable, int myPriority)
VinciServer(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 Transportable
createShutdownCommand(String shutdown_message)
Factory method for creating a shutdown message.VinciContext
getContext()
Get the context associated with this server.String
getHostName()
int
getInstance()
protected int
getPort()
int
getPriority()
protected Runnable
getRunnable(Socket client)
Get a runnable object to run within a pooled thread that will handle the request.String
getServiceName()
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.void
serve()
Serve requests until a clean shutdown is triggered.void
setContext(VinciContext c)
Set the VinciContext to be used by this server.boolean
shutdown(String shutdown_message)
This method is called by the server when a remote shutdown request is received.void
startServing()
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
-
-
-
-
Constructor Detail
-
VinciServer
public VinciServer(String service_name, 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(String service_name, VinciServable servable) throws UnknownHostException
Create 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:
UnknownHostException
- If there is an error determining machine IP address.
-
VinciServer
public VinciServer(String service_name, String host_name, VinciServable servable, int myPriority, int myInstance)
Create a new server.- Parameters:
service_name
- -host_name
- -servable
- -myPriority
- -myInstance
- -
-
VinciServer
public VinciServer(String service_name, String host_name, VinciServable servable, int myPriority)
- Parameters:
service_name
- -host_name
- -servable
- -myPriority
- -
-
VinciServer
public VinciServer(String service_name, VinciServable servable, int myPriority) throws UnknownHostException
- Parameters:
service_name
- -servable
- -myPriority
- -- Throws:
UnknownHostException
- -
-
VinciServer
public VinciServer(String service_name, VinciServable servable, int myPriority, int myInstance) throws UnknownHostException
- Parameters:
service_name
- -servable
- -myPriority
- -myInstance
- -- Throws:
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 String getServiceName()
-
getInstance
public int getInstance()
-
getHostName
public 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, IOException
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.- 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.IOException
- Thrown if there was some problem with the server socket.IllegalStateException
- if VNS host is not specified.
-
startServing
public void startServing() throws ServiceDownException, VNSException, IOException
Start 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.IOException
- Thrown if there was some problem with the server socket.IllegalStateException
- if VNS host is not specified.- Since:
- 2.0.15
-
getRunnable
protected Runnable getRunnable(Socket client)
Description copied from class:BaseServer
Get a runnable object to run within a pooled thread that will handle the request.- Overrides:
getRunnable
in classBaseServer
- Parameters:
client
- -- Returns:
- -
-
createShutdownCommand
public static Transportable createShutdownCommand(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.shutdown_message
- -- Returns:
- -
-
shutdown
public boolean shutdown(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
- -IllegalStateException
- if VNS host isn't specified.
-
-