Package de.bsvrz.ars.ars.persistence
Class ContainerFileHandle
java.lang.Object
de.bsvrz.ars.ars.persistence.BasicContainerFileHandle
de.bsvrz.ars.ars.persistence.ContainerFileHandle
- All Implemented Interfaces:
ContainerManagementData
,DataSequence
,java.lang.AutoCloseable
public class ContainerFileHandle extends BasicContainerFileHandle
Klasse für den Zugriff auf eine Container-Datei. Diese Klasse implementiert
ContainerManagementData
um die Header-informationen aus der
Container-Datei zu lesen und DataSequence
zum Zugriff auf die Daten.
Außerdem implementiert die Klasse AutoCloseable
um sicherzustellen, dass die Containerdatei zeitnah wieder geschlossen wird.
-
Constructor Summary
Constructors Constructor Description ContainerFileHandle(IdContainerFileDir idContainerFileDir, long containerId, boolean readonly, PersistenceManager persMgr)
Erstellt eine neue Instanz zum Zugriff auf die Containerdatei -
Method Summary
Modifier and Type Method Description void
appendSerializedData(byte[] actualWriteBuf, int totalWriteDataSize)
Haengt den bereits übergebenen und serialisierten Datensatz an die aktuelle Container-Datei an.void
closeContainer(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Schliesst die Container-Datei.void
createContainer(boolean toSave)
Erzeugt eine neue Container-Datei für den mit spezifizierten Container.boolean
existsContainer()
Prüft ob bereits eine Container-Datei existiert.long
getContainerSize()
Ermittelt die Gesamtlänge des mitaccessContainer()
- im Zugriff befindlichen Containers.void
setContainerHeaderParam(KeyValParam param, long val)
Nachdem mitBasicContainerFileHandle.readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines numerischen Parameters im Container-Header geändert werden.void
setContainerHeaderParam(KeyValParam param, java.lang.String val)
Nachdem mitBasicContainerFileHandle.readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Parameters im Container-Header geändert werden.void
writeContainerHeader(SyncKey<IdDataIdentification> indexLock)
Die mitsetContainerHeaderParam(KeyValParam, String)
gesetzten Parameter werden im Container-Header persistiert.void
writeContainerHeaderWithoutUpdatingIndex()
Die mitsetContainerHeaderParam(KeyValParam, String)
gesetzten Parameter werden im Container-Header persistiert.Methods inherited from class de.bsvrz.ars.ars.persistence.BasicContainerFileHandle
assertReadAccess, close, ensureHeaderRead, getContainerFile, getContainerHeaderParamAsArchiveDataKind, getContainerHeaderParamAsBoolean, getContainerHeaderParamAsBoolean, getContainerHeaderParamAsInt, getContainerHeaderParamAsInt, getContainerHeaderParamAsLong, getContainerHeaderParamAsLong, getContainerHeaderParamAsString, getContainerHeaderParamAsString, getContainerId, getFile, getLocation, isClosedInternal, isContainerClosed, iterator, leaveContainer, readContainerHeader, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface de.bsvrz.ars.ars.persistence.iter.DataSequence
iterator
-
Constructor Details
-
ContainerFileHandle
public ContainerFileHandle(IdContainerFileDir idContainerFileDir, long containerId, boolean readonly, PersistenceManager persMgr) throws PersistenceExceptionErstellt eine neue Instanz zum Zugriff auf die Containerdatei- Parameters:
idContainerFileDir
-Datenidentifikations-Knoten
zum synchronisierten Zugriff auf die DateicontainerId
- Container-ID, die geöffnet werden sollreadonly
- Schreibgeschützter Zugriff? (Benötigt weniger Synchronisierung)persMgr
- Persistenzmanager (zur Ermittlung des Wurzelverzeichnisses)- Throws:
PersistenceException
- Fehler beim Zugriff
-
-
Method Details
-
existsContainer
Prüft ob bereits eine Container-Datei existiert.- Returns:
- Kennzeichen
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
createContainer
Erzeugt eine neue Container-Datei für den mit spezifizierten Container. Schreibt den Container-Header und befuellt diesen mit den vorher gesetzten Parametern.- Parameters:
toSave
- Sichern- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
closeContainer
public void closeContainer(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) throws PersistenceException, IndexException, SynchronizationFailedExceptionSchliesst die Container-Datei. Der Container-Header wird entsprechend aktualisiert. Die Min/Max-Werte und die Anzahl der Datensätze werden dem DataIdentNode und dessen Indexen entnommen.- Parameters:
adk
- Datensatzart des aktuellen Containers- Throws:
PersistenceException
- Lesefehler im PersistenzverzeichnisIndexException
- Lesefehler der Indexe (z. B. korrupt)SynchronizationFailedException
-
setContainerHeaderParam
public void setContainerHeaderParam(KeyValParam param, java.lang.String val) throws PersistenceExceptionNachdem mitBasicContainerFileHandle.readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Parameters im Container-Header geändert werden. Wirft einePersistenceException
, wenn die Änderung nicht durchgefuehrt werden kann.- Parameters:
param
- Container-Header-Parameterval
- Wert des Container-Header-Parameters- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
setContainerHeaderParam
Nachdem mitBasicContainerFileHandle.readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines numerischen Parameters im Container-Header geändert werden. Wirft einePersistenceException
, wenn die Änderung nicht durchgefuehrt werden kann.- Parameters:
param
- Container-Header-Parameterval
- Numerischer Wert des Container-Header-Parameters- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
writeContainerHeader
public void writeContainerHeader(SyncKey<IdDataIdentification> indexLock) throws PersistenceException, IndexExceptionDie mitsetContainerHeaderParam(KeyValParam, String)
gesetzten Parameter werden im Container-Header persistiert.- Parameters:
indexLock
-- Throws:
PersistenceException
- Lesefehler im PersistenzverzeichnisIndexException
-
writeContainerHeaderWithoutUpdatingIndex
Die mitsetContainerHeaderParam(KeyValParam, String)
gesetzten Parameter werden im Container-Header persistiert. Diese Methode aktualisiert den Verwaltugnsdatenindex nicht und kann z. B. benutzt werden, währen ein Container repariert wird bevor der Index aufgebaut ist.- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getContainerSize
Ermittelt die Gesamtlänge des mitaccessContainer()
- im Zugriff befindlichen Containers.- Returns:
- Länge der Container-Datei
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
appendSerializedData
public void appendSerializedData(byte[] actualWriteBuf, int totalWriteDataSize) throws PersistenceExceptionHaengt den bereits übergebenen und serialisierten Datensatz an die aktuelle Container-Datei an.- Parameters:
actualWriteBuf
- SchreibpuffertotalWriteDataSize
- Benutzte Länge im Schreibpuffer- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-