Example usage for org.springframework.integration.store MessageGroup size

List of usage examples for org.springframework.integration.store MessageGroup size

Introduction

In this page you can find the example usage for org.springframework.integration.store MessageGroup size.

Prototype

int size();

Source Link

Usage

From source file:org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.java

private void forceComplete(MessageGroup group) {

    Object correlationKey = group.getGroupId();
    // UUIDConverter is no-op if already converted
    Lock lock = this.lockRegistry.obtain(UUIDConverter.getUUID(correlationKey).toString());
    boolean removeGroup = true;
    try {/*from w  w w .j  av  a  2  s.  com*/
        lock.lockInterruptibly();
        try {
            /*
             * Refetch the group because it might have changed while we were waiting on
             * its lock. If the last modified timestamp changed, defer the completion
             * because the selection condition may have changed such that the group
             * would no longer be eligible.
             */
            MessageGroup groupNow = this.messageStore.getMessageGroup(group.getGroupId());
            long lastModifiedNow = groupNow.getLastModified();
            if (group.getLastModified() == lastModifiedNow) {
                if (groupNow.size() > 0) {
                    if (releaseStrategy.canRelease(groupNow)) {
                        this.completeGroup(correlationKey, groupNow);
                    } else {
                        this.expireGroup(correlationKey, groupNow);
                    }
                } else {
                    /*
                     * By default empty groups are removed on the same schedule as non-empty
                     * groups. A longer timeout for empty groups can be enabled by
                     * setting minimumTimeoutForEmptyGroups.
                     */
                    removeGroup = lastModifiedNow <= (System.currentTimeMillis()
                            - this.minimumTimeoutForEmptyGroups);
                    if (removeGroup && logger.isDebugEnabled()) {
                        logger.debug("Removing empty group: " + correlationKey);
                    }
                }
            } else {
                removeGroup = false;
                if (logger.isDebugEnabled()) {
                    logger.debug("Group expiry candidate (" + correlationKey
                            + ") has changed - it may be reconsidered for a future expiration");
                }
            }
        } finally {
            if (removeGroup) {
                this.remove(group);
            }
            lock.unlock();
        }
    } catch (InterruptedException ie) {
        Thread.currentThread().interrupt();
        throw new MessagingException("Thread was interrupted while trying to obtain lock");
    }
}

From source file:org.springframework.integration.aggregator.CorrelatingMessageHandler.java

private final boolean forceComplete(MessageGroup group) {

    Object correlationKey = group.getGroupId();
    Object lock = getLock(correlationKey);
    synchronized (lock) {

        if (group.size() > 0) {
            try {
                if (releaseStrategy.canRelease(group)) {
                    completeGroup(correlationKey, group);
                } else {
                    expireGroup(group, correlationKey);
                }//  w  ww. j av a2 s  . co m
            } finally {
                remove(group);
            }
            return true;
        }
        return false;
    }
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional//from  ww w  . jav  a2 s  .  c  om
public void testAddAndGetMessageGroup() throws Exception {
    String groupId = "X";
    Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId(groupId).build();
    long now = System.currentTimeMillis();
    messageStore.addMessageToGroup(groupId, message);
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertEquals(1, group.size());
    assertTrue("Timestamp too early: " + group.getTimestamp() + "<" + now, group.getTimestamp() >= now);
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/*from w ww  .  ja  va2s  .c  o  m*/
public void testAddAndRemoveMessageFromMessageGroup() throws Exception {
    String groupId = "X";
    Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId(groupId).build();
    messageStore.addMessageToGroup(groupId, message);
    messageStore.removeMessageFromGroup(groupId, message);
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertEquals(0, group.size());
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional//from   w  ww.  j a v  a  2 s.  com
public void testRemoveMessageGroup() throws Exception {
    JdbcTemplate template = new JdbcTemplate(dataSource);
    template.afterPropertiesSet();
    String groupId = "X";

    Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId(groupId).build();
    messageStore.addMessageToGroup(groupId, message);
    messageStore.removeMessageGroup(groupId);
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertEquals(0, group.size());

    String uuidGroupId = UUIDConverter.getUUID(groupId).toString();
    assertTrue(
            template.queryForList("SELECT * from INT_GROUP_TO_MESSAGE where GROUP_KEY = '" + uuidGroupId + "'")
                    .size() == 0);
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/* www . ja  va 2s. c o m*/
public void testCompleteMessageGroup() throws Exception {
    String groupId = "X";
    Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId(groupId).build();
    messageStore.addMessageToGroup(groupId, message);
    messageStore.completeGroup(groupId);
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertTrue(group.isComplete());
    assertEquals(1, group.size());
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/*w  w  w  . j av  a  2 s . c o m*/
public void testOrderInMessageGroup() throws Exception {
    String groupId = "X";

    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("foo").setCorrelationId(groupId).build());
    Thread.sleep(1);
    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("bar").setCorrelationId(groupId).build());
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertEquals(2, group.size());
    assertEquals("foo", messageStore.pollMessageFromGroup(groupId).getPayload());
    assertEquals("bar", messageStore.pollMessageFromGroup(groupId).getPayload());
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional// w  ww.  j  av a2s.  com
public void testExpireMessageGroupOnCreateOnly() throws Exception {
    String groupId = "X";
    Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId(groupId).build();
    messageStore.addMessageToGroup(groupId, message);
    messageStore.registerMessageGroupExpiryCallback(new MessageGroupCallback() {
        @Override
        public void execute(MessageGroupStore messageGroupStore, MessageGroup group) {
            messageGroupStore.removeMessageGroup(group.getGroupId());
        }
    });
    Thread.sleep(1000);
    messageStore.expireMessageGroups(2000);
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertEquals(1, group.size());
    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("bar").setCorrelationId(groupId).build());
    Thread.sleep(2001);
    messageStore.expireMessageGroups(2000);
    group = messageStore.getMessageGroup(groupId);
    assertEquals(0, group.size());
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/*ww w . ja  v  a 2  s . co  m*/
public void testExpireMessageGroupOnIdleOnly() throws Exception {
    String groupId = "X";
    Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId(groupId).build();
    messageStore.setTimeoutOnIdle(true);
    messageStore.addMessageToGroup(groupId, message);
    messageStore.registerMessageGroupExpiryCallback(new MessageGroupCallback() {
        @Override
        public void execute(MessageGroupStore messageGroupStore, MessageGroup group) {
            messageGroupStore.removeMessageGroup(group.getGroupId());
        }
    });
    Thread.sleep(1000);
    messageStore.expireMessageGroups(2000);
    MessageGroup group = messageStore.getMessageGroup(groupId);
    assertEquals(1, group.size());
    Thread.sleep(2000);
    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("bar").setCorrelationId(groupId).build());
    group = messageStore.getMessageGroup(groupId);
    assertEquals(2, group.size());
    Thread.sleep(2000);
    messageStore.expireMessageGroups(2000);
    group = messageStore.getMessageGroup(groupId);
    assertEquals(0, group.size());
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/* w w w .  ja  va2s .  c o  m*/
public void testMessagePollingFromTheGroup() throws Exception {
    String groupId = "X";

    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("foo").setCorrelationId(groupId).build());
    Thread.sleep(1);
    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("bar").setCorrelationId(groupId).build());
    Thread.sleep(1);
    messageStore.addMessageToGroup(groupId,
            MessageBuilder.withPayload("baz").setCorrelationId(groupId).build());

    messageStore.addMessageToGroup("Y", MessageBuilder.withPayload("barA").setCorrelationId(groupId).build());
    Thread.sleep(1);
    messageStore.addMessageToGroup("Y", MessageBuilder.withPayload("bazA").setCorrelationId(groupId).build());

    MessageGroup group = messageStore.getMessageGroup("X");
    assertEquals(3, group.size());

    Message<?> message1 = messageStore.pollMessageFromGroup("X");
    assertNotNull(message1);
    assertEquals("foo", message1.getPayload());

    group = messageStore.getMessageGroup("X");
    assertEquals(2, group.size());

    Message<?> message2 = messageStore.pollMessageFromGroup("X");
    assertNotNull(message2);
    assertEquals("bar", message2.getPayload());

    group = messageStore.getMessageGroup("X");
    assertEquals(1, group.size());
}