/** * Assumes that the given manager is no longer available and will clean up * all in-memory sessions. */ public int closeSessionsForManager(final String managerUuid) { // Implementation of the following SQL query in memory: // // update session set closed = now() // where closed is null and node in // (select id from Node where uuid = ?) final Node node = currentNodes.get(managerUuid); int modificationCount = 0; if (node != null) { Iterator<Session> i = node.iterateSessions(); while (i.hasNext()) { Session session = i.next(); if (session.getClosed() == null) { session.setClosed( new Timestamp(System.currentTimeMillis())); modificationCount++; } } } return modificationCount; }
@Transactional(readOnly = true) public Object doWork(Session session, ServiceFactory sf) { final Long sessionId = sessionProvider.findSessionIdByUuid(userId, sf); final ome.model.meta.Session s = sessionId == null ? null : sessionProvider.findSessionById(sessionId, sf); IQuery q = sf.getQueryService(); Experimenter e = null; if (s != null) { e = s.getOwner(); if (!e.isLoaded()) { e = q.get(Experimenter.class, e.getId()); } data.add(String.format("user=%s", e.getOmeName())); } else { e = q.findByString(Experimenter.class, "omeName", userId); if (e != null) { data.add(String.format("id=%s", e.getId())); } } if (s != null) { data.add(String.format("created=%s", s.getStarted())); data.add(String.format("closed=%s", s.getClosed())); } return null; } });
return getStarted(); } else if (field.equals(CLOSED)) { return getClosed(); } else if (field.equals(MESSAGE)) { return getMessage();
@Override public Session executeUpdate(ServiceFactory sf, Session session, String uuid, long userId, Long sudoerId) { Node node = nodeProvider.getManagerByUuid(uuid, sf); if (node == null) { node = new Node(0L, false); // Using default node. } if (session.getId() == null) { session.setId(executeNextSessionId()); } session.setNode(node); session.setOwner(new Experimenter(userId, false)); if (sudoerId == null) { session.setSudoer(null); } else { session.setSudoer(new Experimenter(sudoerId, false)); } /* put before remove so that the session is never missing altogether */ if (session.getClosed() == null) { openSessions.put(session.getUuid(), session); closedSessions.remove(session.getUuid()); } else { closedSessions.put(session.getUuid(), session); openSessions.remove(session.getUuid()); } log.debug("Registered Session:{} ({})", session.getId(), session.getUuid()); return session; }
target.setClosed(source.getClosed()); target.setDefaultEventType(source.getDefaultEventType()); target.getDetails().shallowCopy(source.getDetails());