Package com.unitesk.aspectrace.provider
Class XmlSocketServer
- java.lang.Object
-
- com.unitesk.aspectrace.TraceProvider
-
- com.unitesk.aspectrace.provider.XmlSocketServer
-
public class XmlSocketServer extends TraceProvider
Сетевой сервер, принимающий XML-трассы из множества источников на удалённых машинах. Поддерживает один порт с произвольным количеством одновременно установленных соединений. Смешивает в единый поток сообщения изо всех входных соединений по мере их поступления из сети и синтаксического разбора, при этом гарантируется относительный порядок сообщений только внутри одного канала.Самостоятельно присваивает входным трассам уникальные идентификаторы каналов, но не извещает об этом источники трассы. (!!! возможны проблемы с сообщениями, содержащими в своём теле идентификаторы каналов !!!)
Работает в модели PULL. Обработка входящих соединений начинается в момент вызова метода
process()
и прекращается тогда, когда выполнены ВСЕ следующие условия:- все старые соединения закрыты
- нет новых входящих соединений
- ранее был вызван метод
mayTerminate()
(метод также автоматически вызывается при закрытии любого соединения, если был установленфлаг автозавершения
).
- See Also:
XmlSocketParser
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
XmlSocketServer.ConnectionHandler
Разбирает XML-трассу, приходящую по сетевому соединению, и по мере разбора целых сообщений вставляет их в общую очередь сообщений.
-
Field Summary
Fields Modifier and Type Field Description protected boolean
autoTerminate
protected XmlFormatter
logFormatter
protected java.io.PrintWriter
messageLog
protected int
port
protected java.net.ServerSocket
serverSock
protected boolean
shutdownFlag
protected java.util.Map<java.lang.Thread,XmlSocketServer.ConnectionHandler>
threads
-
Constructor Summary
Constructors Constructor Description XmlSocketServer(int port, boolean autoTerminate)
Конструктор.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
closeSocket()
Закрыть серверный сокет и установитьфлаг завершения
.protected void
enqueueMessage(AbstractTraceMessage msg)
Синхронизированный доступ.protected void
finalize()
boolean
getAutoTerminate()
void
mayTerminate()
Установить флаг завершения.protected AbstractTraceMessage
pollMessage()
Синхронизированный доступ.void
process()
Begins message handling loop if this is an active trace source (model PULL).void
setAutoTerminate(boolean autoTerminate)
Установить режим автоматического завершения.void
setDebugLog(java.io.OutputStream logStream)
-
Methods inherited from class com.unitesk.aspectrace.TraceProvider
addProcessorTag, addProviderTag, attachToManager, fireMessage, fireMessage, fireSyncMessage, fireTagMessage, fireTraceEnd, fireTraceStart, getAdapter, getAllTags, getTags, removeAdapter, removeProcessorTag, removeProviderTag, setAdapter
-
-
-
-
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
-
logFormatter
protected XmlFormatter logFormatter
-
threads
protected final java.util.Map<java.lang.Thread,XmlSocketServer.ConnectionHandler> threads
-
-
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 classTraceProvider
- Throws:
java.io.IOException
- Input-Output errorjava.lang.IllegalStateException
- The handling has already begunjava.lang.IllegalArgumentException
- Trace error (casted by a trace source, by an aspect adapter or by a trace handler)
-
closeSocket
public void closeSocket()
Закрыть серверный сокет и установитьфлаг завершения
.
-
mayTerminate
public void mayTerminate()
Установить флаг завершения. После вызова этого метода сервер продолжает принимать новые соединения (если не был вызван методcloseSocket()
) и обрабатывать старые, но сразу же после закрытия всех соединений прекращает свою работу, не ожидая новых.- See Also:
setAutoTerminate(boolean)
-
finalize
protected void finalize() throws java.lang.Throwable
- Overrides:
finalize
in classjava.lang.Object
- Throws:
java.lang.Throwable
-
-