public void run() {
   LiveQueueItem currentPage = new LiveQueueItem(0, "");
   LiveQueueItem lastPage = null;
   while (keepRunning) {
     try {
       LiveQueueItem page = LiveQueue.take();
       if (page.equals(lastPage)) {
         logger.info(
             "Ignoring duplicatre page {} ({}) with priority {}",
             page.getItemName(),
             page.getItemID(),
             page.getPriority());
         continue;
       }
       lastPage = page;
       currentPage = page;
       // If a mapping page set extractor to reload mappings and ontology
       if (page.getPriority() == LiveQueuePriority.MappingPriority) {
         LiveExtractionConfigLoader.reload(page.getStatQueueAdd());
       }
       if (page.isDeleted() == true) {
         JSONCache.deleteCacheItem(page.getItemID(), LiveExtractionConfigLoader.policies());
         logger.info(
             "Deleted page with ID: " + page.getItemID() + " (" + page.getItemName() + ")");
       } else processPage(page);
     } catch (Exception exp) {
       logger.error(
           "Failed to process page " + currentPage.getItemID() + " reason: " + exp.getMessage(),
           exp);
     }
   }
 }
  private void processPage(LiveQueueItem item) {
    try {
      Boolean extracted =
          LiveExtractionConfigLoader.extractPage(
              item, LiveOptions.options.get("localApiURL"), LiveOptions.language);

      if (!extracted) JSONCache.setErrorOnCache(item.getItemID(), -1);
    } catch (Exception exp) {
      logger.error(
          "Error in processing page number "
              + item.getItemID()
              + ", and the reason is "
              + exp.getMessage(),
          exp);
      JSONCache.setErrorOnCache(item.getItemID(), -2);
    }
  }