2017-02-09 2 views
1

В настоящее время я переношу приложения с JBoss 5.1 на JBoss 7.0 EAP-сервер.
Я добавил модуль для сервера JBoss с именем - org.springframework для банок весной зависимостей
JBOSS EAP 7.0 - java.lang.NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext

<?xml version="1.0" ?> 
<module xmlns="urn:jboss:module:1.1" name="org.springframework"> 

    <resources> 
     <resource-root path="spring-core-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-context-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-beans-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-expression-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-web-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-aop-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-asm-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-jdbc-3.0.5.RELEASE.jar"/> 
     <resource-root path="spring-tx-3.0.5.RELEASE.jar"/> 
     <resource-root path="org.springframework.web.servlet-3.0.0.M3.jar"/> 
     <resource-root path="commons-logging-1.1.1.jar"/> 
    </resources> 

    <dependencies> 
     <module name="javax.api"/>  
     <module name="javax.servlet.jsp.api"/> 
     <module name="javax.faces.api"/> 
    </dependencies> 
</module> 

Я определил зависимость модуля в JBoss-развертывания-structure.xml в WAR

<jboss-deployment-structure> 

    <deployment> 

     <dependencies> 
     <module name="com.oracle" /> 
     <module name="org.springframework" /> 
     </dependencies> 

    </deployment> 

</jboss-deployment-structure> 

война развертывается на сервер также содержит пружинный контекстное 3.0.5.RELEASE.jar в WEB-INF/Lib папки

Итак, я думаю, что требуемый jar-spring-context-3.0.5.RELEASE.jar существует в пути класса. Но все-таки я получаю ошибку ниже:

04:33:30,496 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (default task-19) Loading XML bean definitions from class path resource [core_services.xml] 
04:33:30,507 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] (default task-19) Pre-instantiating singletons in org.springframework.beans.fact 
[email protected]: defining beans [LogService,CacheService,PropertyService]; root of factory hierarchy 
2017.02.09 04:33:30 ERROR CashViewsPortalServiceImpl(-2): org/springframework/context/support/ClassPathXmlApplicationContext 
CallStack=java.lang.NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext 
     at com.karthik.common.service.Services.getService(Services.java:31) 
     at com.karthik.data.service.DataServices.getService(DataServices.java:18) 
     at com.karthik.portal.server.PortalServiceImpl.getInitializeInfo(PortalServiceImpl.java:83) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561) 
     at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265) 
     at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305) 
     at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
     at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 
     at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) 
     at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 
     at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
     at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) 
     at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) 

1) Почему нам нужно добавить модуль в JBoss 7 EAP сервер для загрузки класса, даже несмотря на то банки поставляются в WEB-INF/Lib папки войны развернуто на сервере?
2) Как устранить вышеуказанную ошибку
?

+0

Пришлось удалить мой ответ, потому что мое предположение было неправильным. На самом деле класс, который не найден, находится в 'spring-core-3.0.5.RELEASE.jar', и вы уже определили это. Попробуйте изменить модуль пружины в структуре развертывания на '', добавив атрибут 'export'. – Omoro

+0

@Omoro. Спасибо за помощь. Я добавил в jboss-deployment-structure.xml, но все равно получаю ту же ошибку. Могу ли я узнать, какая разница делает атрибут экспорта. – Karthik

+0

Я использовал это для приложения, которое использует весну в JBoss Wildfly. Через maven я задал масштаб пружинных зависимостей «предоставлен», так что я использую для приложения только пружинные зависимости, обеспечиваемые модулем пружины в JBoss. Атрибут «Экспорт» используется для экспорта зависимостей, которым могут потребоваться другие модули. '<модуль имя = "org.springframework" экспорт = "истинный"> \t \t \t <включают путь = "META-INF **"/> \t \t <включают путь = "орг **"/> \t ' – Omoro

ответ

0

Я думаю, что вы не определили пружинные зависимости отлично. Ниже приведены шаги:

Вы можете определить Spring как модуль

Ниже приведены шаги по созданию Spring модуля:

1.Download нужный вариант Spring. В этом примере мы используем Spring 3.1.1.

2.Создание каталога: $ JBOSS_HOME/modules/org/springframework/spring/main.

3. Загрузите библиотеки Spring, загруженные в этот каталог.

4.Создать module.xml со следующим содержимым в этом каталоге. Убедитесь, что они соответствуют именам библиотек:

<?xml version="1.0" encoding="UTF-8"?> 
<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring"> 
    <resources> 
    <resource-root path="org.springframework.aop-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.asm-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.aspects-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.beans-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.context-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.context.support-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.core-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.expression-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.instrument-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.instrument.tomcat-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.jdbc-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.jms-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.orm-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.oxm-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.test-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.transaction-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.web-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.web.portlet-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.web.servlet-3.1.1.RELEASE.jar"/> 
    <resource-root path="org.springframework.web.struts-3.1.1.RELEASE.jar"/> 
    </resources> 
    <dependencies> 
    <module name="org.apache.commons.logging"/> 
    <module name="javax.api" export="true"/> 
    <module name="org.jboss.vfs"/> 
    </dependencies> 
</module> 

Здесь абсолютная минимальная module.xml (различные версии Spring не имеет значения):

<?xml version="1.0"?> 
<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring"> 
    <resources> 
    <resource-root path="spring-aop-3.2.3.RELEASE.jar"/> 
    <resource-root path="spring-beans-3.2.3.RELEASE.jar"/> 
    <resource-root path="spring-context-3.2.3.RELEASE.jar"/> 
    <resource-root path="spring-core-3.2.3.RELEASE.jar"/> 
    <resource-root path="spring-expression-3.2.3.RELEASE.jar"/> 
    </resources> 
    <dependencies> 
    <module name="javax.api"/> 
    <module name="org.apache.commons.logging"/> 
    </dependencies> 
</module> 

5.put следующим JBoss-deployment- struct.xml в вашем архиве приложений (WEB-INF/jboss-deployment-structure.xml для WAR или META-INF/jboss-deployment-structure.xml для EAR или EJB-jar) для использования вышеуказанного модуля:

Если вы используете JBoss EAP 6.1.x и выше или EAP 7, используйте ниже:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> 
    <deployment> 
    <dependencies> 
     <module name="org.springframework.spring" export="true" meta-inf="export"/> 
    </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

Если JBoss EAP 6.0.x, то используйте ниже

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> 
    <deployment> 
    <dependencies> 
     <module name="org.springframework.spring" export="true"> 
     <imports> 
      <include path="META-INF**"/> 
      <include path="org**"/> 
     </imports> 
     <exports> 
      <include path="META-INF**"/> 
      <include path="org**"/> 
     </exports> 
     </module> 
    </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

Примечание: мета-инф на модуле в JBoss-развертывания-structure.xml был добавлен в JBoss EAP 6.1.0 , что позволяет видеть файлы в META-INF ресурса. Поскольку это не было доступно в JBoss EAP 6.0.x, раздел позволяет получить доступ к каталогу META-INF, который по умолчанию не отображается.

Примечание. Модуль Spring Framework не должен включать такие ресурсы, как servlet-api.jar, xml-apis.jar, jta-api.jar и другие API. Эти API реализованы либо JDK, либо JBoss, и попытка использовать другую версию API приведет к проблемам с загрузкой и другим проблемам.

Примечание. Модуль Spring должен включать все его зависимости от не Java/JavaEE. Модуль Spring может зависеть от javax.api/javaee.api, предоставленного JBoss и любым открытым JBoss-модулем, но для других зависимостей Spring такой как aopalliance, они должны быть включены как ресурсы в модуль или в другой настраиваемый модуль.

+0

Мне нужно одно важное разъяснение. Как насчет весенних банок в папке WEB-INF/lib WAR. Должен ли я удалить его? Не следует ли включать какие-либо банки в папку WEB-INF/lib WAR, развернутой на JBoss 7 EAP? – Karthik

+0

Да, вы должны удалить все банки из папки WEB-INF/lib, иначе вы можете перепутаться, в результате это будет противоречить между теми же банками. –

+0

ok, если мы не создадим пружинный модуль и не скомпонуем весенние банки в папке WEB-INF, это сработает? – Karthik

Смежные вопросы