activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andy (JIRA)" <>
Subject [jira] Created: (AMQ-2696) DefaultJDBCAdapter returns incorrect value that prevents ActiveMQ from starting.
Date Wed, 14 Apr 2010 12:30:43 GMT
DefaultJDBCAdapter returns incorrect value that prevents ActiveMQ from starting.

                 Key: AMQ-2696
             Project: ActiveMQ
          Issue Type: Bug
          Components: Message Store
    Affects Versions: 5.3.1
         Environment: Vista 64bit
            Reporter: Andy
            Priority: Critical calls:

The call to doGetLastMessageStoreSequenceId will return the max acks table id if the max msgs
id is less.

The result is used to seed the sequenceGenerator:

long seq =  getAdapter().doGetLastMessageStoreSequenceId(c);

However the next call to set the brokerSeq variable will fail if the seq variable has been
seeded with the max acks id, as 'doGetMessageById' expects a valid msgs id.

long brokerSeq = 0;
            if (seq != 0) {
            	Message last = (Message)wireFormat.unmarshal(new ByteSequence(getAdapter().doGetMessageById(c,
            	brokerSeq = last.getMessageId().getBrokerSequenceId();
            return brokerSeq;

If 'seq' is not a valid msgs id (I presume because the message has expired and/or been removed)
then this causes a NullPointerException in ByteSequence, which is not caught, and this leads
to a complete failure to start ActiveMQ.

The solution is not simple if the tables are in production, and is compounded even further
by durable subscribers that cannot simply be deleted from the acks table.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:


View raw message