docs: public synchronized void open(ObjectManagerState objectManagerState)
                      throws ObjectManagerException
      {
          final String methodName = "open";
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this, cclass,
                          methodName,
                          new Object[] { objectManagerState });
  
          super.open(objectManagerState);
  
          managedObjectsOnDisk = new java.util.HashSet();
          managedObjectsToWrite = new ConcurrentHashMap(concurrency);
          tokensToDelete = new ConcurrentHashMap(concurrency);
  
          storeDirectoryName = (String) objectManagerState.objectStoreLocations.get(storeName);
          if (storeDirectoryName == null)
              storeDirectoryName = storeName;
          if (Tracing.isAnyTracingEnabled() && trace.isDebugEnabled())
              trace.debug(this,
                          cclass,
                          methodName,
                          new Object[] { "storeName:150", storeName, storeDirectoryName });
  
          // During restart the file directory must exist.
          // This test a voids creating unnecessary empty files in the case where the file does not already 
          // exist at a warm start. It is not foolproof though, if the file is deleted by another process
          // between here and the RandomAccesFile constructor we will create a new empty file.    
          if (objectManagerState.getObjectManagerStateState() == ObjectManagerState.stateReplayingLog
              && !(new java.io.File(storeDirectoryName).exists())) {
              if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                  trace.exit(this, cclass, methodName, new Object[] { "File does not exist:159" });
              throw new NonExistentObjectStoreFileException(this,
                                                            storeDirectoryName);
          } // if.
  
          // Make the directory to write the objects to.
          java.io.File storeDirectory = new java.io.File(storeDirectoryName);
          if (!(storeDirectory.isDirectory())) {
              storeDirectory.mkdirs();
          } // if (!(storeDirectory.isDirectory())).
  
          // Now look at the header file and initialise the ObjectStore.
          try {
              String storedHeaderFileName = storeDirectoryName + java.io.File.separator + headerIdentifier;
              java.io.RandomAccessFile headerFile = new java.io.RandomAccessFile(storedHeaderFileName,
                                                                                 "r");
              int versionRead = headerFile.readInt();
              long objectStoreIdentifierRead = headerFile.readLong();
              if (Tracing.isAnyTracingEnabled() && trace.isDebugEnabled())
                  trace.debug(this,
                              cclass,
                              "open",
                              new Object[] { new Integer(versionRead),
                                            new Long(objectStoreIdentifierRead) });
              // Use the saved value if we are a new store.
              if (objectStoreIdentifier == IDENTIFIER_NOT_SET)
                  objectStoreIdentifier = (int) objectStoreIdentifierRead;
  
              sequenceNumber = headerFile.readLong();
              if (Tracing.isAnyTracingEnabled() && trace.isDebugEnabled())
                  trace.debug(this,
                              cclass,
                              "open",
                              new Object[] { new Long(sequenceNumber) });
  
          } catch (java.io.FileNotFoundException exception) {
              // The file does not exist.
              // No FFDC Code Needed, this may be first use of a store.
              if (Tracing.isAnyTracingEnabled() && trace.isEventEnabled())
                  trace.event(this,
                              cclass,
                              "java.io.FileNotFoundException caught opening header",
                              exception);
  
              // Set initial values.      
  
              // Sequence numbers 0-200 are reserved.    
              sequenceNumber = initialSequenceNumber;
  
              writeHeader();
  
          } catch (java.io.IOException exception) {
              // No FFDC Code Needed.
              ObjectManager.ffdc.processException(this, cclass, "open", exception, "1:212:1.17");
  
              if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                  trace.exit(this,
                             cclass,
                             "open");
              throw new PermanentIOException(this,
                                             exception);
          } //  catch (java.io.IOException exception).
  
          // Are we interested in what's already on the disk?
          if (storeStrategy == STRATEGY_KEEP_UNTIL_NEXT_OPEN) {
              clear();
          } // if storeStrategy...
  
          // Find the next store sequence number that we can use.
          // Do this by searching the store.
          String ExistingFiles[]; // Array of existing file names.
          ExistingFiles = storeDirectory.list();
          synchronized (inMemoryTokens) {
              for (int iFile = 0; // Index to existing files.
              iFile < ExistingFiles.length; iFile++) {
                  sequenceNumber = Math.max((new Long(ExistingFiles[iFile])).longValue(),
                                            sequenceNumber);
                  managedObjectsOnDisk.add(new Long(ExistingFiles[iFile]));
              } // for loop over existing Files.
          } // synchronized (inMemoryTokens).
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this, cclass,
                         "open");
      }