首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Resin 啟動 JMX MalformedObjectNameException 排查:CLASSPATH 空格與舊版 JMX 衝突

     編輯:Java 相關知識

錯誤現象

javax.management.MalformedObjectNameException: 
ObjectName: invalid character ':' in value part of property...

根因分析

  1. CLASSPATH 中路徑含空格:C:\Program Files\Java\j2sdk1.5.0 → 空格導致 JMX 解析 ObjectName 屬性值時截斷,產生非法冒號。
  2. 舊版 JMX 實現衝突:CLASSPATH 中混入舊版 jmxri.jar、jmxtools.jar 等,與 JDK 1.5 內建 JMX (JSR 160) 衝突。

解決方案 (按推薦順序)

方案一:移動 JDK 至無空格路徑 (最徹底)

# 重新安裝或移動 JDK
C:\Java\jdk1.5.0   ← 無空格
# 更新環境變數
JAVA_HOME=C:\Java\jdk1.5.0
PATH=%JAVA_HOME%\bin;%PATH%

方案二:啟動 Resin 時清空 CLASSPATH


# Windows
set CLASSPATH=
bin\httpd.exe

# Linux/Unix
export CLASSPATH=""
bin/httpd.sh

Resin 自帶完整類庫,不依賴外部 CLASSPATH。

方案三:使用 -verbose 診斷實際 CLASSPATH


bin/httpd.exe -verbose
# 輸出環境變數與實際類載入路徑,定位衝突 JAR

方案四:排除舊版 JMX JAR

  • 檢查 %RESIN_HOME%\lib\、%JAVA_HOME%\jre\lib\ext\、應用 WEB-INF/lib\。
  • 刪除/移動 jmxri.jar, jmxtools.jar, mx4j*.jar 等舊實現。

驗證步驟

  1. 應用方案一或二後重啟 Resin。
  2. 觀察控制台無 MalformedObjectNameException。
  3. JMX 管理工具 (JConsole, VisualVM) 能正常連線監控。

最佳實踐總結

原則說明
JDK 路徑無空格避免 Windows 路徑空格導致各類工具解析失敗
生產環境不依賴系統 CLASSPATH應用伺服器/建構工具自管理類路徑
JDK 1.5+ 內建 JMX無需額外 JMX RI,避免版本衝突
定期清理 lib/ext 目錄防止舊版擴展污染類載入

結語

Resin JMX 啟動異常 90% 由 **CLASSPATH 空格** 或 **舊版 JMX JAR 殘留** 引起。遷移 JDK 至簡單路徑並清空啟動 CLASSPATH 可一勞永逸。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved