docs: @Override
      public void start(int arg0) throws Exception
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "start");
  
          //Venu Liberty change
          //activating the Alarm manager (i.e this triggers Alarm manager's Activate).. 
          // Alaram manager has to be ready for Message Store Expirer
          alarmManagerRef.getService();
  
          //PM44028
          // Reset the health state: we'll assume the database is healthy unless/until some 
          // information suggests otherwise.
          _healthState = JsHealthState.getOK();
  
          synchronized (_startLock)
          {
              if (_state != MessageStoreState.STATE_STOPPED)
              {
                  throw new IllegalStateException(nls.getFormattedMessage("INVALID_MSGSTORE_STATE_SIMS0505", new Object[] { _state }, null));
              }
  
              _state = MessageStoreState.STATE_STARTING;
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "Message store state is : " + _state);
          }
  
          // Defect 465809
          // reset the startup Exception list
          _startupExceptions.clear();
  
          // choose map type and size.
          String mapType = getProperty(PROP_ITEM_MAP_TYPE, PROP_ITEM_MAP_TYPE_DEFAULT);
          String strMapSize = getProperty(PROP_ITEM_MAP_SIZE, PROP_ITEM_MAP_SIZE_DEFAULT);
          int mapSize = -1;
          if (null != strMapSize)
          {
              mapSize = Integer.parseInt(strMapSize);
          }
          if (PROP_ITEM_MAP_TYPE_FASTMAP.equals(mapType))
          {
              String strMapParallelism = getProperty(PROP_ITEM_MAP_PARALLELISM, PROP_ITEM_MAP_PARALLELISM_DEFAULT);
              int mapParallelism = -1;
              if (null != strMapParallelism)
              {
                  mapParallelism = Integer.parseInt(strMapParallelism);
              }
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "using itemLinkMap(" + mapSize + "/" + mapParallelism + ")");
  
              _membershipMap = new ItemLinkMap(mapSize, mapParallelism);
          }
          else
          {
              // default
              if (mapSize > 50 || mapSize < 5)
              {
                  mapSize = 20;
              }
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "using multiMap(" + mapSize + ")");
  
              _membershipMap = new MultiHashMap(mapSize);
          }
  
          // PK57432
          String propValue = getProperty(PROP_JDBC_SPILL_SIZE_MSG_REFS_BY_MSG_SIZE,
                                         PROP_JDBC_SPILL_SIZE_MSG_REFS_BY_MSG_SIZE_DEFAULT);
          _jdbcSpillSizeMsgRefsByMsgSize = "true".equalsIgnoreCase(propValue);
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              SibTr.debug(this, tc, "Using jdbcSpillSizeMsgRefsByMsgSize=" + _jdbcSpillSizeMsgRefsByMsgSize);
          }
  
          try
          {
              _itemStorageManager = new ItemStorageManager();
              _itemStorageManager.initialize(this);
  
              _persistentMessageStore = PersistenceFactory.getPersistentMessageStore(this, _manager, _configuration);
              _persistentMessageStore.start();
  
              // 246935
              try
              {
                  String value = getProperty(PROP_SPILL_UPPER_LIMIT, PROP_SPILL_UPPER_LIMIT_DEFAULT);
                  _spillUpperLimit = Integer.parseInt(value);
                  value = getProperty(PROP_SPILL_LOWER_LIMIT, PROP_SPILL_LOWER_LIMIT_DEFAULT);
                  _spillLowerLimit = Integer.parseInt(value);
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Using spillUpperLimit=" + _spillUpperLimit + "; spillLowerLimit=" + _spillLowerLimit);
  
                  // Defect 484799
                  value = getProperty(PROP_SPILL_UPPER_SIZE_LIMIT, PROP_SPILL_UPPER_SIZE_LIMIT_DEFAULT);
                  _spillUpperSizeLimit = Integer.parseInt(value);
                  value = getProperty(PROP_SPILL_LOWER_SIZE_LIMIT, PROP_SPILL_LOWER_SIZE_LIMIT_DEFAULT);
                  _spillLowerSizeLimit = Integer.parseInt(value);
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Using spillUpperSizeLimit=" + _spillUpperSizeLimit + "; spillLowerSizeLimit=" + _spillLowerSizeLimit);
              } catch (NumberFormatException e)
              {
                  // No FFDC code needed
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Exception " + e + " while parsing spill limits");
                  throw e;
              }
  
              //This portion of start up processing is not interruptable
              synchronized (_startLock)
              {
                  if (_state != MessageStoreState.STATE_STARTING)
                  {
                      throw new IllegalStateException(nls.getFormattedMessage("INVALID_MSGSTORE_STATE_SIMS0505", new Object[] { _state }, null));
                  }
  
                  _manager.restart(_persistentMessageStore);
  
                  String xmlOn = getProperty(PROP_DUMP_RAW_XML_ON_STARTUP, null);
                  if (null != xmlOn)
                  {
                      FileWriter fw = new FileWriter(xmlOn);
                      FormattedWriter writer = new FormattedWriter(fw);
                      _xmlWriteRawOn(writer, false);
                      writer.flush();
                      writer.close();
                  }
  
                  // This is the TransactionFactory for this
                  // MessageStore instance. Must call after
                  // restart above to ensure that the PM
                  // will cast as expected.
                  String strMaxTransactionSize =
                                  getProperty(PROP_TRANSACTION_SEND_LIMIT, PROP_TRANSACTION_SEND_LIMIT_DEFAULT);
                  int maxTransactionSize = Integer.parseInt(strMaxTransactionSize);
                  _transactionFactory = new MSTransactionFactory(this, (PersistenceManager) _persistentMessageStore);
                  _transactionFactory.setMaximumTransactionSize(maxTransactionSize);
  
                  //If the root item stream is not found, create one.
                  Persistable persistable = _persistentMessageStore.readRootPersistable();
  
                  if (null == persistable)
                  {
                      throw new MessageStoreRuntimeException("ROOT_PERSISTABLE_EXCEPTION_SIMS0504");
                  }
  
                  _uniqueIdentifierGenerator = _persistentMessageStore.getUniqueKeyGenerator("UniqueIdentifier", 1000000);
                  _uniqueLockIDGenerator = _persistentMessageStore.getUniqueKeyGenerator("UniqueLockValue", 500000);
                  _tickCountGenerator = _persistentMessageStore.getUniqueKeyGenerator("UniqueTickCount", 500000);
  
                  _rootMembership = new RootMembership(this, persistable);
                  _rootMembership.initialize();
  
                  // Start the CacheLoader last
                  _cacheLoader.start(_cacheLoaderInterval, _messagingEngine);
  
                  _state = MessageStoreState.STATE_STARTED;
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Message store state is : " + _state);
              }
  
              // Defect 572575
              // Only read in the value of the flag to allow disabling of the 
              // datastore lock after startup processing has completed. This
              // removes the neccessity to handle it being true during initial
              // lock acquisition.
              String strDatastoreLockCanBeDisabled = getProperty(PROP_DATASTORE_LOCK_CAN_BE_DISABLED,
                                                                 PROP_DATASTORE_LOCK_CAN_BE_DISABLED_DEFAULT);
  
              _datastoreLockCanBeDisabled = Boolean.parseBoolean(strDatastoreLockCanBeDisabled);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "_datastoreLockCanBeDisabled=" + _datastoreLockCanBeDisabled);
          } catch (Exception e)
          {
              if (!(e.getCause() instanceof NonExistentLogFileException))
                  com.ibm.ws.ffdc.FFDCFilter.processException(e, "com.ibm.ws.sib.msgstore.impl.MessageStoreImpl.start", "755", this);
  
              SibTr.error(tc, "STARTUP_EXCEPTION_SIMS0002", new Object[] { e });
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
                  SibTr.event(this, tc, "Exception: ", e);
  
              // Defect 326323
              // Save our startup exception.
              // Defect 465809
              // Add our startup exception to the saved list
              setStartupException(e);
  
              // close everything we have opened
              stop(0); // 247659
              //Report that we have failed to start cleanly.
              reportLocalError();
              throw new Exception(e);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "start");
      }