docs: protected void initialise(String logFileName,
                                int logFileType,
                                java.util.Map objectStoreLocations,
                                ObjectManagerEventCallback[] callbacks)
                      throws ObjectManagerException {
          final String methodName = "initialise";
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this,
                          cclass,
                          methodName,
                          new Object[] { logFileName,
                                        new Integer(logFileType),
                                        objectStoreLocations,
                                        callbacks });
  
          if (objectStoreLocations == null)
              objectStoreLocations = new java.util.HashMap();
  
          // Repeat attempts to find or create an ObjectManagerState.
          for (;;) {
              // Look for existing ObjectManagerState.
              synchronized (objectManagerStates) {
                  objectManagerState = (ObjectManagerState) objectManagerStates.get(logFileName);
                  if (objectManagerState == null) { // None known, so make one.
                      objectManagerState = createObjectManagerState(logFileName,
                                                                    logFileType,
                                                                    objectStoreLocations,
                                                                    callbacks);
                      objectManagerStates.put(logFileName, objectManagerState);
                  }
              } // synchronized (objectManagerStates).
  
              synchronized (objectManagerState) {
                  if (objectManagerState.state == ObjectManagerState.stateColdStarted
                      || objectManagerState.state == ObjectManagerState.stateWarmStarted) {
                      // We are ready to go.
                      break;
  
                  } else {
                      // Wait for the ObjectManager state to become usable or terminate. 
                      try {
                          objectManagerState.wait(); // Let some other thread initialise the ObjectManager .  
  
                      } catch (InterruptedException exception) {
                          // No FFDC Code Needed.
                          ObjectManager.ffdc.processException(cclass, methodName, exception, "1:260:1.28");
  
                          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                              trace.exit(this, cclass, methodName, exception);
                          throw new UnexpectedExceptionException(this,
                                                                 exception);
                      } // catch (InterruptedException exception).
                  } // if (objectManagerState.state...
              } // synchronized (objectManagerState)
          } // for (;;).
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this, cclass, methodName);
      }