2

これは本当に奇妙な問題です。snmp4j を 1.10.1 から最新バージョン (2.2.5) にアップグレードしようとしていますが、ActiveMQ (バージョン 5.9.1) 内からスタックオーバーフロー エラーが発生しています。私は奇妙な回避策を持っていますが、誰かがこの問題にもっと光を当てることができれば興味深いでしょう.

snmp4j が SnmpRequest クラスをロードし、次の静的ブロックを実行すると、スタック オーバーフローが発生します。

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]

これは stderr になると思いますが、それはすべて 1 つの大きな行です。

4

1 に答える 1

3

SnmpRequest クラスを使用してコードを呼び出す Log4J 初期化からの再帰がある可能性があります。SnmpRequest クラスは単なる例であり、本番コードでは使用しないでください。理由の 1 つは、ログの初期化とそのメイン メソッドがハードコードされていることです。

于 2014-04-25T00:07:06.870 に答える