public class ListsManager extends java.lang.Object implements ListsManagerInterface
Diese Klasse dient zur Verwaltung von Anmeldelistentelegrammen, die zwischen Datenverteilern zum Austausch von Informationen über angemeldete Objekte, Attributgruppen und Aspekte verwendet werden. Jeder Datenverteiler hält grobe Informationen über die vorliegenden Quell- und Senkenanmeldungen der Applikationen, die bei ihm angemeldet sind, vor. Diese Informationen werden zwischen den einzelnen Datenverteilern ausgetauscht, damit bei Anmeldungen von Daten direkt geprüft werden kann, ob diese Daten potentiell im System vorhanden sind und welche Datenverteiler als Zentraldatenverteiler in Frage kommen. Um das Datenaufkommen und die Anzahl der Aktualisierungen hier gering zu halten, werden die Anmeldungen nicht detailliert vorgehalten und weitergegeben, sondern es werden nur Änderungen zweier Listen gepflegt und verteilt: Die erste enthält die Objekte zu denen Quell- oder Senkenanmeldungen bestehen (Objektliste); die zweite Liste enthält die Attributgruppen/Aspekt-Kombinationen zu denen Quell- oder Senkenanmeldungen bestehen (Attributgruppenliste). Jeder Datenverteiler verwaltet für jeden von ihm erreichbaren Datenverteiler eine Anmeldungsliste.
Modifier and Type | Class and Description |
---|---|
private class |
ListsManager.DelayedSubscriptionHandle |
private class |
ListsManager.DelayedSubscriptionThread
TBD Beschreibung
|
private class |
ListsManager.LocalSubscriptionInfos |
private static class |
ListsManager.ReferenceCount |
private class |
ListsManager.TransmitterSubscriptionInfos
Enthält die Anmeldungsliste eines erreichbaren Datenverteilers.
|
Modifier and Type | Field and Description |
---|---|
private BestWayManagerInterface |
_bestWayManager |
private HighLevelConnectionsManagerInterface |
_connectionsManager |
private static Debug |
_debug |
private java.util.ArrayList<ListsManager.DelayedSubscriptionHandle> |
_delayedSubscriptionList |
private java.lang.Object |
_delayedSubscriptionSync |
private ListsManager.DelayedSubscriptionThread |
_delayedSubscriptionThread |
private ListsManager.LocalSubscriptionInfos |
_localSubscriptionInfos |
private java.lang.Object |
_localSubscriptionInfosSendLock |
private long |
_localTransmitterId
Eigene Datenverteiler-Id
|
private ListsManager.TransmitterSubscriptionInfos |
_localTransmitterSubscriptionInfos |
private java.util.Map<java.lang.Long,ListsManager.TransmitterSubscriptionInfos> |
_subscriptionInfos
Map mit den Anmeldelisten der bekannten Datenverteiler.
|
private static long |
DELAYED_SUBSCRIPTION_TIME_LIMIT |
Constructor and Description |
---|
ListsManager(HighLevelConnectionsManagerInterface connectionsManager)
Erzeugt ein neues Objekt mit den übergebenen Parametern.
|
Modifier and Type | Method and Description |
---|---|
void |
addEntry(long delivererId,
long transmitterId)
Diese Methode wird von der Wegverwaltung aufgerufen, wenn ein Datenverteiler als erreichbar festgestellt wird.
|
(package private) void |
addInfo(BaseSubscriptionInfo info)
Neue Anmeldung beim lokalen Datenverteiler in die Anmeldelistenverwaltung aufnehmen.
|
private void |
cleanPendingDelayedSubscriptions(long[] ids)
Diese Methode entfernt die wartenden verzögerten Anmeldungen.
|
(package private) void |
close()
Diese Methode gibt die vom ListsManager beanspruchten Resourcen wieder frei.
|
void |
dumpSubscriptionLists() |
BestWayManagerInterface |
getBestWayManager()
Getter für das Verwaltungsobjekt zur Bestimmung der günstigsten Wege.
|
(package private) java.lang.Thread |
getDelayedSubscriptionThread()
Bestimmt den Thread, der für die verzögerte Durchführung von Anmeldungen zuständig ist.
|
(package private) long[] |
getPotentialCentralDavs(BaseSubscriptionInfo info)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um die potentiellen Zentraldatenverteiler des spezifizierten Datums zu bestimmen.
|
void |
handleDisconnection(long transmitterId)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Datenverteilerverbindung nicht mehr existiert.
|
void |
handleWaysChanges(long[] changedTransmitterIds)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn sich neue günstigste Wege für bestimmte Datenverteiler ergeben haben.
|
(package private) void |
removeInfo(BaseSubscriptionInfo info)
Anmeldung beim lokalen Datenverteiler aus der Anmeldelistenverwaltung entfernen.
|
private void |
sendTransmitterUpdates(T_T_HighLevelCommunicationInterface connection,
long transmitterId,
boolean update,
java.util.List<java.lang.Long> objToAdd,
java.util.List<java.lang.Long> objToRemove,
java.util.List<AttributeGroupAspectCombination> combiToAdd,
java.util.List<AttributeGroupAspectCombination> combiToRemove)
Diese Methode sendet die Aktualisierungstelegramme, welche die Ergänzungen und Löschungen der Listen beinhalten.
|
private void |
sendTransmitterUpdates(T_T_HighLevelCommunicationInterface connection,
long transmitterId,
java.util.List<java.lang.Long> objToAdd,
java.util.List<java.lang.Long> combiToAdd)
Diese Methode sendet die Aktualisierungstelegramme, welche die Ergänzungen der Listen beinhalten.
|
void |
setBestWayManager(BestWayManagerInterface bestWayManager)
Setter für das Verwaltungsobjekt zur Bestimmung der günstigsten Wege.
|
(package private) void |
subscribe(long transmitterId,
long[] ids)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Anmeldung auf die Zuliefererinformationen eines bestimmten Datenverteilers eingetroffen ist.
|
(package private) void |
unsubscribe(long transmitterId,
long[] ids)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Abmeldung auf die Zuliefererinformationen eines bestimmten Datenverteilers eingetroffen ist.
|
(package private) void |
unsubscribeDeliverer(long transmitterId,
long[] ids)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Kündigung eines Zulieferers auf die Zuliefererinformationen eines bestimmten Datenverteilers eingetroffen ist.
|
(package private) void |
updateEntry(TransmitterListsUpdate transmitterListsUpdate)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Zuliefereraktualisierung eintrifft.
|
private static final Debug _debug
private final long _localTransmitterId
Eigene Datenverteiler-Id
private final java.util.Map<java.lang.Long,ListsManager.TransmitterSubscriptionInfos> _subscriptionInfos
Map mit den Anmeldelisten der bekannten Datenverteiler.
private final ListsManager.LocalSubscriptionInfos _localSubscriptionInfos
private final ListsManager.TransmitterSubscriptionInfos _localTransmitterSubscriptionInfos
private static final long DELAYED_SUBSCRIPTION_TIME_LIMIT
private final HighLevelConnectionsManagerInterface _connectionsManager
private final java.util.ArrayList<ListsManager.DelayedSubscriptionHandle> _delayedSubscriptionList
private final java.lang.Object _delayedSubscriptionSync
private final ListsManager.DelayedSubscriptionThread _delayedSubscriptionThread
private BestWayManagerInterface _bestWayManager
private final java.lang.Object _localSubscriptionInfosSendLock
public ListsManager(HighLevelConnectionsManagerInterface connectionsManager)
Erzeugt ein neues Objekt mit den übergebenen Parametern. Zu beachten ist, dass das Verwaltungsobjekt zur Bestimmung der günstigsten Wege nicht initialisiert wird, sondern im Anschluss mit einem Aufruf des entsprechenden Setters gesetzt werden muss, bevor die Dienste des ListsManagers in Anspruch genommen werden können.
connectionsManager
- Verbindungsverwaltungjava.lang.Thread getDelayedSubscriptionThread()
Bestimmt den Thread, der für die verzögerte Durchführung von Anmeldungen zuständig ist.
public BestWayManagerInterface getBestWayManager()
Getter für das Verwaltungsobjekt zur Bestimmung der günstigsten Wege.
public void setBestWayManager(BestWayManagerInterface bestWayManager)
Setter für das Verwaltungsobjekt zur Bestimmung der günstigsten Wege.
bestWayManager
- Verwaltungsobjekt zur Bestimmung der günstigsten Wege.public final void addEntry(long delivererId, long transmitterId)
ListsManagerInterface
Diese Methode wird von der Wegverwaltung aufgerufen, wenn ein Datenverteiler als erreichbar festgestellt wird. Sie wird aber auch aufgerufen, wenn festgestellt wird, dass ein Datenverteiler über einen neuen Weg erreichbar ist und nicht mehr über den alten Weg. Ein Datenverteiler kann über eine direkte Verbindung oder über einen anderen Datenverteiler erreichbar sein. Zuerst wird überprüft ob ein Zulieferereintrag für den spezifizierten Datenverteiler existiert. Existiert keiner, so wird ein Eintrag erstellt und in die Tabelle eingefügt. Wenn kein Zulieferer mehr existiert (delivererId = -1), dann wird eine Zuliefererinformationskündigung wird zu jedem eingetragenen Abonnenten gesendet. Die Liste der Abonnenten wird dann geleert. Die Objekt- und Kombinationslisten werden auch geleert, da keine Verbindung mehr zum Datenverteiler existiert und die Informationen nicht mehr aktualisiert werden können. Wenn der neue Zulieferer ein anderer als der alte ist, wird eine Zuliefererinformationsabmeldung zum alten Zulieferer gesendet. Wenn der neue Zulieferer in der Abonnentenliste eingetragen ist, wird dieser Eintrag aus der Liste entfernt und an ihn eine Zuliefererinformationskündigung gesendet. Danach wird eine Zuliefererinformationsanmeldung zum neuen Zulieferer gesendet.
addEntry
in interface ListsManagerInterface
delivererId
- ID des Zulieferers oder -1, wenn der kein Zulieferer mehr existiert.transmitterId
- ID des Datenverteilerspublic final void handleWaysChanges(long[] changedTransmitterIds)
ListsManagerInterface
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn sich neue günstigste Wege für bestimmte Datenverteiler ergeben haben.
handleWaysChanges
in interface ListsManagerInterface
changedTransmitterIds
- Array mit den IDs der betroffenen Datenverteiler.final void subscribe(long transmitterId, long[] ids)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Anmeldung auf die Zuliefererinformationen eines bestimmten Datenverteilers eingetroffen ist. Zuerst wird der Eintrag jedes in ids spezifizierten Datenverteilers aus der Tabelle bestimmt. Wenn ein Eintrag vorhanden ist, dann wird überprüft, ob ein Zulieferer dafür definiert ist. Ist keiner vorhanden, so wird dem Datenverteiler, der hier ein Abonnement versucht, eine Zuliefererinformationsankündigung gesendet. Wenn aber ein Zulieferer existiert, wird überprüft ob dieser nicht schon abonniert ist. Ist dies nicht der Fall, wird er zur Abonnentenliste hinzugefügt, und alle registrierten Objekte und Kombinationen aus Attributgruppe und Aspekt werden zusammen in einer Zuliefereraktualisierung zu ihm gesendet.
transmitterId
- ID des DAVids
- long Array mit den IDs enthält die Liste der DAVsfinal void unsubscribe(long transmitterId, long[] ids)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Abmeldung auf die Zuliefererinformationen eines bestimmten Datenverteilers eingetroffen ist. Zuerst wird der Eintrag jedes in ids spezifizierten Datenverteilers aus der Tabelle bestimmt. Wenn ein Eintrag vorhanden ist, dann wird überprüft, ob der Datenverteiler, der hier die Abmeldung geschickt hat, als Abonnent existiert. Ist dies der Fall, wird er aus der Abonnentenliste entfernt.
transmitterId
- ID des DAVids
- long Array mit den IDs, enthält die Liste der DAVsfinal void unsubscribeDeliverer(long transmitterId, long[] ids)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Kündigung eines Zulieferers auf die Zuliefererinformationen eines bestimmten Datenverteilers eingetroffen ist. Zuerst wird der Eintrag jedes in ids spezifizierten Datenverteilers aus der Tabelle bestimmt. Wenn ein Eintrag vorhanden ist, dann wird überprüft, ob der Datenverteiler, der hier die Kündigung geschickt hat, auch der eingetragene Zulieferer ist. Mit Hilfe des Wegmanagers wird überprüft, ob ein neuer Zulieferer in Frage kommt. Existiert ein anderer Zulieferer, dann wird ihm eine Zuliefererinformationsanmeldung gesendet. Wenn kein neuer Zulieferer existiert, dann wird eine Zuliefererinformationskündigung an die Abonnenten gesendet. Abonnentenliste, Objektliste und Kombinationsliste werden dann geleert.
transmitterId
- ID des DAVids
- long Array mit den IDs, enthält die Liste der DAVspublic final void handleDisconnection(long transmitterId)
ListsManagerInterface
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Datenverteilerverbindung nicht mehr existiert. Zunächst wird der Eintrag des Datenverteilers transmitterId aus der Zulieferertabelle entfernt. Der Zulieferer dieses Eintrags wird durch eine Zuliefererinformationsabmeldung, die Abonnenten dieses Eintrags durch eine Zuliefererinformationskündigung benachrichtigt. Danach wird überprüft bei welchen Einträgen der spezifizierte Datenverteiler als Zulieferer auftaucht. Dort wird überprüft, ob der Antragsdatenverteiler über einen anderen Datenverteiler erreichbar ist. In diesem Falle, wird ihm eine Zuliefererinformationsanmeldung gesendet. Wenn kein neuer Zulieferer existiert, werden die Abonnenten durch eine Zuliefererinformationskündigung informiert und die Abonnentenliste, Objektliste und Kombinationsliste geleert. Zuletzt wird überprüft, bei welchen Einträgen der spezifizierte Datenverteiler als Abonnent eingetragen ist und wird als Abonnent aus diesen Listen gestrichen.
handleDisconnection
in interface ListsManagerInterface
transmitterId
- ID des Datenverteilersfinal void updateEntry(TransmitterListsUpdate transmitterListsUpdate)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Zuliefereraktualisierung eintrifft. Bei dem Eintrag des spezifizierten Datenverteilers werden die Objekte und die Kombinationen aus Attributgruppen und Aspekten aktualisiert. Dabei werden vier Listen aufgebaut: - Liste der hinzugefügten Objekte - Liste der gelöschten Objekte - Liste der hinzugefügten Kombinationen - Liste der gelöschten Kombinationen aus Attributgruppen und Aspekten Diese Listen werden dann in eine Zuliefereraktualisierungsnachricht verpackt und an die Abonnenten weitergeleitet. Am Ende werden diese Listen zurückgegeben.
final void addInfo(BaseSubscriptionInfo info)
Neue Anmeldung beim lokalen Datenverteiler in die Anmeldelistenverwaltung aufnehmen. Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Quell- oder Senkenanmeldung auf ein bestimmtes Datum erfolgt ist. Im Antrag des lokalen Datenverteilers wird überprüft, ob das Objekt und die Kombination aus Attributgruppe und Aspekt aus der spezifizierten Basisanmeldeinformation vorhanden sind. Wenn das Objekt oder die Kombination nicht vorhanden ist, wird eine Zuliefereraktualisierung mit den dazugekommenen Objekt und/oder der dazugekommenen Kombination gebildet und zu den Abonnenten gesendet. Wenn das Objekt oder die Kombination vorhanden ist, dann wird der jeweilige Objekt- bzw. Kombinationszähler um eins erhöht.
info
- Anmeldeinformationenfinal void removeInfo(BaseSubscriptionInfo info)
Anmeldung beim lokalen Datenverteiler aus der Anmeldelistenverwaltung entfernen. Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Quell- oder Senkenabmeldung auf ein bestimmtes Datum erfolgt ist. Im Antrag des lokalen Datenverteilers wird überprüft ob das Objekt und die Kombination aus Attributgruppe und Aspekt aus der spezifizierten Basisanmeldeinformation vorhanden sind. Wenn das Objekt oder die Kombination vorhanden ist, wird deren Referenzzähler um eins vermindert. Wenn der Referenzzähler null ist, wird eine Zuliefereraktualisierung mit dem gelöschten Objekt und/oder der gelöschten Kombination gebildet, und zu den Abonnenten gesendet.
info
- Anmeldeinformationenfinal long[] getPotentialCentralDavs(BaseSubscriptionInfo info)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um die potentiellen Zentraldatenverteiler des spezifizierten Datums zu bestimmen. In den Anmeldelisten der erreichbaren Datenverteiler wird überprüft, ob gewünschte Objekt und die Kombination aus Attributgruppe und Aspekt enthalten ist.
info
- Anmeldeinformationenfinal void close()
Diese Methode gibt die vom ListsManager beanspruchten Resourcen wieder frei. Sie wird von der Verbindungsverwaltung aufgerufen, wenn der Datenverteiler beendet werden soll. Die im Konstruktor gestarteten Threads werden terminiert.
private void sendTransmitterUpdates(T_T_HighLevelCommunicationInterface connection, long transmitterId, java.util.List<java.lang.Long> objToAdd, java.util.List<java.lang.Long> combiToAdd)
Diese Methode sendet die Aktualisierungstelegramme, welche die Ergänzungen der Listen beinhalten.
connection
- Verbindung zwischen zwei DAVtransmitterId
- ID des DAVobjToAdd
- Liste der zu addierenden ObjektecombiToAdd
- Liste der zu addierenden Attributgruppen-Aspekt-Kombinationenprivate void sendTransmitterUpdates(T_T_HighLevelCommunicationInterface connection, long transmitterId, boolean update, java.util.List<java.lang.Long> objToAdd, java.util.List<java.lang.Long> objToRemove, java.util.List<AttributeGroupAspectCombination> combiToAdd, java.util.List<AttributeGroupAspectCombination> combiToRemove)
connection
- Verbindung zwischen zwei DAVtransmitterId
- ID des DAVupdate
- true,falseobjToAdd
- Liste der zu addierenden ObjekteobjToRemove
- Liste der zu entfernenden ObjektecombiToAdd
- Liste der zu addierenden Attributgruppen-Aspekt-KombinationencombiToRemove
- Liste der zu entfernenden Attributgruppen-Aspekt-Kombinationenprivate void cleanPendingDelayedSubscriptions(long[] ids)
Diese Methode entfernt die wartenden verzögerten Anmeldungen.
ids
- long Array mit den IDs der zu löschenden Datenverteilerpublic void dumpSubscriptionLists()