Class 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 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.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:
        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.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.
        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.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.
        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: BaseServer
        Get a runnable object to run within a pooled thread that will handle the request.
        Overrides:
        getRunnable in class BaseServer
        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.
        shutdown_message - -
        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:
        -