@Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof SessionSubscribeEvent) { SessionSubscribeEvent connect = (SessionSubscribeEvent) event; StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(connect.getMessage()); HistoryService service = new HistoryService(); String dest = headerAccessor.getDestination(); Long diagramId; try { diagramId = Long.parseLong(dest.substring(dest.lastIndexOf('/') + 1)); HistorySession session = service.insertSession( connect.getUser().getName(), diagramId, headerAccessor.getSubscriptionId()); HistoryModel model = new HistoryModel( connect.getUser().getName(), session.getDiagram().getName(), session.getTimeStart(), session.getTimeFinish()); template.convertAndSend("/topic/diagram/" + diagramId + "/history", model); } catch (NumberFormatException ex) { return; } } else if (event instanceof SessionUnsubscribeEvent) { SessionUnsubscribeEvent connect = (SessionUnsubscribeEvent) event; StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(connect.getMessage()); HistoryService service = new HistoryService(); List<HistorySession> sessions = service.updateSession(connect.getUser().getName(), headerAccessor.getSubscriptionId()); for (HistorySession session : sessions) { HistoryModel model = new HistoryModel( connect.getUser().getName(), session.getDiagram().getName(), session.getTimeStart(), session.getTimeFinish()); template.convertAndSend( "/topic/diagram/" + session.getDiagram().getDiagramId() + "/history", model); } } }