Развертывание WAR-ников, созданных Wavemaker'ом, на Weblogic имеет некоторые особенности, которые, впрочем, связаны не с самим Wavemaker'ом, а с используемыми в создаваемых приложениях библиотеками.
Первая ошибка, возникающая при работе Grid-виджета, связана с библиотекой Apache Commons Lang:
java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.join(Ljava/util/Collection;C)Ljava/lang/String;Проблема знакомая (Commons Lang цепляется не из приложения, а из weblogic'а), лечится добавлением в war-ник в папку WEB-INF дескриптора weblogic.xml со следующим содержимым:
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<description>Weblogic Webapp</description>
<container-descriptor>
<prefer-application-packages>
<package-name>org.apache.commons.*</package-name>
</prefer-application-packages>
</container-descriptor>
</weblogic-web-app>
Однако после этого вылезает другая проблема, на этот раз уже из-за Hibernate:
ClassNotFoundException: org.hibernate.hql.ast.HqlToken
Тут уже пришлось немного погуглить, и, спасибо http://blog.inflinx.com/2007/09/05/classnotfoundexception-orghibernatehqlasthqltoken-in-weblogic/, решение отыскалось, на этот раз не совсем очевидное. Заключается оно также в модификации weblogic.xml, который в итоге принял вид:
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<description>Weblogic Webapp</description>
<container-descriptor>
<prefer-application-packages>
<package-name>org.apache.commons.*</package-name>
<package-name>antlr.*</package-name>
</prefer-application-packages>
</container-descriptor>
</weblogic-web-app>
Чтобы каждый раз не добавлять weblogic.xml в war-ник руками перед развертыванием, можно его вшить в проект Wavemaker с помощью вкладки "Source" -> "Resources", добавив его в папку webapproot/WEB-INF:
Комментариев нет:
Отправить комментарий