public class ConfigAreaFile extends java.lang.Object implements ConfigurationAreaFile, HeaderInfo
Diese Klasse stellt eine Konfigurationsbereichsdatei dar und speichert alle Objekte des Bereichs mit Historie.
Modifier and Type | Class and Description |
---|---|
private class |
ConfigAreaFile.FileIterator
Diese Klasse stellt einen Iterator zur Verfügung, der alle Objekte eines Konfigurationsbereichs zur Verfügung stellt.
|
static class |
ConfigAreaFile.OldBlockInformations
Diese Klasse speichert die Dateiposition eines Blocks, der Konfigurationsobjekte enthält, die ungültig sind und durch eine Reorganisation verschoben wurden und sich nicht mehr in der Mischobjektmenge befinden.
|
(package private) static class |
ConfigAreaFile.OldObject
Ein Objekt, das als “ungültig” markiert ist enthält den HashCode der Pid und die Id des Objekts.
|
private static class |
ConfigAreaFile.OldObjectTypeIdInfo
Diese Klasse speichert alle Inforamtionen, die benötigt werden um ein Objekt, das sich in der Mischmenge befindet aber nicht komplett in den Speicher geladen wurde, eventuell nachzuladen falls es gebraucht wird.
|
private static class |
ConfigAreaFile.SortObject
Diese Klasse wird mehrfach mit unterschiedlichen Aufgaben benutzt.
|
private static class |
ConfigAreaFile.SortObjectPid |
ConfigurationAreaFile.RestructureMode
Modifier and Type | Field and Description |
---|---|
private short |
_activeVersion
aktive Version, diese wird durch einen Neustart der Konfiguration gesetzt (durch den Konstruktor)
|
private short |
_activeVersionFile
aktive Version, die aus der Datei gelesen wurde.
|
private java.util.Map<java.lang.Long,SystemObjectInformationInterface> |
_actualObjects
Speichert alle (dynamisch und Konf.) aktuellen Objekte, als Schlüssel dient die Id.
|
private java.util.Map<java.lang.Long,java.util.List<SystemObjectInformationInterface>> |
_actualObjectsTypeId
Speichert zu allen TypeId’s die aktuellen Objekte.
|
private FileLock |
_areaFileLock
Mit diesem Objekt wird ein mehrfacher Zugriff auf diese Datei verhindert.
|
private long |
_backupProgress |
private java.io.File |
_configAreaFile
Wo befindet sich die Datei
|
private ConfigurationObjectInfo |
_configAreaObject
Stellt das Objekt dar, das den Konfigurationsbereich repräsentiert.
|
private java.lang.String |
_configurationAreaPid
Pid des Konfigurationsbereichs
|
private java.util.Map<java.lang.Short,java.lang.Long> |
_configurationAuthorityVersionActivationTime
synchronisierte Map, die den Aktivierungszeitpunkt jeder Version speichert.
|
private long |
_configurationDataChanged
letzter Zeitpunkt, an dem ein konfigurierender Datensatz geändert wurde.
|
private long |
_configurationObjectChanged
letzter Zeitpunkt, an dem ein Konfigurationsobjekt geändert wurde.
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private long |
_dynamicObjectChanged
letzter Zeitpunkt, an dem ein dynamisches Objekt geändert wurde.
|
private long |
_fileLength |
private ConfigFileManager |
_fileManager
Alle Änderungen an einem dynamischen Objekt oder an einem Konfigurationsobjekt, die den Zustand von “gültig” auf “ungültig” setzen oder ein Objekt hinzufügen müssen an dieses Objekt gemeldet werden
|
private long[] |
_globalActivationTimes
Array mit den globalen Aktivierungszeiten der Versionen dieses Bereichs.
|
private long |
_greatestId
Speichert die größte Id, die im Konfigurationsbereich vergeben wurde.
|
private long |
_headerEnd
Speichert, wo der Header endet.
|
private long[] |
_localActivationTimes
Array mit den lokalen Aktivierungszeiten der Versionen dieses Bereichs.
|
private java.util.Map<java.lang.Short,java.lang.Long> |
_localVersionActivationTime
Synchronisierte Map, die zu jeder Version den lokalen Aktivierungszeitpunkt speichert.
|
private java.util.Set<SystemObjectInformationInterface> |
_modifiedObjects
In dieser Menge werden alle dynamischen Objekte und Konfigurationsobjekte gespeichert, die modifiziert wurden und die aus diesem Grund noch in der Datei zu speichern sind.
|
private java.util.Map<java.lang.Long,SystemObjectInformationInterface> |
_newObjects
Speichert alle Objekte, die in Zukunft aktuell werden, als Schlüssel dient die Id.
|
private short |
_nextActiveVersion
Speichert die Version, die als nächstes gültig wird.
|
private short |
_nextActiveVersionFile
nächste aktive Version, die aus der Datei eingelesen wurde.
|
private short |
_nextInvalidBlockVersion
Speichert die nächste ungültige Version.
|
private java.util.Set<java.lang.Long> |
_objectsLockedForDeletion
Objekte, die im ersten Durchlauf als löschbar markiert wurden.
|
private java.util.Set<java.lang.Long> |
_objectsPendingDeletion
Objekte, die zwei Durchläufe hintereinander als löschbar erkannt wurden.
|
private short |
_objectVersion
Mit welcher Version wurden die Objekte geschrieben.
|
private java.util.Map<java.lang.Short,ConfigAreaFile.OldBlockInformations> |
_oldObjectBlocks
Speichert zu jedem Block, in dem ungültige Objekte gespeichert sind, ein Objekt ab, das die Position des Blocks (relativ zum Headerende) in der Datei enthält und einen Zeitstempel (wann wurde diese Version gültig), der sich auf den Block bezieht.
|
private java.util.Map<java.lang.Long,ObjectReference> |
_oldObjectsId
Speichert alle ungültig markierte Objekte, die sich in der Mischmenge befinden.
|
private java.util.Map<java.lang.Integer,java.util.Set<FilePointer>> |
_oldObjectsPid
Speichert zu einer Pid (Key = HashCode Integer), alle Dateipositionen der alten Objekte, die sich in der Mischmenge befinden.
|
private java.util.Map<java.lang.Long,java.util.List<ConfigAreaFile.OldObjectTypeIdInfo>> |
_oldObjectsTypeId
Speichert zu allen TypeId’s die alten Objekte.
|
private java.lang.Object |
_restructureLock
Wird angefordert, wenn die Reorganisation der Datei statt findet.
|
private int |
_serializerVersion
Mit dieser Version werden alle Daten in der Daten serialisiert.
|
private long |
_startIdIndex
relative Position des Index, der die IdŽs verwaltet.
|
private long |
_startMixedSet
Gibt an, wo (relativ zum Header) die Mischobjektmenge beginnt.
|
private long |
_startOldDynamicObjects
relative Position des Blocks, der alle ungültigen dynamischen Objekte enthält, die nach einer Reorganisation in diesem Block geschrieben wurden.
|
private long |
_startPidHashCodeIndex
relative Position des Index, der die hashCodes der PidŽs verwaltet verwaltet. (-1 bedeutet, dass dieser Wert nicht aus dem Header ausgelesen werden konnte oder beim erzeugen des Headers nicht bekannt war (Datei erzeugen))
|
private short |
ACTUAL_OBJECT_VERSION
Legt die aktuelle Version fest, mit der Objekte codiert werden
|
Constructor and Description |
---|
ConfigAreaFile(java.io.File configAreaFile,
short activeVersion,
ConfigFileManager configFileManager,
java.util.List<VersionInfo> localActivatedVersionTimes)
Dieser Konstruktor wird benutzt, wenn eine Datei für einen Konfigurationsbereich bereits existiert.
|
ConfigAreaFile(java.io.File configAreaFile,
java.lang.String pid,
short activeVersion,
int serializerVersion,
ConfigFileManager configFileManager)
Erzeugt eine Datei, die einen Konfigurationsbereich abbildet.
|
Modifier and Type | Method and Description |
---|---|
private void |
addToIndizes(BufferedRandomAccessFile toFile,
java.util.List<ConfigAreaFile.SortObject> newIdIndex,
java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
BinaryObject binaryObject,
long headerEnd) |
void |
addToIndizes(java.util.List<ConfigAreaFile.SortObject> idIndex,
java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> pidIndex,
BinaryObject objectInformation,
long filePosition) |
void |
addToIndizes(java.util.List<ConfigAreaFile.SortObject> idIndex,
java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> pidIndex,
SystemObjectInformationInterface objectInformation,
long filePosition) |
private java.util.List<SystemObjectInformationInterface> |
binarySearch(BufferedRandomAccessFile file,
long value,
boolean searchId) |
private java.util.List<SystemObjectInformationInterface> |
binarySearch(long value,
boolean searchId)
Diese Methode sucht zu einem Value alle Objekte, die als ungültig markiert sind.
|
void |
close()
Diese Methode wird aufgerufen, wenn das System heruntergefahren soll.
|
private void |
copyObjectsPreserveGaps(BufferedRandomAccessFile fromFile,
BufferedRandomAccessFile toFile,
long endPos,
java.util.List<ConfigAreaFile.SortObject> newIdIndex,
java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
long headerEnd)
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere.
|
private void |
copyObjectsRemoveGaps(BufferedRandomAccessFile fromFile,
BufferedRandomAccessFile toFile,
long endPos,
java.util.List<ConfigAreaFile.SortObject> newIdIndex,
java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
long headerEnd)
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere.
|
private void |
copyObjectsRemoveGapsAndDeleteObjects(BufferedRandomAccessFile fromFile,
BufferedRandomAccessFile toFile,
long endPos,
java.util.List<ConfigAreaFile.SortObject> newIdIndex,
java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
long headerEnd)
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere.
|
void |
createBackupFile(java.io.File targetDirectory)
Sichert die Datei in ein angegebenes Zielverzeichnis
|
ConfigurationObjectInfo |
createConfigurationObject(long objectID,
long typeID,
java.lang.String pid,
java.lang.String name)
Diese Methode erzeugt ein Konfigurationsobjekt.
|
DynamicObjectInfo |
createDynamicObject(long objectID,
long typeID,
java.lang.String pid,
short simulationVariant,
java.lang.String name,
DynamicObjectType.PersistenceMode persistenceMode)
Diese Methode erzeugt ein dynamisches Objekt, das sofort gültig ist.
|
private RestructureInfo |
createRestructuredCopy(BufferedRandomAccessFile oldConfigAreaFile,
BufferedRandomAccessFile newConfigAreaFile,
ConfigurationAreaFile.RestructureMode mode)
Führt eigentliche Restrukturierung aus
|
(package private) void |
declareObjectAsAGap(FilePointer filePosition) |
private void |
declareObjectAsAGap(FilePointer filePosition,
BufferedRandomAccessFile file)
Setzt die Id eines Objekts auf 0 und erklärt es somit als Lücke.
|
(package private) void |
deleteDynamicObject(DynamicObjectInformation dynamicObjectInfo)
Entfernt ein dynamisches Objekt aus alle Datenstrukturen(auch ConfigFileManager).
|
void |
deleteDynamicObjectsPermanently()
Löscht die für das Löschen vorgemerkten dynamischen Objekte vollständig und permanent.
|
(package private) void |
dontSaveObject(SystemObjectInformationInterface object)
Diese Methode entfernt ein Objekt aus Menge zu speichernden Objekte
|
void |
flush()
Diese Methode wird aufgerufen, wenn alle modifizierten Objekte des Konfigurationsbereichs persistent gespeichert werden sollen.
|
void |
forEach(Consumer<? super SystemObjectInformationInterface> consumer)
Iteriert über alle Objekte in diesem Bereich.
|
void |
forEachMixedObject(Consumer<? super SystemObjectInformationInterface> consumer)
Iteriert über alle Objekte in der Mischmenge in diesem Bereich.
|
private void |
forEachObjects(long startOffset,
long endOffset,
Consumer<? super SystemObjectInformationInterface> consumer) |
void |
forEachOldConfigurationObject(Consumer<? super ConfigurationObjectInfo> consumer)
Iteriert über alle Konfigurationsobjekte in den NGA-Blöcken in diesem Bereich.
|
void |
forEachOldDynamicObject(Consumer<? super DynamicObjectInfo> consumer)
Iteriert über alle dynamischen Objekte im NGDyn-Block in diesem Bereich.
|
private long |
getActivationTime(int version,
long[] activationTimes)
Bestimmt den Aktivierungszeitpunkt einer vorgegebenen Version.
|
private long[] |
getActivationTimeArray(java.util.Map<java.lang.Short,java.lang.Long> activationTimeMap)
Erzeugt ein Array mit den Aktivierungszeiten der Versionen dieses Bereichs.
|
(package private) short |
getActiveVersion() |
short |
getActiveVersion(long startTime,
ConfigurationAreaTime kindOfTime)
Gibt zu einem Zeitpunkt die Version zurück, die aktiv war.
|
SystemObjectInformationInterface[] |
getActualObjects(java.util.Collection<java.lang.Long> typeIds)
Gibt alle aktuellen Objekte zurück, die als TypeId einen der übergebenen TypeIds besitzen.
|
SystemObjectInformationInterface[] |
getActualObjects(long typeId)
Gibt alle aktuellen Objekte zurück, die als TypeId die übergebene TypeId besitzen.
|
long |
getBackupProgress() |
java.lang.String |
getConfigAreaPid()
Gibt die Pid des Konfigurationsbereichs zurück.
|
ConfigurationObjectInfo |
getConfigurationAreaInfo()
Methode, die das Objekt, das den Konfigurationsbereich darstellt, zurück gibt.
|
SystemObjectInformationInterface[] |
getCurrentObjects()
Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die in der aktuellen Version aktuell sind.
|
long |
getFileLength() |
long |
getGreatestId()
Diese Methode gibt die größte vergebene laufende Nummer einer Id des Konfigurationsbereichs zurück.
|
long |
getHeaderEnd()
Gibt das Headerende zurück ( = Position des Starts der NGA-Blöcke)
|
private java.io.File |
getIndexFileName(java.lang.String indexFileName) |
java.util.Collection<java.lang.Object> |
getMixedObjectSetObjects()
Lädt alle “aktuellen” und in “Zukunft aktuellen” Objekte.
|
SystemObjectInformationInterface[] |
getNewObjects()
Diese Methode gibt alle Konfigurationsobjekte zurück, die in einer zukünftigen Version aktuell werden.
|
short |
getNextActiveVersion()
Liefert die Version, ab der neu erstellte Konfigurationsobjekte gültig werden.
|
SystemObjectInformationInterface[] |
getObjects(long startTime,
long endTime,
ConfigurationAreaTime kindOfTime,
TimeSpecificationType timeSpecificationType,
java.util.Collection<java.lang.Long> typeIds)
Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die innerhalb des angegebenen Zeitbereichs gültig waren und deren TypeId gleich einer der übergebenen TypeIdŽs ist.
|
java.util.List<SystemObjectInformationInterface> |
getObjects(java.lang.String pid,
long startTime,
long endTime,
ConfigurationAreaTime kindOfTime,
short simulationVariant)
Diese Methode gibt Objekte zurück, die in dem angegebenen Zeibereich gültig waren.
|
SystemObjectInformationInterface |
getOldObject(long id)
Diese Methode gibt ein Objekt zurück, das als ungültig markiert wurde.
|
static long |
getRelativeFilePositionForInvalidConfigObject(long headerEnd,
long absoluteFilePosition) |
static long |
getRelativeFilePositionForInvalidDynamicObject(long dynamicAreaOffset,
long absoluteFilePosition) |
private long |
getRunningNumber(long wholeNumber)
Maskiert die ersten 40 Bits einer Id
|
int |
getSerializerVersion()
Alle Daten, die als Byte-Array gespeichert werden müssen, werden mit einem Serializer
Serializer erstellt. |
long |
getStartIdIndex()
Gibt den Start des ID-Index zurück
|
long |
getStartMixedSet()
Gibt den Start der Mischmenge zurück
|
long |
getStartOldDynamicObjects()
Gibt den Start des NG-Dyn-Blocks zurück
|
long |
getStartPidHashCodeIndex()
Gibt den Start des Pid-Index zurück
|
private SystemObjectInformationInterface |
getSystemObjectInfo(ObjectReference ref,
BufferedRandomAccessFile file)
Lädt das Objekt aus der Datei oder holt es aus dem Speicher (transiente Objekte).
|
boolean |
initialVersionRestructure()
Diese Methode wird aufgerufen, wenn der Konfigurationsverantwortliche eine neue Version aktiviert.
|
private boolean |
isValueAtTheMiddle(long start,
long middle,
long end)
Diese Methode prüft ob folgende Gleichung wahr ist: start <= middle <= end
|
java.util.Iterator<SystemObjectInformationInterface> |
iterator()
Deprecated.
|
private SystemObjectInformation |
loadObjectFromFile(BufferedRandomAccessFile file,
FilePointer filePosition,
ConfigAreaFile.FileIterator fileIterator)
Deprecated.
|
(package private) SystemObjectInformation |
loadObjectFromFile(FilePointer filePosition)
Lädt ein Objekt aus einer Datei
|
private SystemObjectInformation |
loadObjectFromFile(FilePointer filePosition,
ConfigAreaFile.FileIterator fileIterator)
Deprecated.
Diese Methode öffnet und schießt ein neues
BufferedRandomAccessFile . Auf Performancegründen sollte für das Laden von mehreren Objekten immer dasselbe BufferedFile-Objekt verwendet werden. Einzige benutzung ist aktuell der ConfigAreaFile.FileIterator , der ebenfalls nicht mehr benutzt wird und deprecated ist. |
void |
markObjectsForDeletion(java.util.List<java.lang.Long> objectsToDelete)
Markiert eine Menge von dynamischen Objekten als ausreichend als und nicht mehr Referenziert, sodass diese ggf. beim nächsten Neustart endgültig gelöscht werden können.
|
(package private) void |
objectModified(SystemObjectInformationInterface modifiedObject)
Diese Methode wird von einem Objekt aufgerufen, wenn Informationen des Objekts geändert wurden.
|
(package private) boolean |
objectValid(java.lang.Object objectInfo,
long queryIntervalStart,
long queryIntervalEnd,
ConfigurationAreaTime kindOfTime,
TimeSpecificationType timeSpecificationType)
Diese Methode prüft, ob ein Objekte im angegebenen Zeitraum gültig war/ist.
|
private void |
putActualObject(SystemObjectInformationInterface actualObjekt)
Fügt das Objekt zu allen Datenstrukturen hinzu, die für den schnellen Zugriff(mit Id) auf aktuelle Objekte benötigt werden
|
private void |
putActualObjectTypeId(SystemObjectInformationInterface actualObject)
Speichert ein Objekt in der Map, die alle aktuellen Objekte nach deren TypeId verwaltet
|
private void |
putNewObject(SystemObjectInformationInterface newObjekt)
Fügt das Objekt zu allen Datenstrukturen hinzu, die für den schnellen Zugriff auf “in Zukunft gültige” Objekte benötigt werden
|
private void |
putOldObject(ConfigAreaFile.OldObject oldObject)
Fügt ein als “ungültig” markiertes Objekt in alle interenen Datenstrukturen hinzu, die für einen schnellen Zugriff auf ungültige Objekte benötigt werden.
|
private void |
putOldObjectTypeId(long typeId,
long firstValid,
long firstInvalid,
boolean configurationObject,
ObjectReference objectReference)
Speichert alle benötigten Ladeinforamtionen zu einem Objekt in der Map, die alle alten Objekte verwaltet.
|
private void |
putUnknownObject(SystemObjectInformationInterface unknownObject)
Legt ein dynamisches Objekt oder ein Konfigurationsobjekt in die entsprechende Datenstruktur für aktuelle oder in Zukunft gültige Objekte ab.
|
private java.util.Collection<java.lang.Long> |
readIdIndex(java.lang.String indexFileName)
Schreibt eine ID-Index-Datei, die die zum Löschen vorgemerkten IDs enthält.
|
private SystemObjectInformation |
readObjectFromFile(long filePosition,
int objectsize,
long id,
long typeId,
long firstInvalid,
long firstValid,
byte objecttype,
BufferedRandomAccessFile file)
Lädt ein dynamischen Objekt oder ein Konfigurationsobjekt aus der Datei des Konfigurationsbereichs.
|
boolean |
referenceAllowed(SystemObjectInformationInterface systemObjectInfo)
Prüft, ob ein angegebenenes Objekt von anderen Objekten referenzert werden darf
|
(package private) void |
removeNewObject(ConfigurationObjectInfo newObject)
Diese Methode entfernt ein Objekt, das in zukünftigen Versionen gültig werden soll aus allen Datenstrukturen (auch dem ConfigFileManager), die den schnellen Zugriff auf diese Art von Objekten ermöglichen.
|
boolean |
restructure()
Deprecated.
Bitte Mode-Parameter übergeben um die Art der Restrukturierung anzugeben.
|
void |
restructure(ConfigurationAreaFile.RestructureMode mode)
Diese Methode reorganisiert eine Konfigurationsbereichsdatei.
|
private void |
restructureMain(ConfigurationAreaFile.RestructureMode mode) |
(package private) void |
setDynamicObjectInvalid(DynamicObjectInformation invalidObject)
Diese Methode wird aufgerufen, wenn ein dynamisches Objekt auf “ungültig” gesetzt wird.
|
void |
setNextActiveVersion(short nextActiveVersion)
Legt die Version fest mit der Konfigurationsobjekte, die mit
ConfigurationAreaFile.createConfigurationObject(long, long, java.lang.String, java.lang.String) erzeugt werden, gültig werden. |
void |
swapFiles(RestructureInfo restructureInfo,
java.io.File configAreaNewName) |
java.lang.String |
toString() |
(package private) static byte[] |
unzip(byte[] zippedData) |
void |
updateHeaderPositions(HeaderInfo headerInfo) |
private long |
writeConfigurationObjectToFile(ConfigurationObjectInformation configurationObject,
BufferedRandomAccessFile file,
boolean declareGap,
boolean setNewFilePosition)
Speichert ein Objekt ans Ende der übergebenen Datei.
|
private void |
writeCurrentObjects(BufferedRandomAccessFile newConfigAreaFile,
RestructureInfo restructureInfo,
java.util.Map<java.lang.Long,SystemObjectInformationInterface> objectMap) |
(package private) void |
writeDynamicObject(DynamicObjectInformation object)
Speicher ein dynamisches Objekt in die Datei des Konfigurationsbereichs.
|
private long |
writeDynamicObjectToFile(DynamicObjectInformation dynamicObject,
BufferedRandomAccessFile file,
boolean declareGap,
boolean setNewFilePosition)
Speichert ein Objekt ans Ende der übergebenen Datei.
|
private void |
writeHeader(HeaderInfo positions,
BufferedRandomAccessFile file)
Schreibt einen Header in die übergebene Datei.
|
private void |
writeIdIndex(java.lang.String indexFileName,
java.util.Collection<java.lang.Long> values)
Schreibt einen ID-Index analog zu
readIdIndex(String) . |
void |
writeInvalidTime(DynamicObjectInformation object)
Wird aufgerufen, wenn ein dynamisches Objekt ungültig wird.
|
private void |
writeSystemObjectWithoutIdAndTypeId(SystemObjectInformationInterface object,
Serializer serializer)
Speichert die Pid, den Namen des SystemObjects und alle konfigurierenden Datensätze .
|
(package private) static byte[] |
zip(byte[] data)
Packt ein Byte-Array mit dem Packer “ZIP” und gibt die Daten gepackt zurück
|
private static final Debug _debug
DebugLogger für Debug-Ausgaben
private final java.io.File _configAreaFile
Wo befindet sich die Datei
private short _activeVersion
aktive Version, diese wird durch einen Neustart der Konfiguration gesetzt (durch den Konstruktor)
private short _activeVersionFile
aktive Version, die aus der Datei gelesen wurde.
private short _nextActiveVersion
Speichert die Version, die als nächstes gültig wird. Die Variable wird mit einer Setter gesetzt.
private short _nextActiveVersionFile
nächste aktive Version, die aus der Datei eingelesen wurde.
private int _serializerVersion
Mit dieser Version werden alle Daten in der Daten serialisiert.
private long _headerEnd
Speichert, wo der Header endet. Diese Information wird gebraucht, da alle Angaben zur Position in der Datei relativ zum Ende des Header sind. Addiert man die beiden Werte, so erhält man die abslute Position in der Datei.
Die gespeicherte Position zeigt auf den ersten Wert, der nach dem Header gespeichert ist.
private final java.util.Map<java.lang.Short,ConfigAreaFile.OldBlockInformations> _oldObjectBlocks
Speichert zu jedem Block, in dem ungültige Objekte gespeichert sind, ein Objekt ab, das die Position des Blocks (relativ zum Headerende) in der Datei enthält und einen Zeitstempel (wann wurde diese Version gültig), der sich auf den Block bezieht. Als Key dient die Versionsnummer. Sind keine Elemente vorhanden, so wurde noch kein Block angelegt. Wenn die Datei neu erzeugt wird, ist dies der Fall. Der erste Block entsteht nach der ersten Reorganisation, nach dem die aktuelle Version erhöht wurde.
WARNUNG: Beim Zugriff mit .get() muss der Key auf short gecastet werden (.get((short) XXX)) !!!
Diese Informationen werden für die Reorganisation gebraucht, bei einem Neustart wird aus diesen Informationen die Map _configurationAuthorityVersionActivationTime rekonstruiert.
Es sind zwei Maps nötig, da die _oldObjectBlocks-Map speichert wie weit die Reorganisation gekommen ist und die Map _configurationAuthorityVersionActivationTime wird im Konstruktor gesetzt und wird dann die nächste gültige Vesion enthalten und ist dadurch um mindestens eine Version größer als jede Version die _oldObjectBlocks speichert.
Findet kein Versionswechsel statt, sind die Version/Zeitstempel Paare in _oldObjectBlocks und _configurationAuthorityVersionActivationTime identisch.
private final java.util.Map<java.lang.Short,java.lang.Long> _configurationAuthorityVersionActivationTime
synchronisierte Map, die den Aktivierungszeitpunkt jeder Version speichert. Als Key dient die Version, als value wird der Zeitpunkt zurückgegbeen, an dem das Konfigurationsverantwortliche die Version aktiviert hat. Siehe auch Kommentar _oldObjectBlocks.
WARNUNG: Beim Zugriff mit .get() muss der Key auf short gecastet werden (.get((short) XXX)) !!!
private long[] _globalActivationTimes
Array mit den globalen Aktivierungszeiten der Versionen dieses Bereichs. Am Index 0 ist die Zeit 0 eingetragen. Die Aktivierungszeit der Version n ist am Index n eingetragen. Bei nicht aktivierten Zwischenversionen wird die Zeit der nächsten Aktivierung eingetragen. Der größte verwendete Index entspricht der größten aktivierten Version.
private short _nextInvalidBlockVersion
Speichert die nächste ungültige Version. Es ist die größte Version aus _oldObjectBlocks plus 1. Ist noch kein Block vorhanden, so ist die “nächste” ungültige Version, Version 2 (Version 1 ist die erste mögliche gültige Version)
private long _startOldDynamicObjects
relative Position des Blocks, der alle ungültigen dynamischen Objekte enthält, die nach einer Reorganisation in diesem Block geschrieben wurden.
private long _startIdIndex
relative Position des Index, der die IdŽs verwaltet.
private long _startPidHashCodeIndex
relative Position des Index, der die hashCodes der PidŽs verwaltet verwaltet. (-1 bedeutet, dass dieser Wert nicht aus dem Header ausgelesen werden konnte oder beim erzeugen des Headers nicht bekannt war (Datei erzeugen))
private long _startMixedSet
Gibt an, wo (relativ zum Header) die Mischobjektmenge beginnt. Dies steht entweder im Header, oder bei einener neuen Datei beginnt dieser Bereich genau hinter dem Header.
private short _objectVersion
Mit welcher Version wurden die Objekte geschrieben.
private final short ACTUAL_OBJECT_VERSION
Legt die aktuelle Version fest, mit der Objekte codiert werden
private java.lang.String _configurationAreaPid
Pid des Konfigurationsbereichs
private long _dynamicObjectChanged
letzter Zeitpunkt, an dem ein dynamisches Objekt geändert wurde. Der Wert -1 zeigt an, dass dieser Wert noch unbekannt ist.
private long _configurationObjectChanged
letzter Zeitpunkt, an dem ein Konfigurationsobjekt geändert wurde. Der Wert -1 zeigt an, dass dieser Wert noch unbekannt ist.
private long _configurationDataChanged
letzter Zeitpunkt, an dem ein konfigurierender Datensatz geändert wurde. Der Wert -1 zeigt an, dass dieser Wert noch unbekannt ist.
private final java.util.Set<SystemObjectInformationInterface> _modifiedObjects
In dieser Menge werden alle dynamischen Objekte und Konfigurationsobjekte gespeichert, die modifiziert wurden und die aus diesem Grund noch in der Datei zu speichern sind. Die Objekte tragen sich selbständig mit objectModified(de.bsvrz.puk.config.configFile.fileaccess.SystemObjectInformationInterface)
in die Liste ein.
private final java.util.Map<java.lang.Long,SystemObjectInformationInterface> _actualObjects
Speichert alle (dynamisch und Konf.) aktuellen Objekte, als Schlüssel dient die Id.
WARNUNG: Beim Zugriff mit .get() muss der Key auf long gecastet werden (.get((long) XXX)) !!!
private final java.util.Map<java.lang.Long,SystemObjectInformationInterface> _newObjects
Speichert alle Objekte, die in Zukunft aktuell werden, als Schlüssel dient die Id.
WARNUNG: Beim Zugriff mit .get() muss der Key auf long gecastet werden (.get((long) XXX)) !!!
private final java.util.Map<java.lang.Long,ObjectReference> _oldObjectsId
Speichert alle ungültig markierte Objekte, die sich in der Mischmenge befinden. Schlüssel = Id, Value = Objekte mit dem das ungültige Objekt angefordert werden kann.
WARNUNG: Beim Zugriff mit .get() muss der Key auf long gecastet werden (.get((long) XXX)) !!!
private final java.util.Map<java.lang.Integer,java.util.Set<FilePointer>> _oldObjectsPid
Speichert zu einer Pid (Key = HashCode Integer), alle Dateipositionen der alten Objekte, die sich in der Mischmenge befinden. Bei einer Reorganisation werden die Listen der Map um die Objekte bereinigt, die in einen nGa oder in den dyn nGa gespeichert werden.
WARNUNG: Beim Zugriff mit .get() muss der Key auf integer gecastet werden (.get((integer) XXX)) !!!
private final ConfigFileManager _fileManager
Alle Änderungen an einem dynamischen Objekt oder an einem Konfigurationsobjekt, die den Zustand von “gültig” auf “ungültig” setzen oder ein Objekt hinzufügen müssen an dieses Objekt gemeldet werden
private final java.lang.Object _restructureLock
Wird angefordert, wenn die Reorganisation der Datei statt findet. Die Sperre wird ebenfalls angefordert, wenn alte Objekte angefordert werden oder ein dynamisches Objekt als ungültig deklariert wird, die sich im Speicher befinden. Dieser Moment ist kritisch, da zu diesem Zeitpunkt eine Reorganisation stattfinden kann und sich damit die Dateipositionen ändern und die Objekte sogar komplett aus dem Speicher gelöscht werden. Neue alte Objekte können aber ohne Probleme abgelegt werden, da sich die Reorgansation merkt, welche Objekte modifiziert wurden.
private ConfigurationObjectInfo _configAreaObject
Stellt das Objekt dar, das den Konfigurationsbereich repräsentiert. Das Objekt wird entweder beim laden der Mischmenge über die Pid des Konfigurationsbereichs gefunden oder es wird ein neuer Bereich angelegt. Dann wird das Objekt erst mit createConfigurationObject(long, long, java.lang.String, java.lang.String)
erzeugt, auch in diesem Fall wird das Objekt über die Pid identifiziert.
private final java.util.Map<java.lang.Short,java.lang.Long> _localVersionActivationTime
Synchronisierte Map, die zu jeder Version den lokalen Aktivierungszeitpunkt speichert. Als Key dient die Versionsnummer, als value wird der Aktivierungszeitpunkt zurückgegeben.
WARNUNG: Beim Zugriff mit .get() muss der Key auf short gecastet werden (.get((short) XXX)) !!!
private long[] _localActivationTimes
Array mit den lokalen Aktivierungszeiten der Versionen dieses Bereichs. Am Index 0 ist die Zeit 0 eingetragen. Die Aktivierungszeit der Version n ist am Index n eingetragen. Bei nicht aktivierten Zwischenversionen wird die Zeit der nächsten Aktivierung eingetragen. Der größte verwendete Index entspricht der größten aktivierten Version.
private long _greatestId
Speichert die größte Id, die im Konfigurationsbereich vergeben wurde. Der Wert wird beim laden des Konfigurationsbereichs erzeugt, in dem beim laden der Mischmenge die Id der Objekte geprüft wird, zusätzlich muss der letzte Wert des Index (Id) betrachtet werden. Der Index enthält alle IdŽs aller Objekte, die sich in den nGa Bereichen bzw. dem dynamischen nGa Bereich befinden.
Der Wert 0 bedeutet, dass noch kein Konfigurationsobjekt oder dynamisches Objekt im Konfigurationsbereich abgelegt wurde.
private final java.util.Map<java.lang.Long,java.util.List<SystemObjectInformationInterface>> _actualObjectsTypeId
Speichert zu allen TypeId’s die aktuellen Objekte. Als Schlüssel dient die TypeId, als Value wird eine Liste mit allen Objekten zurückgegeben, die aktuell sind und deren TypeId mit dem Schlüssel übereinstimmt.
private final java.util.Map<java.lang.Long,java.util.List<ConfigAreaFile.OldObjectTypeIdInfo>> _oldObjectsTypeId
Speichert zu allen TypeId’s die alten Objekte. Als Schlüssel dient die TypeId, als Value wird eine Liste mit allen Objekten zurückgegeben. Die Objekte beinhalten ob das Objekt dynamisch oder konfigurierend ist und die Version bzw. Zeitpunkt an dem das Objekt gültig geworden ist. Als letztes ein Objekte, mit dem das Objekt wieder rekonstruiert werden kann.
private final FileLock _areaFileLock
Mit diesem Objekt wird ein mehrfacher Zugriff auf diese Datei verhindert. Dieser Mechanismus funktioniert nur, wenn alle Klassen, die auf diese Datei zugreifen, ihn auch benutzen.
private final java.util.Set<java.lang.Long> _objectsLockedForDeletion
Objekte, die im ersten Durchlauf als löschbar markiert wurden. Weitere Referenzen auf diese Objekte sind nicht erlaubt. Es ist allerdings möglich (wenn auch Unwahrscheinlich), dass Objekte zwischen ermittlung der nicht mehr Referenzierbaren Objekte und dem Eintragen in dieses Set plötzlich wieder referenziert wurden. Daher dürfen diese Objekte nicht endgültig gelöscht werden. Ist das Objekt auch im zweiten Durchlauf als löschbar markiert, wird es in _objectsPendingDeletion kopiert.
private final java.util.Set<java.lang.Long> _objectsPendingDeletion
Objekte, die zwei Durchläufe hintereinander als löschbar erkannt wurden. Alle Objekte in diesem Set werden sicher nicht mehr referenziert und können endgültig gelöscht werden.
private volatile long _backupProgress
private volatile long _fileLength
public ConfigAreaFile(java.io.File configAreaFile, short activeVersion, ConfigFileManager configFileManager, java.util.List<VersionInfo> localActivatedVersionTimes) throws java.io.IOException
Dieser Konstruktor wird benutzt, wenn eine Datei für einen Konfigurationsbereich bereits existiert.
configAreaFile
- Datei, in der der Konfigurationsberich gespeichert istactiveVersion
- aktive Version mit der der Konfigurationsbereich gestartet wirdconfigFileManager
- Objekt, das alle Konfigurationsbereiche verwaltetlocalActivatedVersionTimes
- Liste, die zu jeder Version, die lokal aktiviert wurde, den Zeitpunkt enthält, wann die Version aktiviert wurdejava.io.IOException
public ConfigAreaFile(java.io.File configAreaFile, java.lang.String pid, short activeVersion, int serializerVersion, ConfigFileManager configFileManager) throws java.io.IOException
Erzeugt eine Datei, die einen Konfigurationsbereich abbildet. Der Header wird erstellt, usw..
configAreaFile
- Datei, in der die Objekte gespeichert werdenpid
- Pid des KonfigurationsbereichsactiveVersion
- aktuelle VersionserializerVersion
- Version, mit der alle Daten in der Datei serialisiert werden müssen. Alle Daten, dieconfigFileManager
- java.io.IOException
private java.util.Collection<java.lang.Long> readIdIndex(java.lang.String indexFileName) throws java.io.IOException
Schreibt eine ID-Index-Datei, die die zum Löschen vorgemerkten IDs enthält. Der Dateiaufbau ist wie folgt: Int: Anzahl Einträge Long[]: Einträge Long: HashCode der Einträge zur Prüfung der Dateiintegrität
indexFileName
- Suffix oder Name des Index. Aktuell werden zwei Indizes verwendet, da Objekte im ersten Index noch in ausnahmefällen Referenziert werden könnenjava.io.IOException
- falls Dateinhalt nicht stimmt oder ein fehler beim Lesen auftratprivate void writeIdIndex(java.lang.String indexFileName, java.util.Collection<java.lang.Long> values) throws java.io.IOException
Schreibt einen ID-Index analog zu readIdIndex(String)
.
indexFileName
- Indexname bzw. Suffixvalues
- Zu Schreibende Long-Werte (IDs)java.io.IOException
private java.io.File getIndexFileName(java.lang.String indexFileName)
public java.lang.String toString()
toString
in class java.lang.Object
private long[] getActivationTimeArray(java.util.Map<java.lang.Short,java.lang.Long> activationTimeMap)
Erzeugt ein Array mit den Aktivierungszeiten der Versionen dieses Bereichs. Am Index 0 ist die Zeit 0 eingetragen.
activationTimeMap
- Map mit der globalen oder lokalen Zuordnung von aktivierten Versionen zum jeweiligen Zeitpunktprivate long getActivationTime(int version, long[] activationTimes)
Bestimmt den Aktivierungszeitpunkt einer vorgegebenen Version.
version
- Version deren Aktivierungszeitpunkt bestimmt werden soll.activationTimes
- Array mit den globalen bzw. lokalen Aktivierungszeitpunktenpublic void setNextActiveVersion(short nextActiveVersion)
ConfigurationAreaFile
Legt die Version fest mit der Konfigurationsobjekte, die mit ConfigurationAreaFile.createConfigurationObject(long, long, java.lang.String, java.lang.String)
erzeugt werden, gültig werden.
setNextActiveVersion
in interface ConfigurationAreaFile
nextActiveVersion
- Version, mit der Konfigurationsobjekte gültig werden. Die erste Version, mit der ein Objekt gültig sein kann, ist die 1. Die Versionen sind positive Ganzzahlen, die fortlaufend nummeriert sind.public short getNextActiveVersion()
ConfigurationAreaFile
Liefert die Version, ab der neu erstellte Konfigurationsobjekte gültig werden.
getNextActiveVersion
in interface ConfigurationAreaFile
public ConfigurationObjectInfo getConfigurationAreaInfo()
Methode, die das Objekt, das den Konfigurationsbereich darstellt, zurück gibt.
getConfigurationAreaInfo
in interface ConfigurationAreaFile
null
, wenn der Bereich gerade erzeugt wurde.public void flush() throws java.io.IOException
ConfigurationAreaFile
Diese Methode wird aufgerufen, wenn alle modifizierten Objekte des Konfigurationsbereichs persistent gespeichert werden sollen.
flush
in interface ConfigurationAreaFile
java.io.IOException
- Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert istpublic void createBackupFile(java.io.File targetDirectory) throws java.io.IOException
Sichert die Datei in ein angegebenes Zielverzeichnis
targetDirectory
- Zielverzeichnisjava.io.IOException
- IO-Fehlerpublic long getBackupProgress()
public long getFileLength()
public void close() throws java.io.IOException
ConfigurationAreaFile
Diese Methode wird aufgerufen, wenn das System heruntergefahren soll. Es müssen alle Daten gespeichert werden (siehe ConfigurationAreaFile.flush()
und ein Zustand hergestellt werden, mit dem das System zu einem späteren Zeitpunkt wieder hochgefahren werden kann.
close
in interface ConfigurationAreaFile
java.io.IOException
- Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert istvoid writeDynamicObject(DynamicObjectInformation object)
Speicher ein dynamisches Objekt in die Datei des Konfigurationsbereichs. Diese Methode wird benötigt, wenn ein dynamisches Objekt auf “Invalid” gesetzt werden. Für Konfigurationsobjekte ist dies nicht nötig, da diese bis zum beenden der Konfiguration im Speicher bleiben.
object
- zu speicherndes Objektspublic DynamicObjectInfo createDynamicObject(long objectID, long typeID, java.lang.String pid, short simulationVariant, java.lang.String name, DynamicObjectType.PersistenceMode persistenceMode)
ConfigurationAreaFile
Diese Methode erzeugt ein dynamisches Objekt, das sofort gültig ist.
createDynamicObject
in interface ConfigurationAreaFile
objectID
- ID des ObjektstypeID
- Typ des Objekts, der Typ wird über die ID festgelegtpid
- Pid des ObjektssimulationVariant
- Simulationsvariante unter der das dynamische Objekt gültig istname
- Name des Objekts, null
wird als "" interpretiertpersistenceMode
- Soll das dynamische Objekte persistent gespeichert werdenConfigurationAreaFile.getGreatestId()
public ConfigurationObjectInfo createConfigurationObject(long objectID, long typeID, java.lang.String pid, java.lang.String name)
ConfigurationAreaFile
Diese Methode erzeugt ein Konfigurationsobjekt.
createConfigurationObject
in interface ConfigurationAreaFile
objectID
- ID des ObjektstypeID
- Typ des Objekts, der Typ wird über die ID festgelegtpid
- Pid des Objektsname
- Name des Objekts, null
wird als "" interpretiertConfigurationAreaFile.getGreatestId()
private long getRunningNumber(long wholeNumber)
Maskiert die ersten 40 Bits einer Id
wholeNumber
- Id, die maksiert werden sollpublic SystemObjectInformationInterface[] getCurrentObjects()
ConfigurationAreaFile
Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die in der aktuellen Version aktuell sind.
getCurrentObjects
in interface ConfigurationAreaFile
public SystemObjectInformationInterface[] getActualObjects(long typeId)
ConfigurationAreaFile
Gibt alle aktuellen Objekte zurück, die als TypeId die übergebene TypeId besitzen.
getActualObjects
in interface ConfigurationAreaFile
typeId
- TypeId, die ein Objekt besitzen muss, damit es zurückgegeben wirdpublic SystemObjectInformationInterface[] getActualObjects(java.util.Collection<java.lang.Long> typeIds)
ConfigurationAreaFile
Gibt alle aktuellen Objekte zurück, die als TypeId einen der übergebenen TypeIds besitzen.
getActualObjects
in interface ConfigurationAreaFile
typeIds
- TypeIds, die ein Objekt besitzen muss, damit es zurückgegeben wirdpublic SystemObjectInformationInterface[] getObjects(long startTime, long endTime, ConfigurationAreaTime kindOfTime, TimeSpecificationType timeSpecificationType, java.util.Collection<java.lang.Long> typeIds)
ConfigurationAreaFile
Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die innerhalb des angegebenen Zeitbereichs gültig waren und deren TypeId gleich einer der übergebenen TypeIdŽs ist. Der Parameter timeSpecificationType
bestimmt, wann/wie lange ein Objekt gültig gewesen sein muss um in die Lösung aufgenommen zu werden.
getObjects
in interface ConfigurationAreaFile
startTime
- Zeitpunkt, ab der ein Objekt gültig sein muss, um zurückgegeben zu werdenendTime
- Zeitpunkt, bis zu der Objekte zurückgegeben werdenkindOfTime
- Ein Konfigurationsobjekt wird mit der Aktivierung einer Version gültig. Da der Konfigurationsverantwortliche die Version zu einem früheren Zeitpunkt aktiviert haben kann, als die lokale Konfiguration, legt dieser Parameter fest, welcher Zeitpunkt für ein Konfigurationsobjekt benutzt werden soll an dem es als “gültig” markiert wurde.timeSpecificationType
- Gibt die Art und Weise an, wie der Zeitraum zu betrachten ist.typeIds
- Liste von TypeIdŽs. Damit ein Objekt zurückgegeben wird, muss die TypeId des Objekts mit einer TypeId in der Liste übereinstimmenprivate boolean isValueAtTheMiddle(long start, long middle, long end)
Diese Methode prüft ob folgende Gleichung wahr ist:
start <= middle <= end
public short getActiveVersion(long startTime, ConfigurationAreaTime kindOfTime)
Gibt zu einem Zeitpunkt die Version zurück, die aktiv war.
startTime
- Zeitpunkt, zu dem die Version aktiv gewesen sein musskindOfTime
- Soll die Aktivierungszeit des Konfigurationsverantwortlichen oder die lokale Aktivierung zur Berechnung der Version benutzt werdenpublic SystemObjectInformationInterface[] getNewObjects()
ConfigurationAreaFile
Diese Methode gibt alle Konfigurationsobjekte zurück, die in einer zukünftigen Version aktuell werden.
getNewObjects
in interface ConfigurationAreaFile
@Deprecated public java.util.Iterator<SystemObjectInformationInterface> iterator()
ConfigurationAreaFile
Stellt alle dynamischen Objekte und Konfigurationsobjekte zur Verfügung.
iterator
in interface ConfigurationAreaFile
public void forEach(Consumer<? super SystemObjectInformationInterface> consumer)
Iteriert über alle Objekte in diesem Bereich.
forEach
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdpublic void forEachOldConfigurationObject(Consumer<? super ConfigurationObjectInfo> consumer)
Iteriert über alle Konfigurationsobjekte in den NGA-Blöcken in diesem Bereich.
forEachOldConfigurationObject
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdpublic void forEachOldDynamicObject(Consumer<? super DynamicObjectInfo> consumer)
Iteriert über alle dynamischen Objekte im NGDyn-Block in diesem Bereich.
forEachOldDynamicObject
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdpublic void forEachMixedObject(Consumer<? super SystemObjectInformationInterface> consumer)
Iteriert über alle Objekte in der Mischmenge in diesem Bereich.
forEachMixedObject
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdprivate void forEachObjects(long startOffset, long endOffset, Consumer<? super SystemObjectInformationInterface> consumer)
private void writeHeader(HeaderInfo positions, BufferedRandomAccessFile file) throws java.io.IOException
Schreibt einen Header in die übergebene Datei. Der FileDescriptor wird auf Position 0 gesetzt und steht am Ende des Schreibvorgangs am Ende des Headers.
file
- java.io.IOException
public java.util.Collection<java.lang.Object> getMixedObjectSetObjects()
Lädt alle “aktuellen” und in “Zukunft aktuellen” Objekte. Objekte die ungültig sind, aber sich noch in der Mischobjektmenge befinden, werden nur Teilweise (ID, Pid-HashCode, Dateiposition) geladen.
Soll der Bereich in einer anderen als der aktuellen Version geladen werden, dann müssen ebenfalls die nGa-Bereiche betrachtet werden.
SystemObjectInformationInterface
und ConfigAreaFile.OldObject
java.io.IOException
NoSuchVersionException
private void putUnknownObject(SystemObjectInformationInterface unknownObject)
Legt ein dynamisches Objekt oder ein Konfigurationsobjekt in die entsprechende Datenstruktur für aktuelle oder in Zukunft gültige Objekte ab.
unknownObject
- Objekt, das eingetragen werden sollprivate void putOldObject(ConfigAreaFile.OldObject oldObject)
Fügt ein als “ungültig” markiertes Objekt in alle interenen Datenstrukturen hinzu, die für einen schnellen Zugriff auf ungültige Objekte benötigt werden.
Alle Objekte, die übergeben werden, sind auch in der Datei enthalten, transiente Objekte können mit dieser Methode nicht abgebildet werden.
oldObject
- Objekt, das Id, PidHashCode und die Dateipostion enthält. Das configAreaFileObjekt wird nicht benötigt.private void putNewObject(SystemObjectInformationInterface newObjekt)
Fügt das Objekt zu allen Datenstrukturen hinzu, die für den schnellen Zugriff auf “in Zukunft gültige” Objekte benötigt werden
newObjekt
- Objekt, das in die Datenstruktur aufgenommen werden sollvoid removeNewObject(ConfigurationObjectInfo newObject)
Diese Methode entfernt ein Objekt, das in zukünftigen Versionen gültig werden soll aus allen Datenstrukturen (auch dem ConfigFileManager), die den schnellen Zugriff auf diese Art von Objekten ermöglichen.
newObject
- Objekt, das aus allen Datenstrukturen entfernt werden soll.void deleteDynamicObject(DynamicObjectInformation dynamicObjectInfo)
Entfernt ein dynamisches Objekt aus alle Datenstrukturen(auch ConfigFileManager). Es wird nicht aus der Datei gelöscht. Dient zum Löschen der dynamischen Objekte beim Beenden einer Simulation und zum permanenten Löschen von nicht mehr benötigten, historischen Objekten.
dynamicObjectInfo
- Objekt, das entfernt werden sollprivate void putActualObject(SystemObjectInformationInterface actualObjekt)
Fügt das Objekt zu allen Datenstrukturen hinzu, die für den schnellen Zugriff(mit Id) auf aktuelle Objekte benötigt werden
actualObjekt
- public SystemObjectInformationInterface getOldObject(long id)
ConfigurationAreaFile
Diese Methode gibt ein Objekt zurück, das als ungültig markiert wurde. Ist in diesem Konfigurationsbereich kein Objekt mit der Id vorhanden, wird null
zurückgegeben.
getOldObject
in interface ConfigurationAreaFile
id
- Id des geforderten Objektsnull
private void putOldObjectTypeId(long typeId, long firstValid, long firstInvalid, boolean configurationObject, ObjectReference objectReference)
Speichert alle benötigten Ladeinforamtionen zu einem Objekt in der Map, die alle alten Objekte verwaltet.
typeId
- TypeId des Objekt, das nicht vollständig geladen wurdefirstValid
- Zeitpunkt oder Version mit der das Objekt gültig wurdefirstInvalid
- Zeitpunkt oder Version mit der das Objekt ungültig wurdeconfigurationObject
- true = Es handelt sich um ein Konfigurationsobjekt (firstValid wird als Version interpretiert); false = Es handelt sich um ein dynamisches Objekt (firstValid wird als Zeitpunkt interpertiert)objectReference
- Objekt zum anfordert des Objekts (Datei oder Speicher)private void putActualObjectTypeId(SystemObjectInformationInterface actualObject)
Speichert ein Objekt in der Map, die alle aktuellen Objekte nach deren TypeId verwaltet
actualObject
- Objekt, das in die Map aufgenommen werden sollpublic java.util.List<SystemObjectInformationInterface> getObjects(java.lang.String pid, long startTime, long endTime, ConfigurationAreaTime kindOfTime, short simulationVariant)
ConfigurationAreaFile
Diese Methode gibt Objekte zurück, die in dem angegebenen Zeibereich gültig waren.
getObjects
in interface ConfigurationAreaFile
pid
- Pid, über die die Objekte identifiziert werdenstartTime
- Zeitpunkt, ab dem ein Objekt mit der angegebenen Pid gültig gewesen sein muss um zurückgegeben zu werden. War das Objekt vor dem angegebenen Zeitraum bereits gültig, so wird es ebenfalls zurückgegeben.endTime
- Zeitpunkt, bis zu dem ein Objekt mit der angegebenen Pid gültig gewesen sein muss um zurückgegeben zu werden. Ist das Objekt über diesen Zeitraum hinweg gültig, so wird es ebenfalls zurückgegeben. Der Zeitpunkt darf nicht in der Zukunft liegen, der größt mögliche Zeitpunkt ist die aktuelle Zeit.kindOfTime
- Legt fest, welcher Zeitpunkt bei einer aktivierten Version benutzt wird. Der Zeitpunkt der lokalen Aktivierung einer Version oder aber der Zeitpunkt der Aktivierung durch den Konfigurationsverantwortlichen.simulationVariant
- Zusätzlich zu berücksichtigende Simulationsvariante (außer 0). Es wird nicht nach dieser Simulationsvariante gefilert, d. h. wenn der Aufrufer nur Objekte benötigt, die innerhalb einer speziellen Simulation gültig sind, dann muss er selbst die zurückgegebenen Objekte noch einmal selbst filtern und dabei auch die in der Simulationsstrecke definierten Typen beachten.boolean objectValid(java.lang.Object objectInfo, long queryIntervalStart, long queryIntervalEnd, ConfigurationAreaTime kindOfTime, TimeSpecificationType timeSpecificationType)
Diese Methode prüft, ob ein Objekte im angegebenen Zeitraum gültig war/ist.
objectInfo
- Objekt, das geprüft werden sollqueryIntervalStart
- Startzeitpunkt ab dem ein Objekte gültig sein mussqueryIntervalEnd
- Endzeitpunkt, bis zu dem ein Objekt gültig geworden sein musskindOfTime
- Zeit des Konfigurationsverantwortlichen oder die lokale Zeit zu der eine Version gültig geworden isttimeSpecificationType
- Gibt an, ab wann ein Objekt als “gültig” deklariert werden darf. Es gibt 2 Fälle: Fall 1) Das Objekt muss im angegebnen Bereich irgendwann gültig gewesen sein (Darf aber auch in dem Bereich ungültig geworden sein). Fall 2) Das Objekt muss im gesamten Zeitbereich gültig gewesen sein, die entspricht TimeSpecificationType.VALID_DURING_PERIODpublic int getSerializerVersion()
ConfigurationAreaFile
Alle Daten, die als Byte-Array gespeichert werden müssen, werden mit einem Serializer Serializer
erstellt. Die benutzte Version ist in der gesamten Datei identisch. Ein Versionswechsel innerhalb der Datei ohne die Konvertierung aller Daten auf die neue Version ist nicht gestattet.
getSerializerVersion
in interface ConfigurationAreaFile
SystemObjectInformation loadObjectFromFile(FilePointer filePosition) throws java.io.IOException, NoSuchVersionException
Lädt ein Objekt aus einer Datei
filePosition
- Position in der Datei, an der das Objekt beginntjava.io.IOException
NoSuchVersionException
@Deprecated private SystemObjectInformation loadObjectFromFile(FilePointer filePosition, ConfigAreaFile.FileIterator fileIterator) throws java.io.IOException, NoSuchVersionException
BufferedRandomAccessFile
. Auf Performancegründen sollte für das Laden von mehreren Objekten immer dasselbe BufferedFile-Objekt verwendet werden. Einzige benutzung ist aktuell der ConfigAreaFile.FileIterator
, der ebenfalls nicht mehr benutzt wird und deprecated ist.Lädt ein Objekt aus einer Datei und setzt im Objekt fileIterator die Position, an der das nächste Objekt gefunden werden kann (relative Position bezogen auf den Header).
filePosition
- Position in der Datei, an der das Objekt beginntfileIterator
- Objekt, an dem die Position des nächsten zu ladenden Objekts gespeichert wird. Wird null
übergeben, so wird die Psoition des nächsten Objekts nicht gesetzt. Wird eine -1 gesetzt,so gibt es kein nächstes Objekt mehrjava.io.IOException
NoSuchVersionException
@Deprecated private SystemObjectInformation loadObjectFromFile(BufferedRandomAccessFile file, FilePointer filePosition, ConfigAreaFile.FileIterator fileIterator) throws java.io.IOException, NoSuchVersionException
java.io.IOException
NoSuchVersionException
private SystemObjectInformation readObjectFromFile(long filePosition, int objectsize, long id, long typeId, long firstInvalid, long firstValid, byte objecttype, BufferedRandomAccessFile file) throws java.io.IOException, NoSuchVersionException
Lädt ein dynamischen Objekt oder ein Konfigurationsobjekt aus der Datei des Konfigurationsbereichs. Die Datei, die übergeben wird, steht mit ihrem fileDescriptor entweder auf der Simulationsvariante (bei dynamischen Objekten) oder auf den gepackten Daten (bei Konfigurationsobjekten).
filePosition
- Position in der Datei, an der das Objekt gespeichert istobjectsize
- Gesamtegröße des Objekts (einschließlich der schon geladenen Daten)id
- Id des ObjektstypeId
- Id des Types des ObjektsfirstInvalid
- Version oder Zeitpunkt, an dem das Objekt ungültig wurde/wirdfirstValid
- Version oder Zeitpunkt, an dem das Objekt gültig wird/wurdeobjecttype
- 0 = Konfigurationsobjekt, Valid und Invalid sind als Versionen zu interpretieren; 1 = dynamisches Objekt, Valid und Invalid sind als Zeitpunkte zu interpretierenfile
- Datei, aus der das Objekt gelesen werden soll, der fileDescriptor steht bei dynamsichen Objekten auf der Simulationsvariante, bei Konfigurationsobjekten auf den gepackten Datenjava.io.IOException
NoSuchVersionException
private long writeDynamicObjectToFile(DynamicObjectInformation dynamicObject, BufferedRandomAccessFile file, boolean declareGap, boolean setNewFilePosition) throws java.io.IOException, java.lang.IllegalStateException
Speichert ein Objekt ans Ende der übergebenen Datei.
Die Datei wird nach dem Schreibzugriff nicht geschlossen und die neue Dateiposition wird am Objekt vermerkt.
dynamicObject
- Objekt, das gesichert werden sollfile
- Datei, in der das Objekt gespeichert werden soll. Das Objekt wird ans Ende der Datei geschriebendeclareGap
- true = (Normalfall) Das Objekt wird gespeichert, es existiert aber noch eine ältere Version des Objekts in der Datei und diese wird als Lücke deklariert (ID wird auf 0 gesetzt); false = (Anlegen einer neuen Konfigurationsbereichsdatei oder bei Reorganisation) Das Objekt wird in der Datei gespeichert (es wird keine Lücke erzeugt). Dies ist aber die erste Version des Objekts in der Datei und somit gibt es auch keinen Vorgänger der als Lücke deklariert werden sollsetNewFilePosition
- true = (Normalfall) Das Objekt wird in der Datei gespeichert und die neue Position in der Datei wird am Objekt, das sich im Speicher befindet, gespeichert; false = Das Objekt wird in der Datei gespeichert, aber die neue Dateiposition wird nicht am Objekt gespeichert sondern muss nachträglich am Objekt, das sich im Speicher befindet, gesetzt werden. Ein Beispiel wäre die Reorganisation. Das Objekt wird in der neue Datei gespeichert, aber die Dateiposition wird am Objekt im Speicher erst dann gesetzt, wenn die Reorganisation erfolgreich abgeschlossen werden konnte.java.io.IOException
- Fehler beim schreiben in die Datei, Teile des Datensatzes wurden bereits geschriebenjava.lang.IllegalStateException
- Fehler beim sammeln der Daten, die Datei wurde noch nicht verändertprivate long writeConfigurationObjectToFile(ConfigurationObjectInformation configurationObject, BufferedRandomAccessFile file, boolean declareGap, boolean setNewFilePosition) throws java.io.IOException, java.lang.IllegalStateException
Speichert ein Objekt ans Ende der übergebenen Datei. Die Datei wird nach dem Schreibzugriff nicht geschlossen. Die Dateiposition wird am Objekt aktualisiert.
configurationObject
- Objekt, das gespeichert werden sollfile
- Datei, in der das Objekt gespeichert werden soll.declareGap
- true = (Normalfall) Das Objekt wird gespeichert, es existiert aber noch eine ältere Version des Objekts in der Datei und diese wird als Lücke deklariert (ID wird auf 0 gesetzt); false = (Anlegen einer neuen Konfigurationsbereichsdatei oder bei Reorganisation) Das Objekt wird in der Datei gespeichert (es wird keine Lücke erzeugt). Dies ist aber die erste Version des Objekts in der Datei und somit gibt es auch keinen Vorgänger der als Lücke deklariert werden sollsetNewFilePosition
- true = (Normalfall) Das Objekt wird in der Datei gespeichert und die neue Position in der Datei wird am Objekt, das sich im Speicher befindet, gespeichert; false = Das Objekt wird in der Datei gespeichert, aber die neue Dateiposition wird nicht am Objekt gespeichert sondern muss nachträglich am Objekt, das sich im Speicher befindet, gesetzt werden. Ein Beispiel wäre die Reorganisation. Das Objekt wird in der neue Datei gespeichert, aber die Dateiposition wird am Objekt im Speicher erst dann gesetzt, wenn die Reorganisation erfolgreich abgeschlossen werden konnte.java.io.IOException
- Fehler beim schreiben in die Datei, Teile des Datensatzes wurden bereits geschriebenjava.lang.IllegalStateException
- Fehler beim sammeln der Daten, die Datei wurde noch nicht verändertprivate void declareObjectAsAGap(FilePointer filePosition, BufferedRandomAccessFile file) throws java.io.IOException
Setzt die Id eines Objekts auf 0 und erklärt es somit als Lücke. Es gibt keinen unterschied zwischen dynamischen Objekten und Konfigurationsobjekten
filePosition
- Position des Objekts (Länge des Objekts).file
- Dateiobjekt, mit dem auf die Platte zugegriffen werden kannjava.io.IOException
void declareObjectAsAGap(FilePointer filePosition)
static byte[] zip(byte[] data) throws java.io.IOException
Packt ein Byte-Array mit dem Packer “ZIP” und gibt die Daten gepackt zurück
data
- ungepackte Datenjava.io.IOException
static byte[] unzip(byte[] zippedData) throws java.io.IOException
java.io.IOException
private void writeSystemObjectWithoutIdAndTypeId(SystemObjectInformationInterface object, Serializer serializer) throws java.io.IOException
Speichert die Pid, den Namen des SystemObjects und alle konfigurierenden Datensätze .
object
- Objekt, von dem nur gewissen Teile gespeichert werdenserializer
- Byte-Strom, in den die Daten eingefügt werdenjava.io.IOException
short getActiveVersion()
void objectModified(SystemObjectInformationInterface modifiedObject)
Diese Methode wird von einem Objekt aufgerufen, wenn Informationen des Objekts geändert wurden. Das gesamte Objekt wird persistent gespeichert, sobald die Methode ConfigurationFileManager.saveConfigurationAreaFiles()
aufgerufen wird. Die Methode kann mehrfach vom selben Objekt aufgerufen werden, es wird nur einmal gespeichert.
Es muss außerdem geprüft werden, ob das Objekt Auswirkungen auf die drei Zeitstempel _dynamicObjectChanged,_configurationDataChanged,_configurationObjectChanged hat (siehe TPuK1-51).
modifiedObject
- dynamisches Objekt oder Konfigurationsobjekt, dessen Informationen geändert wurden und das somit persistent in der Datei des Konfigurationsbereichs gespeichert werden mussvoid dontSaveObject(SystemObjectInformationInterface object)
Diese Methode entfernt ein Objekt aus Menge zu speichernden Objekte
object
- Objekt, das nicht gespeichert werden sollvoid setDynamicObjectInvalid(DynamicObjectInformation invalidObject)
Diese Methode wird aufgerufen, wenn ein dynamisches Objekt auf “ungültig” gesetzt wird. Die Methode wird vom Objekt selber aufgerufen und aktualisiert alle Datenstrukturen, die das Objekt als “gültig” führen. Konfigurationsobjekte müssen nicht beachtet werden, da diese erst in der “nächsten” Version ungültig/gültig werden. Dies wird beim einlesen der Datei erkannt und die Datenstrukturen werden sofort richtig angelegt. Die Methode ist blockierend, wenn eine Reorganisation stattfindet.
invalidObject
- Objekt, das “ungültig” geworden istpublic boolean initialVersionRestructure()
Diese Methode wird aufgerufen, wenn der Konfigurationsverantwortliche eine neue Version aktiviert. Der Aufruf bewirkt, dass die Datei falls erforderlich restrukturiert wird. Diese Methode muss druch den Konfigurationsverantwortlichen aufgerufen werden, wenn dieser die aktive Version wechselt.
initialVersionRestructure
in interface ConfigurationAreaFile
restructure(de.bsvrz.puk.config.configFile.fileaccess.ConfigurationAreaFile.RestructureMode)
public long getGreatestId()
ConfigurationAreaFile
Diese Methode gibt die größte vergebene laufende Nummer einer Id des Konfigurationsbereichs zurück. Die laufende Nummer ist in den ersten 40 Bits der Id kodiert.
getGreatestId
in interface ConfigurationAreaFile
public void restructure(ConfigurationAreaFile.RestructureMode mode) throws java.io.IOException
ConfigurationAreaFile
Diese Methode reorganisiert eine Konfigurationsbereichsdatei. Die Mischmenge wird dabei, falls möglich, verkleinert und die als ungültig markierten Objekte werden in die entsprechenden Blöcke kopiert. Kommt es bei der Reorganisation zu einem Fehler, so wird der Zustand vor der Reorganisation wiederhergestellt. Alle Methoden, die einen Dateizugriff benötigen (flush, Objekt auf Invalid setzen, usw.) und während der Reorganisation aufgerufen werden, sind blockierend.
Diese Methode darf nur durch den Konfigrationsverantwortlichen aufgerufen werden.
restructure
in interface ConfigurationAreaFile
mode
- Restrukturierungsart (siehe RestructureMode
java.io.IOException
- Falls ein Fehler bei der Restrukturierung auftrat. In diesem Fall bleibt der vorherige Zustand erhalten.private void restructureMain(ConfigurationAreaFile.RestructureMode mode) throws java.io.IOException, NoSuchVersionException
java.io.IOException
NoSuchVersionException
public void swapFiles(RestructureInfo restructureInfo, java.io.File configAreaNewName) throws java.io.IOException
java.io.IOException
private RestructureInfo createRestructuredCopy(BufferedRandomAccessFile oldConfigAreaFile, BufferedRandomAccessFile newConfigAreaFile, ConfigurationAreaFile.RestructureMode mode) throws java.io.IOException, NoSuchVersionException
Führt eigentliche Restrukturierung aus
oldConfigAreaFile
- newConfigAreaFile
- mode
- java.io.IOException
NoSuchVersionException
private void writeCurrentObjects(BufferedRandomAccessFile newConfigAreaFile, RestructureInfo restructureInfo, java.util.Map<java.lang.Long,SystemObjectInformationInterface> objectMap) throws java.io.IOException
java.io.IOException
private void copyObjectsPreserveGaps(BufferedRandomAccessFile fromFile, BufferedRandomAccessFile toFile, long endPos, java.util.List<ConfigAreaFile.SortObject> newIdIndex, java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, long headerEnd) throws java.io.IOException
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere. Diese Methode kopiert alle Lücken mit und schreibt daher die exakt gleiche Menge an Bytes, die sie auch liest.
fromFile
- von-DateitoFile
- ziel-DateiendPos
- bis zu welcher Position (exklusiv) aus on-datei gelesen werden sollnewIdIndex
- ID-index, der gebildet werden sollnewPidIndex
- PID-Index, der gebildet werden sollabsoluteDynamicAreaOffset
- Absoluter Offset des NgDyn-Bereichs (für Pointer der Indizes)headerEnd
- Absoluter Offset des Headerendes (für Pointer der Indizes)java.io.IOException
private void copyObjectsRemoveGaps(BufferedRandomAccessFile fromFile, BufferedRandomAccessFile toFile, long endPos, java.util.List<ConfigAreaFile.SortObject> newIdIndex, java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, long headerEnd) throws java.io.IOException
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere. Diese Methode ignoriert alle Lücken und sorgt so dafür, dass möglicherweise weniger Bytes geschreiben werden, als gelesen werden.
fromFile
- von-DateitoFile
- ziel-DateiendPos
- bis zu welcher Position (exklusiv) aus on-datei gelesen werden sollnewIdIndex
- ID-index, der gebildet werden sollnewPidIndex
- PID-Index, der gebildet werden sollabsoluteDynamicAreaOffset
- Absoluter Offset des NgDyn-Bereichs (für Pointer der Indizes)headerEnd
- Absoluter Offset des Headerendes (für Pointer der Indizes)java.io.IOException
private void copyObjectsRemoveGapsAndDeleteObjects(BufferedRandomAccessFile fromFile, BufferedRandomAccessFile toFile, long endPos, java.util.List<ConfigAreaFile.SortObject> newIdIndex, java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, long headerEnd) throws java.io.IOException
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere. Diese Methode ignoriert alle Lücken und alle zu löschenden dynamischen Objekte und sorgt so dafür, dass möglicherweise weniger Bytes geschreiben werden, als gelesen werden.
fromFile
- von-DateitoFile
- ziel-DateiendPos
- bis zu welcher Position (exklusiv) aus on-datei gelesen werden sollnewIdIndex
- ID-index, der gebildet werden sollnewPidIndex
- PID-Index, der gebildet werden sollabsoluteDynamicAreaOffset
- Absoluter Offset des NgDyn-Bereichs (für Pointer der Indizes)headerEnd
- Absoluter Offset des Headerendes (für Pointer der Indizes)java.io.IOException
private void addToIndizes(BufferedRandomAccessFile toFile, java.util.List<ConfigAreaFile.SortObject> newIdIndex, java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, BinaryObject binaryObject, long headerEnd)
public static long getRelativeFilePositionForInvalidConfigObject(long headerEnd, long absoluteFilePosition)
public static long getRelativeFilePositionForInvalidDynamicObject(long dynamicAreaOffset, long absoluteFilePosition)
public void addToIndizes(java.util.List<ConfigAreaFile.SortObject> idIndex, java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> pidIndex, BinaryObject objectInformation, long filePosition)
public void addToIndizes(java.util.List<ConfigAreaFile.SortObject> idIndex, java.util.Map<java.lang.Integer,ConfigAreaFile.SortObjectPid> pidIndex, SystemObjectInformationInterface objectInformation, long filePosition)
private java.util.List<SystemObjectInformationInterface> binarySearch(long value, boolean searchId) throws NoSuchVersionException, java.io.IOException
Diese Methode sucht zu einem Value alle Objekte, die als ungültig markiert sind. Der Parameter value wird dabei unterschiedlich interpretiert und zwar in Abhängigkeit vom Parameter searchId. Ist searchId = true, so wird der Parameter value als Id eines Objekts betrachtet. Die Methode sucht dann ein als ungültig markiertes Objekt, dessen Id gleich dem übergebenen Parameter value entspricht. Ist der Parameter searchId = false, so wird der Wert als HashCode einer Pid interpretiert. Da eine Pid nicht bijektiv auf ein Integer abgebildet werden kann, muss die Liste später noch überprüft werden, ob die Objekte auch wirklich mit der Pid übereinstimmen.
value
- Id oder Pid, nach der die Objekte gesucht werden sollensearchId
- true = value wird als Id interpretiert; false = value wird als HashCode einer Pid interpretiert (siehe Methodenbeschreibung!)null
zurückgegeben, falls kein Objekt gefunden werden konntejava.lang.IllegalStateException
- Zu einer Id wurden zwei Elemente gefundenNoSuchVersionException
java.io.IOException
private java.util.List<SystemObjectInformationInterface> binarySearch(BufferedRandomAccessFile file, long value, boolean searchId) throws NoSuchVersionException, java.io.IOException
NoSuchVersionException
java.io.IOException
public java.lang.String getConfigAreaPid()
Gibt die Pid des Konfigurationsbereichs zurück.
public void markObjectsForDeletion(java.util.List<java.lang.Long> objectsToDelete)
ConfigurationAreaFile
Markiert eine Menge von dynamischen Objekten als ausreichend als und nicht mehr Referenziert, sodass diese ggf. beim nächsten Neustart endgültig gelöscht werden können. Jedes dynamische Objekt muss mindestens zweimal durch diese Methode markiert werden (auch über einen Neustart hinweg) bevor es gelöscht wird, da das Objekt mit dem ersten Aufruf zuerst als nicht mehr referenzierbar markiert wird und dann beim zweiten Aufruf sichergestellt ist, dass das Objekt in Zukunft nicht mehr referenziert werden kann.
markObjectsForDeletion
in interface ConfigurationAreaFile
objectsToDelete
- Menge mit zu löschenden dynamischen Objekten dieses Bereichs (Objekt-IDs)public void deleteDynamicObjectsPermanently()
Löscht die für das Löschen vorgemerkten dynamischen Objekte vollständig und permanent. Die übergebenen Objekte sollten bereits einige Zeit gelöscht sein und sich im NgaDyn-Block befinden. Es sollte keine Referenzen auf diese Objekte geben.
Da sich dadurch die Positionen von nicht-Gültigen Objekten in der Datei ändern können, können Objekte im Speicher durch diesen Vorgang unbrauchbar werden. Daher muss nach dem Aufruf dieser Methode das Datenmodell neu initialisiert werden oder alternativ die Methode zu einem Zeitpunkt aufgerufen werden, wenn noch keine alten Objekte im Speicher sind.
public boolean referenceAllowed(SystemObjectInformationInterface systemObjectInfo)
ConfigurationAreaFile
Prüft, ob ein angegebenenes Objekt von anderen Objekten referenzert werden darf
referenceAllowed
in interface ConfigurationAreaFile
systemObjectInfo
- Objekt-Info (Objekt sollte zum aktuellen Bereich gehören)zu Löschen markiert
wurde, sonst falsepublic long getHeaderEnd()
HeaderInfo
Gibt das Headerende zurück ( = Position des Starts der NGA-Blöcke)
getHeaderEnd
in interface HeaderInfo
public long getStartOldDynamicObjects()
HeaderInfo
Gibt den Start des NG-Dyn-Blocks zurück
getStartOldDynamicObjects
in interface HeaderInfo
public long getStartIdIndex()
HeaderInfo
Gibt den Start des ID-Index zurück
getStartIdIndex
in interface HeaderInfo
public long getStartPidHashCodeIndex()
HeaderInfo
Gibt den Start des Pid-Index zurück
getStartPidHashCodeIndex
in interface HeaderInfo
public long getStartMixedSet()
HeaderInfo
Gibt den Start der Mischmenge zurück
getStartMixedSet
in interface HeaderInfo
public void updateHeaderPositions(HeaderInfo headerInfo)
public void writeInvalidTime(DynamicObjectInformation object)
Wird aufgerufen, wenn ein dynamisches Objekt ungültig wird. Falls das Objekt bereits
object
- @Deprecated public boolean restructure()
Führt eine volle Restrukturierugn aus
restructure
in interface ConfigurationAreaFile
private SystemObjectInformationInterface getSystemObjectInfo(ObjectReference ref, BufferedRandomAccessFile file) throws NoSuchVersionException, java.io.IOException
Lädt das Objekt aus der Datei oder holt es aus dem Speicher (transiente Objekte).
file
- BufferedFile, das die Konfigurationsdatei enthält. Falls null wird eine neue Datei geöffnet. (Performanceproblem beim wiederholten Laden von vielen Objekten!)NoSuchVersionException
java.io.IOException