docs: public final void alarm(Object obj)
      {
          if (messagingEngine != null) SibTr.push(messagingEngine);
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "alarm");
  
          int indexUsed = 0;
          long streamsLoaded = 0;
          long startTime = 0;
          String str = "";
  
          synchronized (alarmLock)
          {
              try
              {
                  if (enabled)
                  {
                      // Perform a cycle 
                      startTime = timeNow();
                      indexUsed = saveStartTime(startTime);
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "CacheLoader cycle starting");
                      streamsLoaded = 0;
  
                      while (enabled && iter.hasNext() && streamsLoaded < maxStreamsPerCycle)
                      {
                          // Get next ID from result set
                          long key = ((Long) iter.next()).longValue();
  
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Reloading stream ID=" + key);
  
                          // Find the link for this ID
                          AbstractItemLink link = messageStore.getLink(key);
                          // Request the link to reload its items. It will reply true if
                          // it reloads any items and false if it does not.
                          if (link != null)
                          {
                              boolean loaded = ((LinkOwner) link).loadOwnedLinks();
                              if (loaded)
                              {
                                  streamsLoaded++;
                              }
                          }
                          else
                          {
                              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "ID returned from persistence gave null link?");
                          }
                          // No more work is done here, but now that the expired items have
                          // been reloaded into memory, the cache expirer will handle them.
                      }
  
                      // Log diagnostic info for this cycle
                      long duration = timeNow() - startTime;
                      logDuration[indexUsed] = duration;
                      logStreamsLoaded[indexUsed] = streamsLoaded;
  
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "End of CacheLoader cycle. " + streamsLoaded + " stream(s) loaded in " + duration + "ms");
                  }
              } // end try
              catch (Exception e)
              {
                  com.ibm.ws.ffdc.FFDCFilter.processException(e, "com.ibm.ws.sib.msgstore.expiry.CacheLoader.run","301",this);
  
                  lastException = e;
                  lastExceptionTime = timeNow();
                  enabled = false;
                  if (!shutdown || !(e instanceof InterruptedException))
                  {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      {
                          SibTr.debug(this, tc, "run", "CacheLoader stopping - interrupted: " + e);
                      }
                      throw new MessageStoreRuntimeException("CACHE_LOADER_TERMINATED_SIMS2003", new Object[] { e}, e);
                  }
              }
  
              // Decide what to do next, end or continue?
              if (enabled)
              {
                  if (iter.hasNext()) // Setting up for another cycle
                  {
                      loaderAlarm = scheduleAlarm(interval);
                      str = "More";
                  }
                  else // Stopping, no more work to do
                  {
                      loaderAlarm = null;
                      loaderStopTime = timeNow();
                      str = "Finished";
                  }
              }
              else // Stopping on request from caller to stop()
              {
                  loaderAlarm = null;
                  loaderStopTime = timeNow();
                  str = "Ended";
              }
  
          } // end synch
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "alarm", str);
  
          if (messagingEngine != null) SibTr.pop();
      }