You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Timothy Bish (JIRA)" <ji...@apache.org> on 2012/07/31 20:14:33 UTC

[jira] [Closed] (AMQ-3396) ActiveMQ fails to restart when there is a zero broker sequence ID

     [ https://issues.apache.org/jira/browse/AMQ-3396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Timothy Bish closed AMQ-3396.
-----------------------------

    Resolution: Incomplete

We need more information to understand how this could happen. 
                
> ActiveMQ fails to restart when there is a zero broker sequence ID
> -----------------------------------------------------------------
>
>                 Key: AMQ-3396
>                 URL: https://issues.apache.org/jira/browse/AMQ-3396
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Message Store
>    Affects Versions: 5.5.0
>         Environment: ActiveMQ v5.5.0 on Sun's JDK 1.6.0_23
> OS: Windows XP 2002 with sp3
> Database:  Oracle10g using JDBC driver ojdbc6_g.jar v11.2.0.2
>            Reporter: Michael Alford
>              Labels: jdbc, oracle
>
> ActiveMQ broker server fails to start as a Windows Service.
> A NullPointerException happens during startup and then ActiveMQ shuts down automatically.
> Only workaround discovered so far is to drop all the database tables before starting up the server.
> {code:title=JDBCPersistenceAdapter.java}
>     public long getLastMessageBrokerSequenceId() throws IOException {
>         TransactionContext c = getTransactionContext();
>         try {
>             long seq =  getAdapter().doGetLastMessageStoreSequenceId(c);
>             sequenceGenerator.setLastSequenceId(seq);
>             long brokerSeq = 0;
>             if (seq != 0) {
>                 byte[] msg = getAdapter().doGetMessageById(c, seq);
>                 if (msg != null) {
>                     Message last = (Message)wireFormat.unmarshal(new ByteSequence(msg));
>                     brokerSeq = last.getMessageId().getBrokerSequenceId();
>                 } else {
>                    LOG.warn("Broker sequence id wasn't recovered properly, possible duplicates!");
>                 }
>             }
>             return brokerSeq;
>         } catch (SQLException e) {
>             JDBCPersistenceAdapter.log("JDBC Failure: ", e);
>             throw IOExceptionSupport.create("Failed to get last broker message id: " + e, e);
>         } finally {
>             c.close();
>         }
>     }
> {code}
> When the byte array "msg" is not null but is populated with zeros, the wireFormat unmarshal call will return null.
> This then causes a NullPointerException on line 237 of JDBCPersiistenceAdapter.
> {noformat}
> 2011-07-07 11:20:02,618 | DEBUG | Locking Query is SELECT * FROM V550_ACTIVEMQ_LOCK FOR UPDATE | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | WrapperSimpleAppMain
> 2011-07-07 11:20:02,649 | INFO  | Becoming the master on dataSource: oracle.jdbc.pool.OracleDataSource@1557ee8 | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | WrapperSimpleAppMain
> 2011-07-07 11:20:02,649 | INFO  | ActiveMQ 5.5.0-fuse-00-27 JMS Message Broker (FuseActiveMQ-Broker-550) is starting | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
> 2011-07-07 11:20:02,649 | INFO  | For help or more information please see: http://activemq.apache.org/ | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
> 2011-07-07 11:20:04,774 | ERROR | Failed to start ActiveMQ JMS Message Broker. Reason: java.lang.NullPointerException | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
> java.lang.NullPointerException
> 	at org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getLastMessageBrokerSequenceId(JDBCPersistenceAdapter.java:237)
> 	at org.apache.activemq.broker.region.DestinationFactoryImpl.getLastMessageBrokerSequenceId(DestinationFactoryImpl.java:145)
> 	at org.apache.activemq.broker.region.RegionBroker.<init>(RegionBroker.java:122)
> 	at org.apache.activemq.broker.jmx.ManagedRegionBroker.<init>(ManagedRegionBroker.java:104)
> 	at org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1838)
> 	at org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1832)
> 	at org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1789)
> 	at org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:763)
> 	at org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.start(JDBCPersistenceAdapter.java:296)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:490)
> 	at org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1536)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
> 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
> 	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
> 	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
> 	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
> 	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
> 	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:574)
> 	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
> 	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
> 	at org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)
> 	at org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)
> 	at org.apache.activemq.xbean.XBeanBrokerFactory$1.<init>(XBeanBrokerFactory.java:106)
> 	at org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:106)
> 	at org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:71)
> 	at org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)
> 	at org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)
> 	at org.apache.activemq.console.command.StartCommand.startBroker(StartCommand.java:115)
> 	at org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:74)
> 	at org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
> 	at org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:143)
> 	at org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
> 	at org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:85)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.apache.activemq.console.Main.runTaskClass(Main.java:251)
> 	at org.apache.activemq.console.Main.main(Main.java:107)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
> 	at java.lang.Thread.run(Thread.java:662)
> 2011-07-07 11:20:04,837 | INFO  | ActiveMQ Message Broker (FuseActiveMQ-Broker-550, null) is shutting down | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain 
> {noformat}
>  

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira