this.properties = properties;
this.bundleContext = bundleContext;
// Transaction timeout
int transactionTimeout = getInt(TRANSACTION_TIMEOUT, DEFAULT_TRANSACTION_TIMEOUT);
if (transactionTimeout <= 0) {
throw new ConfigurationException(TRANSACTION_TIMEOUT, NLS.MESSAGES.getMessage("tx.timeout.greaterthan.zero"));
}
// the max length of the factory should be 64
XidFactory xidFactory = new XidFactoryImpl(pid.substring(0, Math.min(pid.length(), 64)).getBytes());
// Transaction log
if (getBool(RECOVERABLE, DEFAULT_RECOVERABLE)) {
String bufferClassName = getString(HOWL_BUFFER_CLASS_NAME, "org.objectweb.howl.log.BlockLogBuffer");
int bufferSizeKBytes = getInt(HOWL_BUFFER_SIZE, 32);
if (bufferSizeKBytes < 1 || bufferSizeKBytes > 32) {
throw new ConfigurationException(HOWL_BUFFER_SIZE, NLS.MESSAGES.getMessage("buffer.size.between.one.and.thirtytwo"));
}
boolean checksumEnabled = getBool(HOWL_CHECKSUM_ENABLED, true);
boolean adler32Checksum = getBool(HOWL_ADLER32_CHECKSUM, true);
int flushSleepTimeMilliseconds = getInt(HOWL_FLUSH_SLEEP_TIME, 50);
String logFileExt = getString(HOWL_LOG_FILE_EXT, "log");
String logFileName = getString(HOWL_LOG_FILE_NAME, "transaction");
int maxBlocksPerFile = getInt(HOWL_MAX_BLOCKS_PER_FILE, -1);
int maxLogFiles = getInt(HOWL_MAX_LOG_FILES, 2);
int minBuffers = getInt(HOWL_MIN_BUFFERS, 4);
if (minBuffers < 0) {
throw new ConfigurationException(HOWL_MIN_BUFFERS, NLS.MESSAGES.getMessage("min.buffers.greaterthan.zero"));
}
int maxBuffers = getInt(HOWL_MAX_BUFFERS, 0);
if (maxBuffers > 0 && minBuffers < maxBuffers) {
throw new ConfigurationException(HOWL_MAX_BUFFERS, NLS.MESSAGES.getMessage("max.buffers.greaterthan.min.buffers"));
}
int threadsWaitingForceThreshold = getInt(HOWL_THREADS_WAITING_FORCE_THRESHOLD, -1);
String logFileDir = getString(HOWL_LOG_FILE_DIR, null);
if (logFileDir == null || logFileDir.length() == 0 || !new File(logFileDir).isAbsolute()) {
throw new ConfigurationException(HOWL_LOG_FILE_DIR, NLS.MESSAGES.getMessage("log.file.dir"));
}
try {
transactionLog = new HOWLLog(bufferClassName,
bufferSizeKBytes,
checksumEnabled,
adler32Checksum,
flushSleepTimeMilliseconds,
logFileDir,
logFileExt,
logFileName,
maxBlocksPerFile,
maxBuffers,
maxLogFiles,
minBuffers,
threadsWaitingForceThreshold,
xidFactory != null ? xidFactory : new XidFactoryImpl(),
null);
((HOWLLog) transactionLog).doStart();
} catch (Exception e) {
// This should not really happen as we've checked properties earlier
throw new ConfigurationException(null, null, e);
}
} else {
transactionLog = new UnrecoverableLog();
}
// Create transaction manager