/** Get a list of all VitroBackgroundThreads that have not died. */ public static List<VitroBackgroundThread> getLivingThreads() { List<VitroBackgroundThread> list = new ArrayList<VitroBackgroundThread>(); for (VitroBackgroundThread t : getThreads()) { if (t.isAlive()) { list.add(t); } } return list; }
protected ResponseValues processRequest(VitroRequest vreq) { Map<String, Object> body = new HashMap<String, Object>(); String messageStr = ""; try { Object sr = getServletContext().getAttribute(SimpleReasoner.class.getName()); if (!(sr instanceof SimpleReasoner)) { messageStr = "No SimpleReasoner has been set up."; } else { SimpleReasoner simpleReasoner = (SimpleReasoner) sr; if (simpleReasoner.isABoxReasoningAsynchronous()) { messageStr = "Reasoning is currently in asynchronous mode so a recompute cannot be started. Please try again later."; } else if (simpleReasoner.isRecomputing()) { messageStr = "The system is currently in the process of " + "recomputing inferences."; } else { String submit = (String) vreq.getParameter("submit"); if (submit != null) { VitroBackgroundThread thread = new VitroBackgroundThread( new Recomputer((simpleReasoner)), "SimpleReasonerRecomputController.Recomputer"); thread.setWorkLevel(WORKING); thread.start(); messageStr = "Recompute of inferences started. See log for further details."; } else { body.put("formAction", UrlBuilder.getUrl("/RecomputeInferences")); } } } } catch (Exception e) { log.error("Error recomputing inferences with SimpleReasoner", e); body.put( "errorMessage", "There was an error while recomputing inferences: " + e.getMessage()); return new ExceptionResponseValues(RECOMPUTE_INFERENCES_FTL, body, e); } body.put("message", messageStr); return new TemplateResponseValues(RECOMPUTE_INFERENCES_FTL, body); }