Package py4j

Class GatewayConnection

  • All Implemented Interfaces:
    java.lang.Runnable, Py4JServerConnection

    public class GatewayConnection
    extends java.lang.Object
    implements java.lang.Runnable, Py4JServerConnection

    Manage the connection between a Python program and a Gateway. A GatewayConnection lives in its own thread and is created on demand (e.g., one per concurrent thread).

    The request to connect to the JVM goes through the GatewayServer first and is then passed to a GatewayConnection.

    This class is not intended to be directly accessed by users.

    Author:
    Barthelemy Dagenais
    • Field Detail

      • socket

        protected final java.net.Socket socket
      • authToken

        protected final java.lang.String authToken
      • writer

        protected final java.io.BufferedWriter writer
      • reader

        protected final java.io.BufferedReader reader
      • commands

        protected final java.util.Map<java.lang.String,​Command> commands
      • logger

        protected final java.util.logging.Logger logger
    • Constructor Detail

      • GatewayConnection

        public GatewayConnection​(Gateway gateway,
                                 java.net.Socket socket)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • GatewayConnection

        public GatewayConnection​(Gateway gateway,
                                 java.net.Socket socket,
                                 java.util.List<java.lang.Class<? extends Command>> customCommands,
                                 java.util.List<GatewayServerListener> listeners)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • GatewayConnection

        public GatewayConnection​(Gateway gateway,
                                 java.net.Socket socket,
                                 java.lang.String authToken,
                                 java.util.List<java.lang.Class<? extends Command>> customCommands,
                                 java.util.List<GatewayServerListener> listeners)
                          throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • getBaseCommands

        public static java.util.List<java.lang.Class<? extends Command>> getBaseCommands()
        Returns:
        The list of base commands that are provided by default. Can be hidden by custom commands with the same command id by passing a list of custom commands to the GatewayServer.
      • startConnection

        public void startConnection()

        Wraps the GatewayConnection in a thread and start the thread.

      • fireConnectionStopped

        protected void fireConnectionStopped()
      • getSocket

        public java.net.Socket getSocket()
        Specified by:
        getSocket in interface Py4JServerConnection
        Returns:
        The socket used by this gateway connection.
      • initCommands

        protected void initCommands​(Gateway gateway,
                                    java.util.List<java.lang.Class<? extends Command>> commandsClazz)

        Override this method to initialize custom commands.

        Parameters:
        gateway -
      • quietSendFatalError

        protected void quietSendFatalError​(java.io.BufferedWriter writer,
                                           java.lang.Throwable exception)
      • run

        public void run()
        Specified by:
        run in interface java.lang.Runnable
      • shutdown

        public void shutdown​(boolean reset)

        Shuts down the connection by closing the socket, the writer, and the reader.

        Internal: emits a connection stopped signal so GatewayServer can remove the connection from the connections list. In rare occasions, the shutdown method may be called twice (when the server shuts down at the same time as the connection fails and shuts down).

        Specified by:
        shutdown in interface Py4JServerConnection