在jboss上的jar文件中获取类的Spring BeanCreationException

时间:2014-10-03 08:00:40

标签: spring maven spring-mvc jboss

我们将Spring MVC maven项目(X项目)依赖于另一个Spring-core项目(Y项目) 我们在第二个(Y)项目中定义了一个Spring组件(NotificationManager),我们在Spring mvc(X)项目的一个控制器@Authowire中使用class(AccountController)注入了这个组件。

虽然我们在tomcat 6.x应用服务器上没有遇到任何问题,但我们在Jboss 5.x Eap应用服务器上遇到了以下错误。
我们在目录" /web-inf/lib/Y.jar"中看到了包含NotificationManager组件类的Y.jar文件。部署在Jboss上的X.war文件:*

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'accountController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.fa
ctory.BeanCreationException: Could not autowire field: private com.xxx.yy.jaws.manager.NotificationManager com.xxx.yy.jaws.controller.BaseController.notificationManager; nested exception i
s org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.yy.jaws.manager.NotificationManager] found for dependency: expected at least 1 bean which q
ualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
.....

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.xxx.yy.jaws.manager.NotificationManager com.xxx.yy.jaws.controller.BaseController.
notificationManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.yy.jaws.manager.NotificationManager] found for depen
dency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
...
09:27:35,690 ERROR [[/jaws]] Servlet /jaws threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.yy.jaws.manager.NotificationManager] found for dependency: expected at least 1 bean which qua
lifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
....
Spring version: 4.0.0.RELEASE
security.version: 3.2.5.RELEASE
Java version: 1.6
org.jboss.jboss-vfs version :3.2.6.Final

那是春天的背景:

<context:component-scan base-package="com.xxx.yy" />

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="false">
        <bean
            class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            <property name="objectMapper">
                <bean class="com.xxx.yy.jaws.spring.converter.JawsObjectMapper" />
            </property>
        </bean>
        <bean id="imageConverter" class="org.springframework.http.converter.BufferedImageHttpMessageConverter"></bean>
    </mvc:message-converters>
</mvc:annotation-driven>


  <!-- Application Message Bundle -->




<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- <property name="basename" value="classpath:messages" /> -->
    <property name="basenames">
        <list>
            <value>classpath:messages</value>
            <value>classpath:appErrHttpStatus</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<!-- Declare the Interceptor -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="locale" />

    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <mvc:exclude-mapping path="${error.url.prefix}" />
        <bean id="baseInterceptor" class="com.xxx.yy.jaws.interceptor.BaseInterceptor" />
    </mvc:interceptor>
    <bean id="executeTimeInterceptor" class="com.xxx.yy.jaws.interceptor.ExecuteTimeInterceptor" />
    <mvc:interceptor>
        <mvc:mapping path="${login.url.prefix}" />
        <mvc:exclude-mapping path="${keyword.url.prefix}" />
        <bean id="loginInterceptor" class="com.xxx.yy.jaws.interceptor.LoginInterceptor" />
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="${secure.url.prefix}" />
        <bean id="signOnInterceptor" class="com.xxx.yy.jaws.interceptor.SignOnInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>


<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:jaws.jdbc.properties</value>
            <value>classpath:jaws.app.properties</value>
            <value>classpath:jaws.hibernate.properties</value>
        </list>
    </property>
</bean>

<bean id="nappsExceptionResolver" class="com.xxx.yy.jaws.spring.handlers.JawsExceptionResolver" />


<!-- ========================================================================================================= -->
<jee:jndi-lookup id="jawsDataSource" jndi-name="${jdbc.jawsDataSource}" cache="true" />

<bean id="jawsSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="jawsDataSource" />
    <property name="configLocation">
        <value>classpath:jaws.hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
    <property name="namingStrategy">
        <ref bean="namingStrategy" />
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="jawsSessionFactory" />
</bean>

<tx:annotation-driven />

<bean id="namingStrategy" class="com.xxx.yy.jaws.strategy.hibernate.CustomNamingStrategy" />

0 个答案:

没有答案