FilePersistenceNotSerializableException,
FilePersistenceClassNotFoundException,
FilePersistenceDataCorruptedException, FilePersistenceException,
FilePersistenceTooBigForSerializationException {
this.useCache = useCache;
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
try {
if (dataManager == null) {
builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS);
builder.setMaxBufferSize(512 * 1024);
builder.setMaxNumberOfBuffer(256);
builder.setPathName(pathName);
if (useCache) {
builder.setFileCache(PAGE_SIZE, NUMBER_OF_PAGE);
}
} else {
builder.setDataManager(dataManager);
}
builder.setRemoveFiles(false);
builder.setProxyMode(true);
builder.setCrashSafeMode(CRASH_SAFE_MODE);
builder.setGarbageManagement(GARBAGE);
filePersistence = builder.build();
} catch (final FilePersistenceException exception) {
final EnumFileState fileState = FilePersistence
.fileState(exception);
switch (fileState) {
case STATE_OK:
/* exception is not relative to file state */
throw exception;
case STATE_CORRUPTED:
/* file content corrupted */
throw exception;
case STATE_RESTORED_DATA_LOST:
/* create file persistence using file restored even data lost */
// filePersistence = new FilePersistence(1, null, RUNTIME_DIR,
// /**/false/* do not remove files */,
// /**/PAGE_SIZE, NUMBER_OF_PAGE,
// /**/GARBAGE,
// /**/CRASH_SAFE_MODE);
filePersistence = builder.build();
break;
case STATE_RESTORED_NO_DATA_LOST:
/* create file persistence using file restored */
// filePersistence = new FilePersistence(1, null, RUNTIME_DIR,
// /**/false/* do not remove files */,
// /**/PAGE_SIZE, NUMBER_OF_PAGE,
// /**/GARBAGE,
// /**/CRASH_SAFE_MODE);
filePersistence = builder.build();
break;
case STATE_UNSTABLE:
/* need file maintenance */
throw exception;
default: