public MessageGroup getMessageGroup(Object groupId) { String key = getKey(groupId); final AtomicReference<Date> createDate = new AtomicReference<Date>(); final AtomicReference<Date> updateDate = new AtomicReference<Date>(); final AtomicReference<Boolean> completeFlag = new AtomicReference<Boolean>(); final AtomicReference<Integer> lastReleasedSequenceRef = new AtomicReference<Integer>(); List<Message<?>> messages = jdbcTemplate.query( getQuery(Query.LIST_MESSAGES_BY_GROUP_KEY), new Object[] {key, region}, mapper); if (messages.size() == 0) { return new SimpleMessageGroup(groupId); } jdbcTemplate.query( getQuery(Query.GET_GROUP_INFO), new Object[] {key, region}, new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { updateDate.set(rs.getTimestamp("UPDATED_DATE")); createDate.set(rs.getTimestamp("CREATED_DATE")); completeFlag.set(rs.getInt("COMPLETE") > 0); lastReleasedSequenceRef.set(rs.getInt("LAST_RELEASED_SEQUENCE")); } }); if (createDate.get() == null && updateDate.get() == null) { if (logger.isWarnEnabled()) { for (Message<?> message : messages) { logger.warn("Missing group row for message id: " + message.getHeaders().getId()); } } return new SimpleMessageGroup(groupId); } long timestamp = createDate.get().getTime(); boolean complete = completeFlag.get().booleanValue(); SimpleMessageGroup messageGroup = new SimpleMessageGroup(messages, groupId, timestamp, complete); messageGroup.setLastModified(updateDate.get().getTime()); int lastReleasedSequenceNumber = lastReleasedSequenceRef.get(); messageGroup.setLastReleasedMessageSequenceNumber(lastReleasedSequenceNumber); return messageGroup; }