fedora.server.journal.readerwriter.multifile
Class LockingFollowingJournalReader

java.lang.Object
  extended by fedora.server.journal.xmlhelpers.AbstractXmlReader
      extended by fedora.server.journal.JournalReader
          extended by fedora.server.journal.readerwriter.multifile.MultiFileJournalReader
              extended by fedora.server.journal.readerwriter.multifile.LockingFollowingJournalReader
All Implemented Interfaces:
JournalConstants, MultiFileJournalConstants

public class LockingFollowingJournalReader
extends MultiFileJournalReader

Title: LockingFollowingJournalReader.java

Description: A Following Journal Reader that can be made quiescent by the presense of a lock file. This works like the MultiFileFollowingJournalReader, except that when looking for the next Journal file to be processed, it will take a moment to check the locking protocol. If a lock has been requested, it will accept the lock, and ignore any additional Journal files if present.

Polling continues, however. At each polling interval, the reader will check for the lock request. If the request has been removed, the lock acceptance will be removed also, and the reader will process the next Journal file, if one is found.

Version:
$Id: LockingFollowingJournalReader.java 5025 2006-09-01 22:08:17 +0000 (Fri, 01 Sep 2006) cwilper $
Author:
jblake@cs.cornell.edu

Field Summary
 
Fields inherited from class fedora.server.journal.readerwriter.multifile.MultiFileJournalReader
currentFile, open
 
Fields inherited from class fedora.server.journal.JournalReader
parameters, recoveryLog, role, server
 
Fields inherited from interface fedora.server.journal.readerwriter.multifile.MultiFileJournalConstants
DEFAULT_FOLLOW_POLLING_INTERVAL, PARAMETER_ARCHIVE_DIRECTORY, PARAMETER_FOLLOW_POLLING_INTERVAL, PARAMETER_JOURNAL_DIRECTORY, PARAMETER_LOCK_ACCEPTED_FILENAME, PARAMETER_LOCK_REQUESTED_FILENAME, PARAMETER_PAUSE_BEFORE_POLLING
 
Fields inherited from interface fedora.server.journal.JournalConstants
ARGUMENT_NAME_ALT_IDS, ARGUMENT_NAME_BDEF_PID, ARGUMENT_NAME_BINDING_MAP, ARGUMENT_NAME_BMECH_PID, ARGUMENT_NAME_CHECKSUM, ARGUMENT_NAME_CHECKSUM_TYPE, ARGUMENT_NAME_CONTEXT, ARGUMENT_NAME_CONTROL_GROUP, ARGUMENT_NAME_DISSEMINATOR_ID, ARGUMENT_NAME_DISSEMINATOR_LABEL, ARGUMENT_NAME_DISSEMINATOR_STATE, ARGUMENT_NAME_DS_CONTENT, ARGUMENT_NAME_DS_ID, ARGUMENT_NAME_DS_LABEL, ARGUMENT_NAME_DS_LOCATION, ARGUMENT_NAME_DS_STATE, ARGUMENT_NAME_ENCODING, ARGUMENT_NAME_END_DATE, ARGUMENT_NAME_FORCE, ARGUMENT_NAME_FORMAT, ARGUMENT_NAME_FORMAT_URI, ARGUMENT_NAME_IN, ARGUMENT_NAME_LABEL, ARGUMENT_NAME_LOCATION, ARGUMENT_NAME_LOG_MESSAGE, ARGUMENT_NAME_MIME_TYPE, ARGUMENT_NAME_NAMESPACE, ARGUMENT_NAME_NEW_PID, ARGUMENT_NAME_NUM_PIDS, ARGUMENT_NAME_OWNERID, ARGUMENT_NAME_PID, ARGUMENT_NAME_SERIALIZATION, ARGUMENT_NAME_START_DATE, ARGUMENT_NAME_STATE, ARGUMENT_NAME_VERSION_DATE, ARGUMENT_NAME_VERSIONABLE, ARGUMENT_TYPE_BINDING_MAP, ARGUMENT_TYPE_BOOLEAN, ARGUMENT_TYPE_DATE, ARGUMENT_TYPE_INTEGER, ARGUMENT_TYPE_NULL, ARGUMENT_TYPE_STREAM, ARGUMENT_TYPE_STRING, ARGUMENT_TYPE_STRINGARRAY, CONTEXT_MAPNAME_ACTION, CONTEXT_MAPNAME_ENVIRONMENT, CONTEXT_MAPNAME_RECOVERY, CONTEXT_MAPNAME_RESOURCE, CONTEXT_MAPNAME_SUBJECT, DEFAULT_AGE_LIMIT, DEFAULT_FILENAME_PREFIX, DEFAULT_SIZE_LIMIT, DOCUMENT_ENCODING, DOCUMENT_VERSION, FORMAT_JOURNAL_FILENAME_TIMESTAMP, METHOD_ADD_DATASTREAM, METHOD_ADD_DISSEMINATOR, METHOD_GET_NEXT_PID, METHOD_INGEST_OBJECT, METHOD_MODIFY_DATASTREAM_BY_REFERENCE, METHOD_MODIFY_DATASTREAM_BY_VALUE, METHOD_MODIFY_DISSEMINATOR, METHOD_MODIFY_OBJECT, METHOD_PURGE_DATASTREAM, METHOD_PURGE_DISSEMINATOR, METHOD_PURGE_OBJECT, METHOD_PUT_TEMP_STREAM, METHOD_SET_DATASTREAM_STATE, METHOD_SET_DATASTREAM_VERSIONABLE, METHOD_SET_DISSEMINATOR_STATE, PARAMETER_IGNORE_HASH, PARAMETER_JOURNAL_FILE_AGE_LIMIT, PARAMETER_JOURNAL_FILE_SIZE_LIMIT, PARAMETER_JOURNAL_FILENAME_PREFIX, PARAMETER_JOURNAL_MODE, PARAMETER_JOURNAL_READER_CLASSNAME, PARAMETER_JOURNAL_RECOVERY_LOG_CLASSNAME, PARAMETER_JOURNAL_WRITER_CLASSNAME, PARAMETER_RECOVERY_LOG_FILENAME, PARAMETER_RECOVERY_LOG_LEVEL, PASSWORD_CIPHER_TYPE, QNAME_ATTR_BIND_KEY_NAME, QNAME_ATTR_BIND_LABEL, QNAME_ATTR_CLIENT_IP, QNAME_ATTR_DATASTREAM_ID, QNAME_ATTR_DS_BIND_MAP_ID, QNAME_ATTR_DS_BIND_MAP_LABEL, QNAME_ATTR_DS_BIND_MECHANISM_PID, QNAME_ATTR_LOGIN_ID, QNAME_ATTR_METHOD, QNAME_ATTR_NAME, QNAME_ATTR_PASSWORD_TYPE, QNAME_ATTR_REPOSITORY_HASH, QNAME_ATTR_SEQ_NO, QNAME_ATTR_STATE, QNAME_ATTR_TIMESTAMP, QNAME_ATTR_TYPE, QNAME_ATTR_USERID, QNAME_TAG_ARGUMENT, QNAME_TAG_ARRAYELEMENT, QNAME_TAG_CONTEXT, QNAME_TAG_DS_BINDING, QNAME_TAG_DS_BINDING_MAP, QNAME_TAG_JOURNAL, QNAME_TAG_JOURNAL_ENTRY, QNAME_TAG_MULTI_VALUE_MAP, QNAME_TAG_MULTI_VALUE_MAP_KEY, QNAME_TAG_MULTI_VALUE_MAP_VALUE, QNAME_TAG_NOOP, QNAME_TAG_NOW, QNAME_TAG_PASSWORD, SYSTEM_PROPERTY_PREFIX, TIMESTAMP_FORMAT, VALUE_FALSE, VALUE_JOURNAL_MODE_NORMAL, VALUE_JOURNAL_MODE_RECOVER, VALUE_RECOVERY_LOG_LEVEL_HIGH, VALUE_RECOVERY_LOG_LEVEL_LOW, VALUE_RECOVERY_LOG_LEVEL_MEDIUM, VALUE_TRUE
 
Constructor Summary
LockingFollowingJournalReader(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String role, JournalRecoveryLog recoveryLog, ServerInterface server)
          Require parameters for polling interval, lock request filename and lock acceptance filename.
 
Method Summary
protected  fedora.server.journal.readerwriter.multifile.JournalInputFile openNextFile()
          Process the locking mechanism.
 void shutdown()
          If the server requests a shutdown, stop waiting the next file to come in.
 
Methods inherited from class fedora.server.journal.readerwriter.multifile.MultiFileJournalReader
readJournalEntry, toString
 
Methods inherited from class fedora.server.journal.JournalReader
checkRepositoryHash, getInstance, readJournalEntry
 
Methods inherited from class fedora.server.journal.xmlhelpers.AbstractXmlReader
advancePastWhitespace, getNotCharactersException, getNotEndTagException, getNotNextMemberOrEndOfGroupException, getNotStartTagException, getOptionalAttributeValue, getRequiredAttributeValue, isEndTagEvent, isStartTagEvent, readCharactersUntilEndTag, readStartTag
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

LockingFollowingJournalReader

public LockingFollowingJournalReader(java.util.Map<java.lang.String,java.lang.String> parameters,
                                     java.lang.String role,
                                     JournalRecoveryLog recoveryLog,
                                     ServerInterface server)
                              throws JournalException
Require parameters for polling interval, lock request filename and lock acceptance filename.

Throws:
JournalException
Method Detail

openNextFile

protected fedora.server.journal.readerwriter.multifile.JournalInputFile openNextFile()
                                                                              throws JournalException
Process the locking mechanism. If we are not locked, we should look for another journal file to process. Ask for a new file, using the superclass method, but if none is found, wait for a while and repeat. This will continue until we get a server shutdown signal.

Overrides:
openNextFile in class MultiFileJournalReader
Throws:
JournalException

shutdown

public void shutdown()
              throws JournalException
If the server requests a shutdown, stop waiting the next file to come in.

Overrides:
shutdown in class MultiFileJournalReader
Throws:
JournalException