jboss 7 "из коробки" не видит некоторые пакеты jdk
В прикладном коде приложения используются классы из пакета
com.sun.net.httpserver - обычные классы jdk из rt.jar. На сервере приложений jboss 7
попытка запуститься привела к ошибке:
StandardWrapper.Throwable: java.lang.NoClassDefFoundError: com/sun/net/httpserver/HttpHandler
jvm 1 | at java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.7.0]
jvm 1 | at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) [rt.jar:1.7.0]
...
jvm
1 | Caused by: java.lang.ClassNotFoundException:
com.sun.net.httpserver.HttpHandler from [Module
"deployment.easygeo-1.0-SNAPSHOT.ear.front-1.0-SNAPSHOT.war:main" from
Service Module Loader]
jvm 1 | at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
jvm 1 | at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
jvm 1 | at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
jvm 1 | at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
jvm 1 | at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
jvm 1 | ... 32 more
Казалось бы, jboss запускается же ведь на указанной jdk (запуск
выполняется с помощью wrapper.tanukisoftware.com, и во wrapper.conf
установлено верное значение JAVA_HOME; да и вообще - всё остальное же
работает!). Почему сервер не видит стандартный пакет?
Решение оказалось простым. Файл
jboss_home\modules\sun\jdk\main\module.xml содержит перечней тех пакетов
jdk, которые деплоятся. Выглядит так:
<module xmlns="urn:jboss:module:1.1"
name="sun.jdk">
...
<dependencies>
<system-export="true">
<paths>
<path name="com/sun/script/javascript"/>
<path name="com/sun/indi/..."/>
<path name="com/sun/security/..."/>
Дописал там:
<path name="com/sun/net/httpserver" />
и всё чудесным образом стало хорошо! Аналогично можно подключить и пакеты из resources.jar.
P. S. Хотя это выглядит несколько странным, когда требуется править внутренние конфиги сервера приложений. Возможно, есть более красивое решение?