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="sun/io"/>... и т. д.<path name="sun/util"/>
Дописал там:
<path name="com/sun/net/httpserver" />
и всё чудесным образом стало хорошо! Аналогично можно подключить и пакеты из resources.jar.
P. S. Хотя это выглядит несколько странным, когда требуется править внутренние конфиги сервера приложений. Возможно, есть более красивое решение?
Комментариев нет:
Отправить комментарий