【问题标题】:Upgrading ActiveMQ from 5.7 to 5.14.5 is not working correctly将 ActiveMQ 从 5.7 升级到 5.14.5 无法正常工作
【发布时间】:2018-08-20 19:30:31
【问题描述】:

我正在尝试将 activemq 的版本从 5.7 升级到 5.14.5。 我遵循的步骤如下:

  1. 为 5.14.5 下载了新文件

  2. 替换为现有的 5.7 文件。

  3. 为自定义配置修改了 Activemq.xml,并将 ojdbc14.jar 添加到 lib 文件夹。修改了 conf 文件夹中的一些自定义文件。

  4. 在日志中我收到以下错误:

2018-03-12 09:26:34,077 |信息 |使用持久性适配器:JDBCPersistenceAdapter(org.apache.commons.dbcp2.BasicDataSource@66998e4b) | org.apache.activemq.broker.BrokerService |主要的 2018-03-12 09:26:34,168 |信息 | JMX 控制台可以连接到服务:jmx:rmi:///jndi/rmi://localhost:2017/jmxrmi | org.apache.activemq.broker.jmx.ManagementContext | JMX 连接器 2018-03-12 09:26:34,565 |警告 |上下文初始化期间遇到异常 - **取消刷新尝试:org.springframework.beans.factory.BeanCreationException:在类路径资源 [activemq.xml] 中定义名称为 'org.apache.activemq.xbean.XBeanBrokerService#0' 创建 bean 时出错: init 方法调用失败;嵌套异常是 java.lang.AbstractMethodError | org.apache.activemq.xbean.XBeanBrokerFactory$1 |主要的 2018-03-12 09:26:34,579 |错误 |加载失败:类路径资源** [activemq.xml],原因:在类路径资源 [activemq.xml] 中定义名称为“org.apache.activemq.xbean.XBeanBrokerService#0”的 bean 创建错误:调用 init 方法失败的;嵌套异常是 java.lang.AbstractMethodError | org.apache.activemq.xbean.XBeanBrokerFactory |主要的 org.springframework.beans.factory.BeanCreationException:在类路径资源[activemq.xml]中定义名称为“org.apache.activemq.xbean.XBeanBrokerService#0”的bean创建错误:调用init方法失败;嵌套异常是 java.lang.AbstractMethodError 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 在 org.apache.xbean.spring.context.ResourceXmlApplicationContext.(ResourceXmlApplicationContext.java:64) 在 org.apache.xbean.spring.context.ResourceXmlApplicationContext.(ResourceXmlApplicationContext.java:52) 在 org.apache.activemq.xbean.XBeanBrokerFactory$1.(XBeanBrokerFactory.java:104) 在 org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:104) 在 org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:67) 在 org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71) 在 org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54) 在 org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:87) 在 org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:63) 在 org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:154) 在 org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:63) 在 org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:104) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.activemq.console.Main.runTaskClass(Main.java:262) 在 org.apache.activemq.console.Main.main(Main.java:115) 引起:java.lang.AbstractMethodError 在 org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:918) 在 org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:918) 在 org.apache.commons.dbcp2.PoolableConnection.validate(PoolableConnection.java:283) 在 org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:357) 在 org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2307) 在 org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2290) 在 org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2039) 在 org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533) 在 org.apache.activemq.store.jdbc.TransactionContext.lockAndWrapped(TransactionContext.java:70) 在 org.apache.activemq.store.jdbc.TransactionContext.getConnection(TransactionContext.java:63) 在 org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.loadAdapter(JDBCPersistenceAdapter.java:451) 在 org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.createAdapter(JDBCPersistenceAdapter.java:434) 在 org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getAdapter(JDBCPersistenceAdapter.java:383) 在 org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.init(JDBCPersistenceAdapter.java:296) 在 org.apache.activemq.broker.LockableServiceSupport.preStart(LockableServiceSupport.java:89) 在 org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:54) 在 org.apache.activemq.broker.BrokerService.doStartPersistenceAdapter(BrokerService.java:675) 在 org.apache.activemq.broker.BrokerService.startPersistenceAdapter(BrokerService.java:659) 在 org.apache.activemq.broker.BrokerService.start(BrokerService.java:623) 在 org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:73) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1700) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1639) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)

ActiveMQ.xml如下:

  <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>file:${activemq.conf}/credentials.properties</value>
                    <value>file:${activemq.conf}/jdbc.properties</value>
                </list>
            </property>
        </bean>

       <!-- Allows accessing the server log -->
        <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
              lazy-init="false" scope="singleton"
              init-method="start" destroy-method="stop">
        </bean>

        <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">

            <destinationPolicy>
                <policyMap>
                  <policyEntries>
                    <policyEntry topic=">" producerFlowControl="true">

                      <pendingMessageLimitStrategy>
                        <constantPendingMessageLimitStrategy limit="1000"/>
                      </pendingMessageLimitStrategy>
                    </policyEntry>
                  </policyEntries>
                </policyMap>
            </destinationPolicy>


            <managementContext>
                <managementContext createConnector="true"/>
            </managementContext>


            <persistenceAdapter>
                <jdbcPersistenceAdapter dataDirectory="${base}/data/" dataSource="#oracle-ds">
                    <statements>
                        <statements tablePrefix="AMQ_"/>
                    </statements>
                </jdbcPersistenceAdapter>
            </persistenceAdapter>


              <systemUsage>
                <systemUsage>
                    <memoryUsage>
                        <memoryUsage percentOfJvmHeap="70" />
                    </memoryUsage>
                    <storeUsage>
                        <storeUsage limit="100 gb"/>
                    </storeUsage>
                    <tempUsage>
                        <tempUsage limit="50 gb"/>
                    </tempUsage>
                </systemUsage>
            </systemUsage>

            <transportConnectors>
                <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
                  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600"/>
                <transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/>
            </transportConnectors>

            <!-- destroy the spring context on shutdown to stop jetty -->
            <shutdownHooks>
                <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
            </shutdownHooks>

        </broker>

     <import resource="jetty.xml"/>

        <bean id="oracle-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="url" value="${url} />
            <property name="username" value="${oracle.jdbc.username}"/>
            <property name="password" value="${oracle.jdbc.password}"/>
            <property name="maxTotal" value="20"/>  
            <property name="poolPreparedStatements" value="true"/>
          </bean>
    </beans>

【问题讨论】:

    标签: spring jms activemq


    【解决方案1】:

    你有可能降级吗?

    请看ActiveMQ releases的顺序

    ...

    • ActiveMQ 5.14.4 发布
    • ActiveMQ 5.14.5 发布
    • ActiveMQ 5.15.0 发布

    ...

    • ActiveMQ 5.6.0 发布
    • ActiveMQ 5.7.0 发布

    【讨论】:

    • 我不认为这是降级。它只是在页面上以字母数字顺序列出。
    • 这个不对,最新版本是5.15.3。我知道令人困惑,但您必须将句点之间的每个数字视为一个数字本身。不是“.2”与“.15”,而是“2”与“15”,15大于2。
    【解决方案2】:

    解决方案是我使用的 ojdbc14.jar 没有实现此 ActiveMQ 版本所需的新 JDBC API,因此下载支持 oracle 11g 的“ojdbc6.jar”可以解决问题。

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 2013-07-03
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2015-11-03
      • 2020-08-20
      相关资源
      最近更新 更多