pl.edu.pjwstk.yaod.store.defaultstore.persistentstore
Class PersistentRecordManager
java.lang.Object
|
+--pl.edu.pjwstk.yaod.store.defaultstore.persistentstore.PersistentRecordManager
- public class PersistentRecordManager
- extends java.lang.Object
Klasa zapewnia niskopoziomowa funkcjonalnosc domyslnego skladu trwalych
obiektow. Jej podstawowym zadaniem jest tworzenie rekordow w ramach
blokow danych oraz wczytywanie blokow danych z dysku lub bufora blokow.
Instancja tej klasy jest czescia procesu uslugowego, a jej metody
wywolywane sa przez oslone (wrapper), udostepniajaca uslugi tworzenia atomow
dla menadzera atomow.
- Author:
- M. Lentner, raist@ertel.com.pl
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
PersistentRecordManager
public PersistentRecordManager(PersistentBlockManager bm)
createRecord
public PersistentRecordID createRecord(byte[] data)
throws java.lang.Exception
- Tworzy nowy rekord. Jesli rekord jest zbyt duzy by zmiescic go w jednym
bloku, wowczas dzieli go na fragmenty i zapisuje jako rekord lancuchowany
w formie kilku rekordow prostych. Kazdy rekord lancuchowany posiada
na koncu 8 bajtow wskaznika do nastepnej czesci. Jesli rekord nie jest
lancuchowany (w calosci miesci sie w jednym bloku), wowczas nie posiada
takiego wskaznika. Ostatnia czesc rekordu lancuchowanego rowniez go nie
posiada. Informacja o tym, czy dany rekord prosty ma wiecej fragmentow
zapisywana jest przez podniesienie specjalnej flagi (wiecej o tym
w DataBlock.createRecord()).
- Parameters:
data
- dane do zapisania.- Returns:
- wskaznik do utworzonego rekordu.
- Throws:
NoFreeSpaceException
- nie mozna utworzyc bloku ze wzgledu na
brak wolnego miejsca.
updateRecord
public void updateRecord(PersistentRecordID recordPtr,
byte[] data)
throws NoSuchRecordException
- Aktualizuje rekord o podanym wskazniku, zastepujac go nowymi danymi.
Zastosowano uproszczona wersje aktualizacji: jesli rekord jest
lancuchowany i ma 1..n czesci, wowczas najpierw kasuje czesci 2..n,
nastepnie tworzy nowy rekord, a czesc 1 modyfikuje w taki sposob,
by nie zawierala zadnych danych, oprocz wskaznika na poczatek nowego rekordu.
- Parameters:
recordPtr
- aktualizowany rekord.data
- dane, jakie maja zastapic aktualizowany rekord.- Throws:
NoSuchRecordException
- brak takiego rekordu.
deleteRecord
public void deleteRecord(PersistentRecordID recordPtr)
throws NoSuchRecordException,
java.lang.Exception
- Usuwa rekord identyfikowany przez podany wskaznik rekordu. Jesli rekord
jest lancuchowany, to usuwa wszystkie jego czesci.
- Parameters:
recordPtr
- wskaznik do usuwanego rekordu.- Throws:
NoSuchRecordException
- rekord wskazywany przez recordPtr nie istnieje.
getRecord
public byte[] getRecord(PersistentRecordID recordPtr)
throws NoSuchRecordException
- Zwraca rekord identyfikowany podanym wskaznikiem. Jesli jest to rekord
lancuchowany (zapisany w kilku czesciach umieszczonych w osobnych blokach),
wowczas czesci te skladane sa w jedna calosc.
- Parameters:
recordPtr
- wskaznik do rekordu.- Returns:
- dane rekordu w formie ciagu bajtow.
- Throws:
NoSuchRecordException
- brak takiego rekordu.