2

这是一个非常奇怪的问题。我正在尝试将 snmp4j 从 1.10.1 升级到最新版本(2.2.5),现在我从 ActiveMQ(版本 5.9.1)中收到 stackoverflowerror。我有一个奇怪的解决方法,但如果有人能更清楚地了解这个问题,那将会很有趣。

当 snmp4j 加载 SnmpRequest 类并执行此静态块时,会发生 stackoverflow:

static {
    LogFactory.setLogFactory(new Log4jLogFactory());
    org.apache.log4j.BasicConfigurator.configure();
    BER.setCheckSequenceLength(false);
  }

BasicConfigurator.configure()调用时 ActiveMQ 崩溃。我的解决方法是在启动时(在 ActiveMQ 初始化之前)构造(加载)一个 SnmpRequest 对象。在 snmp4j 版本 1.10.1 中,SnmpRequest 类有一个不同的静态块,没有configure()调用。

下面是 stackoverflowerror 的跟踪:

6688 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  -
4550 [ActiveMQ VMTransport: vm://Server#1-1] TRACE org
6689 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  - 
4550 [ActiveMQ VMTransport: vm://Server#1-1] TRACE org
6691 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  - 
4550 [ActiveMQ VMTransport: vm://JServer#1-1] TRACE org
6693 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  - 
4550 [ActiveMQ VMTransport: vm://Server#1-1]

我相信这将是标准错误,这都是一条大线。

4

1 回答 1

3

Log4J 初始化可能有一个递归,它使用 SnmpRequest 类调用您的代码。SnmpRequest 类只是一个示例,不应在生产代码中使用 - 原因之一是硬编码的日志初始化及其主要方法。

于 2014-04-25T00:07:06.870 回答