/** * Updates or adds an agent to the database. * * @param agent The Agent you wish to modify or add in the database. */ protected void updateAgentInDatabase(AgentImpl agent) { EntityManager em = null; EntityTransaction tx = null; try { em = emf.createEntityManager(); tx = em.getTransaction(); tx.begin(); AgentImpl existing = getAgent(agent.getName(), agent.getOrganization(), em); if (existing == null) { em.persist(agent); } else { existing.setConfiguration(agent.getConfiguration()); existing.setLastHeardFrom(agent.getLastHeardFrom()); existing.setState(agent.getState()); existing.setSchedulerRoles(agent.getSchedulerRoles()); existing.setUrl(agent.getUrl()); em.merge(existing); } tx.commit(); } catch (RollbackException e) { logger.warn("Unable to commit to DB in updateAgent."); throw e; } finally { if (em != null) em.close(); } }
/** * {@inheritDoc} * * @see * org.opencastproject.capture.admin.api.CaptureAgentStateService#setAgentState(java.lang.String, * java.lang.String) */ public int setAgentState(String agentName, String state) { // Checks the state is not null nor empty if (StringUtils.isBlank(state)) { logger.debug("Unable to set agent state, state is blank or null."); return BAD_PARAMETER; } else if (StringUtils.isBlank(agentName)) { logger.debug("Unable to set agent state, agent name is blank or null."); return BAD_PARAMETER; } else if (!KNOWN_STATES.contains(state)) { logger.warn("can not set agent to an invalid state: ", state); return BAD_PARAMETER; } else { logger.debug("Agent '{}' state set to '{}'", agentName, state); } AgentImpl agent = getAgent(agentName); if (agent == null) { // If the agent doesn't exists, but the name is not null nor empty, create a new one. logger.debug("Creating Agent {} with state {}.", agentName, state); Organization org = securityService.getOrganization(); AgentImpl a = new AgentImpl(agentName, org.getId(), state, "", new Properties()); updateAgentInDatabase(a); } else if (!agent.getState().equals(state)) { // the agent is known, so set the state logger.debug("Setting Agent {} to state {}.", agentName, state); agent.setState(state); updateAgentInDatabase(agent); } return OK; }