Class XmlSocketServer


  • public class XmlSocketServer
    extends TraceProvider
    Сетевой сервер, принимающий XML-трассы из множества источников на удалённых машинах. Поддерживает один порт с произвольным количеством одновременно установленных соединений. Смешивает в единый поток сообщения изо всех входных соединений по мере их поступления из сети и синтаксического разбора, при этом гарантируется относительный порядок сообщений только внутри одного канала.

    Самостоятельно присваивает входным трассам уникальные идентификаторы каналов, но не извещает об этом источники трассы. (!!! возможны проблемы с сообщениями, содержащими в своём теле идентификаторы каналов !!!)

    Работает в модели PULL. Обработка входящих соединений начинается в момент вызова метода process() и прекращается тогда, когда выполнены ВСЕ следующие условия:

    • все старые соединения закрыты
    • нет новых входящих соединений
    • ранее был вызван метод mayTerminate() (метод также автоматически вызывается при закрытии любого соединения, если был установлен флаг автозавершения).
    После завершения обработки серверный сокет автоматически закрывается, и дальнейшая обработка соединений этим экземпляром сервера уже невозможна.
    See Also:
    XmlSocketParser
    • Field Detail

      • serverSock

        protected java.net.ServerSocket serverSock
      • port

        protected int port
      • shutdownFlag

        protected boolean shutdownFlag
      • autoTerminate

        protected boolean autoTerminate
      • messageLog

        protected java.io.PrintWriter messageLog
    • Constructor Detail

      • XmlSocketServer

        public XmlSocketServer​(int port,
                               boolean autoTerminate)
                        throws java.io.IOException
        Конструктор.
        Parameters:
        port - TCP-порт для приёма соединений.
        autoTerminate - Параметр для setAutoTerminate(boolean)
        Throws:
        java.io.IOException - Ошибка ввода-вывода.
    • Method Detail

      • setAutoTerminate

        public void setAutoTerminate​(boolean autoTerminate)
        Установить режим автоматического завершения.
        Parameters:
        autoTerminate - Если параметр установлен в true, то сервер автоматически завершает работу при первой же передышке в работе, когда нет ни одного открытого или ожидающего соединения, но после того, как уже было обработано хотя бы одно соединение. Если параметр установлен в false, то сервер ожидает поступления новых соединений до тех пор, пока не будет вызван метод mayTerminate().
        See Also:
        mayTerminate()
      • getAutoTerminate

        public boolean getAutoTerminate()
      • setDebugLog

        public void setDebugLog​(java.io.OutputStream logStream)
      • pollMessage

        protected AbstractTraceMessage pollMessage()
        Синхронизированный доступ. Взять из очереди сообщение.
        Returns:
        Очередное сообщение или null.
      • enqueueMessage

        protected void enqueueMessage​(AbstractTraceMessage msg)
        Синхронизированный доступ. Добавить в очередь сообщение.
      • process

        public void process()
                     throws java.io.IOException,
                            java.lang.IllegalStateException,
                            java.lang.IllegalArgumentException
        Description copied from class: TraceProvider
        Begins message handling loop if this is an active trace source (model PULL). If this trace source doesn't get messages in his own active stream but works as a message converter from the others' active (PUSH) sources then - empty realization by default.
        Overrides:
        process in class TraceProvider
        Throws:
        java.io.IOException - Input-Output error
        java.lang.IllegalStateException - The handling has already begun
        java.lang.IllegalArgumentException - Trace error (casted by a trace source, by an aspect adapter or by a trace handler)
      • mayTerminate

        public void mayTerminate()
        Установить флаг завершения. После вызова этого метода сервер продолжает принимать новые соединения (если не был вызван метод closeSocket()) и обрабатывать старые, но сразу же после закрытия всех соединений прекращает свою работу, не ожидая новых.
        See Also:
        setAutoTerminate(boolean)
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable