public class ThreadPool
extends java.lang.Object
ThreadElement
Objekten. Diese Threads werden über die Protokoll-Id
identifiziert. ThreadPool führt eine Liste mi ThreadGroup
kann nicht verwendet werden, da die Anzahl der Threads nicht eingestellt werden
kann. Außerdem führt ThreadPool eine Liste mit ausstehenden Aufträgen, die auf einen frei werdenen Thread verteilt werden.Modifier and Type | Class and Description |
---|---|
static class |
ThreadPool.QueuedThread
Speichert einen Auftrag in der Warteschlange für externe Zwecke
|
private class |
ThreadPool.TaskManagerRequest
Kapselt Daten für die Aufräge Protokollerstellung und gespeichertes Protokoll abrufen..
|
Modifier and Type | Field and Description |
---|---|
private ConfigurationObject |
_configAuth
Konfigurationsverantwortlicher für Anfragen an das Archivsystem.
|
private ClientDavInterface |
_dav
Verbindung zum Datenverteiler.
|
private static Debug |
_debug
Debug Ausgabe
|
private int |
_maxQueries
Maximale Größe der Warteschlange für Aufträge zur Protokollerstellung.
|
private java.util.ArrayList<ThreadPool.TaskManagerRequest> |
_queries
Warteschlange für Anfragen.
|
private ThreadManager |
_threadManager
Objekt zur Thread Verwaltung
|
private boolean |
_useQuery
Zeigt an ob die Warteschlange für Anfragen benutzt werden soll.
|
private java.util.concurrent.atomic.AtomicLong |
jobIdCounter
Zähler zur Erzeugung von eindeutigen Auftrags-Ids (für diese PuA-Instanz).
|
private static long |
TIMEOUT
Wartezeit nach der überprüft wird, ob sich alle Threads beendet haben.
|
Constructor and Description |
---|
ThreadPool(ClientDavInterface dav,
int maxProtocols,
DataManagerInterface dataManager,
int maxQueries,
long maxDelay,
int timeout,
ConfigurationObject configAuth)
Erzeugt den ThreadPool.
|
Modifier and Type | Method and Description |
---|---|
ThreadPool.QueuedThread |
abortQueuedTask(long jobId)
Bricht einen Auftrag in Warteschlange ab
|
private boolean |
activateThread(long requestId,
ProcessingParameter pp,
SystemObject client,
long protocolId,
ThreadElement.Operation operation,
long jobId,
long startTime,
long initialFlowControl)
Aktiviert einen Thread, und übergibt ihm die Auftragsparameter.
|
int |
alive() |
boolean |
busy()
Zeigt an ob weitere Anfragen angenommen werden können.
|
(package private) void |
finished(ThreadElement processor)
Entfernt einen Thread aus der Liste der aktiven Threads.
|
private long |
generateJobId()
Generiert eine (für diesen Prozess) eindeutige Auftrags-Id.
|
java.lang.Long[] |
getActiveProtocols()
Liste mit den Protokollen die gerade gesendet / erstellt werden.
|
ConfigurationObject |
getConfigAuth() |
java.util.ArrayList<JobInProgress> |
getJobList()
Gibt eine Liste mit allen aktuell wartenden und in Bearbeitung befindlichen Aufträgen zurück
|
ThreadElement |
getThread(long jobId)
Liefert den aktiven Thread mit der gegebenen Auftrags-Id zurück.
|
java.util.ArrayList<ThreadElement> |
getThreads()
Gibt alle aktiven Threads zurück
|
java.util.List<ThreadPool.QueuedThread> |
getWaitingProtocols()
Liste mit den Objekten, die momentan in der Warteschlange liegen.Falls keine werte vorliegen, wird ein Feld der Länge 0
zurückgegeben.
|
boolean |
isTerminated()
Zeigt an ob alle Threads beendet wurden.
|
void |
killAll()
Bricht alle Aufträge ab und beendet alle Threads.
|
boolean |
storeCreateQuery(long requestId,
ProcessingParameter pp,
SystemObject client,
long protocolId,
long initialFlowControl)
Legt einen Auftrag zur Protokollerstellung in der Warteschlange ab.
|
boolean |
storeGetProtocolQuery(long requestId,
SystemObject client,
long protocolId,
long initialFlowControl)
Legt einen Auftrag zum ausgeben eines gespeicherten Protokolls in der Warteschlange ab.
|
boolean |
storeGetUnreadProtocolQuery(long requestId,
SystemObject client,
long protocolId,
long initialFlowControl)
Legt einen Auftrag zum ausgeben eines noch nicht abgelegten Protokolls in der Warteschlange ab.
|
private boolean |
storeQuery(long requestId,
ProcessingParameter pp,
SystemObject client,
long protocolId,
ThreadElement.Operation operation,
long initialFlowControl)
Legt den Auftrag in der Warteschlange ab.
|
private static final long TIMEOUT
private static final Debug _debug
private ClientDavInterface _dav
private ConfigurationObject _configAuth
private java.util.ArrayList<ThreadPool.TaskManagerRequest> _queries
private boolean _useQuery
private int _maxQueries
private ThreadManager _threadManager
private final java.util.concurrent.atomic.AtomicLong jobIdCounter
public ThreadPool(ClientDavInterface dav, int maxProtocols, DataManagerInterface dataManager, int maxQueries, long maxDelay, int timeout, ConfigurationObject configAuth) throws FailureException
dav
- maxProtocols
- Anzahl der Threads die gleichzeitig laufen dürfendataManager
- Datenmanager. Ermöglicht das Interpretieren des Skripts.maxQueries
- Maximale Größe der Warteschlange für Anufträge zur Protokollerstellung.maxDelay
- Maximale Zeitdauer in ms, für die die Protokollerstellung angehalten werden kann.timeout
- Anzahl Minuten ohne Antwort vom Client, nach der die Übertragung getrennt wirdconfigAuth
- Konfigurationsverantwortlicher für Anfragen an das Archivsystem.FailureException
- Keine Verbindung zum Datenverteiler; Erzeugen aller Threads scheitert.private boolean activateThread(long requestId, ProcessingParameter pp, SystemObject client, long protocolId, ThreadElement.Operation operation, long jobId, long startTime, long initialFlowControl)
requestId
- Anfrage-Id. Id, die die anfragende Applikation vergeben hat.pp
- Auftragsparameterclient
- Auftraggeber, an den das Ergebnis gesendet wird.protocolId
- Protokoll-Idoperation
- Auftragsart. ThreadElement.Operation.CREATE_PROTOCOL
, ThreadElement.Operation.SEND_SAVED_PROTOCOL
oder ThreadElement.Operation.SEND_UNREAD_PROTOCOL
jobId
- Auftrags-IdstartTime
- initialFlowControl
- false
falls alle Threads bereits beschäftigt sind oder kein Sender erzeugt werden konnte.true
sonst.void finished(ThreadElement processor)
processor
vergeben. Diese Methode muss von dem ThreadElement
aufgerufen werden, nachdem die
Protokollerstellung abgeschlossen wurde.processor
- Thread der entfernt werden soll.public boolean busy()
true
falls die Warteschlange bereits voll ist. false
sonst.public void killAll()
isTerminated()
überprüft werden, ob die Threads beendet wurden.public int alive()
public ConfigurationObject getConfigAuth()
public boolean storeCreateQuery(long requestId, ProcessingParameter pp, SystemObject client, long protocolId, long initialFlowControl) throws FailureException
requestId
- Anfrage-Id. Id, die die anfragende Applikation vergeben hat.pp
- Auftragsparameterclient
- Auftraggeber, an den das Ergebnis gesendet wird.protocolId
- Protokoll-IdinitialFlowControl
- true
falls der Auftrag angenommen wurde.FailureException
- Fehler beim Senden.public boolean storeGetProtocolQuery(long requestId, SystemObject client, long protocolId, long initialFlowControl) throws FailureException
requestId
- Anfrage-Id. Id, die die anfragende Applikation vergeben hat.client
- Auftraggeber, an den das Ergebnis gesendet wird.protocolId
- Protokoll-Id des Protokolls, das abgerufen werden soll.initialFlowControl
- true
falls der Auftrag angenommen wurde.FailureException
- Fehler beim Senden.public boolean storeGetUnreadProtocolQuery(long requestId, SystemObject client, long protocolId, long initialFlowControl) throws FailureException
requestId
- Anfrage-Id. Id, die die anfragende Applikation vergeben hat.client
- Auftraggeber, an den das Ergebnis gesendet wird.protocolId
- Protokoll-Id des Protokolls, das abgerufen werden soll.initialFlowControl
- true
falls der Auftrag angenommen wurde.FailureException
- Fehler beim Senden.private boolean storeQuery(long requestId, ProcessingParameter pp, SystemObject client, long protocolId, ThreadElement.Operation operation, long initialFlowControl) throws FailureException
requestId
- Anfrage-Id. Id, die die anfragende Applikation vergeben hat.pp
- Auftragsparameterclient
- Auftraggeber, an den das Ergebnis gesendet wird.protocolId
- Protokoll-Idoperation
- Auftragsart. ThreadElement.Operation.CREATE_PROTOCOL
, ThreadElement.Operation.SEND_SAVED_PROTOCOL
oder ThreadElement.Operation.SEND_UNREAD_PROTOCOL
initialFlowControl
- true
falls der Auftrag angenommen wurde.FailureException
- Fehler beim Senden.public ThreadPool.QueuedThread abortQueuedTask(long jobId)
jobId
- Auftrags-Id des gesuchten Threadsprivate long generateJobId()
public java.util.ArrayList<JobInProgress> getJobList() throws FailureException
FailureException
public java.lang.Long[] getActiveProtocols()
public java.util.List<ThreadPool.QueuedThread> getWaitingProtocols()
public ThreadElement getThread(long jobId)
jobId
- Auftrags-Id des gesuchten Threadspublic java.util.ArrayList<ThreadElement> getThreads()
public boolean isTerminated()
true
falls alle Threads beendet wurden.