使用jdbcPersistenceAdapter重新启动嵌入式activeMQ代理时出现异常

时间:2014-02-13 17:01:49

标签: java spring activemq

使用ActiveMQ 5.9.0,我有以下代理配置:

<amq:broker id="broker" useShutdownHook="false" persistent="true">
    <amq:persistenceAdapter>
        <amq:jdbcPersistenceAdapter dataSource="#dataSource">
        </amq:jdbcPersistenceAdapter>
    </amq:persistenceAdapter>
    <amq:transportConnectors>
        <amq:transportConnector uri="${broker.url}" />
    </amq:transportConnectors>
</amq:broker>

如果启动代理时数据库中已有消息,则会出现异常:

  

java.lang.ClassCastException:   org.apache.activemq.command.WireFormatInfo无法强制转换为   org.apache.activemq.command.Message at   org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getLastMessageBrokerSequenceId(JDBCPersistenceAdapter.java:265)     在   org.apache.activemq.broker.region.DestinationFactoryImpl.getLastMessageBrokerSequenceId(DestinationFactoryImpl.java:147)     在   org.apache.activemq.broker.region.RegionBroker。(RegionBroker.java:128)     在   org.apache.activemq.broker.jmx.ManagedRegionBroker。(ManagedRegionBroker.java:111)     在   org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:2172)     在   org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:2165)     在   org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:2122)     在   org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:906)     在   org.apache.activemq.broker.BrokerService.getAdminConnectionContext(BrokerService.java:2393)     在   org.apache.activemq.broker.BrokerService.startVirtualConsumerDestinations(BrokerService.java:2533)     在   org.apache.activemq.broker.BrokerService.startDestinations(BrokerService.java:2384)     在   org.apache.activemq.broker.BrokerService.doStartBroker(BrokerService.java:640)     在   org.apache.activemq.broker.BrokerService.startBroker(BrokerService.java:632)     在   org.apache.activemq.broker.BrokerService.start(BrokerService.java:568)     在   org.apache.activemq.broker.BrokerService.autoStart(BrokerService.java:524)     在   org.apache.activemq.broker.BrokerService.postConstruct(BrokerService.java:511)

在我看来,用于编组邮件的格式可能与解组时使用的格式不同。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

问题是oracle驱动程序版本。从数据库中读取blob列时,数据已损坏。 问题很难重现(在收到消息时停止应用程序),因此切换到amq 5.5.0是误报。我使用ojdbc 10.1.0.2.0并切换到ojdbc6 11.2.0.3解决了这个问题。