简体   繁体   中英

Spring deployment in jboss error

I just wanted to add spring framework to my project, But when i try to deploy my war file in jboss 6.1.0 Final, it gives a error. I get following error,

    11:01:46,556 INFO  [STDOUT] ERROR: org.springframework.web.context.ContextLoader - Context initializ
ation failed
11:01:46,557 INFO  [STDOUT] org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'com.tapgift.merchant.integration.spring.DaoFactoryPostProcessor#0' defined in class
path resource [config/dao-defs.xml]: Cannot resolve reference to bean 'DAOFactory' while setting bea
n property 'daoFactory'; nested exception is org.springframework.beans.factory.BeanCreationException
: Error creating bean with name 'DAOFactory' defined in class path resource [config/dao-defs.xml]: I
nvocation of init method failed; nested exception is java.lang.NullPointerException

This is dao-def.xml

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <!-- All DAO bean definitions goes here -->
    <bean id="DAOFactory"
        class="com.tapgift.merchant.integration.db.dao.jdbc.JdbcDaoFactoryImpl" />

    <bean class="com.tapgift.merchant.integration.spring.DaoFactoryPostProcessor">
        <property name="daoFactory" ref="DAOFactory" />
    </bean>

     <bean id="merchantDao"
        class="com.tapgift.merchant.integration.db.dao.jdbc.JdbcMerchantDao">
        <property name="dataSource" ref="dataSource" />     
        <property name="queryFactory" ref="QueryFactory" />         
    </bean>

</beans>

This is application-context.xml

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:annotation-config />
    <context:component-scan base-package="com.tapgift.merchant" />

    <import resource="classpath:config/spring-integration.xml" />
    <import resource="classpath:config/dao-defs.xml" /> 
    <import resource="classpath:config/query-defs.xml" />   
    <import resource="classpath:config/spring-support.xml" />


</beans>

Finally this is web.xml

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/application-context.xml
                /WEB-INF/spring/root-context.xml</param-value>
</context-param>

oops, almost missed the pom,

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tapgift</groupId>
    <artifactId>merchant</artifactId>
    <name>merchant-server</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
        <java-version>1.7</java-version>
        <org.springframework-version>3.1.0.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.9</org.aspectj-version>
        <org.slf4j-version>1.5.10</org.slf4j-version>
    </properties>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>               
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
                   <groupId>commons-collections</groupId>
                   <artifactId>commons-collections</artifactId>
                   <version>3.2.1</version>
                   <scope>compile</scope>
            </dependency>
            <dependency>
                  <groupId>commons-lang</groupId>
                  <artifactId>commons-lang</artifactId>
                  <version>2.6</version>
                  <scope>compile</scope>
            </dependency>
            <dependency>
                 <groupId>commons-io</groupId>
                 <artifactId>commons-io</artifactId>
                 <version>2.0.1</version>
                 <scope>compile</scope>
            </dependency>
            <dependency>
                 <groupId>commons-dbcp</groupId>
                 <artifactId>commons-dbcp</artifactId>
                 <version>1.4</version>
                 <scope>compile</scope>
            </dependency>

        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>   

        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>           
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>compile</scope>
        </dependency>

        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- JSON view resolver -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.2</version>
        </dependency>

        <!-- Test -->
        <!-- <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>  -->       
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

I can see all the files compiled and assembled to the war file. Appreciate, if a spring guru can point me the reason for this deployment error.

Edit: Added DaoFactoryImpl

package com.tapgift.merchant.integration.db.dao.jdbc;

import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import com.tapgift.merchant.integration.db.dao.BaseDao;
import com.tapgift.merchant.integration.db.dao.DaoFactory;
import com.tapgift.merchant.integration.db.dao.EntityBaseDao;

/**
 * Class <code>CaseServiceImpl</code> is an implementation of the <tt>DaoFactory</tt> interface.
 */
public class JdbcDaoFactoryImpl implements DaoFactory, InitializingBean, ApplicationContextAware
{
    private ApplicationContext m_appCtx;
    private Map<String, EntityBaseDao<?>> m_daoMap = new HashMap<String, EntityBaseDao<?>>();

    /**
     * {@inheritDoc}.
     */
    @Override
    @SuppressWarnings("rawtypes")
    public void afterPropertiesSet() throws Exception
    {
        Map<String, BaseDao> beanMap = m_appCtx.getBeansOfType(BaseDao.class);
        for (final BaseDao dao : beanMap.values())
        {
            m_daoMap.put(((EntityBaseDao) dao).getEntityType().getName(), (EntityBaseDao) dao);
        }
    }

    /**
     * {@inheritDoc}.
     */
    @Override
    public BaseDao getDao(String name)
    {
        return this.m_daoMap.get(name);
    }

    /**
     * {@inheritDoc}.
     */
    @Override
    public <T> T getEntityDao(Class<T> clazz)
    {
        String entityName = ((Class) ((ParameterizedType) clazz.getGenericInterfaces()[0]).getActualTypeArguments()[0])
            .getSimpleName().toUpperCase();
        return clazz.cast(this.m_daoMap.get(entityName));
    }

    /**
     * Set method for m_appCtx
     */
    @Override
    public void setApplicationContext(ApplicationContext appCtx) throws BeansException
    {
        this.m_appCtx = appCtx;
    }

}

Update 2 The problem seems to be creating the JdbbcDaoFactoryimpl instance, When i removed the <bean id="DAOFactory" class="com.tapgift.merchant.integration.db.dao.jdbc.JdbcDaoFactoryImpl" /> with its dependencies, i can deploy it without any problem. I checked the war file and all spring jars are belongs to same version. Need a help desperately.

Issue:

Cannot resolve reference to bean 'DAOFactory' while setting bean property 'daoFactory';

Cause:

Error creating bean with name 'DAOFactory' defined in class path resource [config/dao-defs.xml]: Invocation of init method failed ; nested exception is java.lang.NullPointerException

Spring not able to create object of DAOFactory ie JdbcDaoFactoryImpl as it came across NullPointerException while initializing object.
Add some relevant code which will help to figure out exact cause.


Update: Looks like following line is causing the issue

Map<String, BaseDao> beanMap = m_appCtx.getBeansOfType(BaseDao.class);

Spring not able to find bean of type BaseDao . Make sure you have defined a bean of type BaseDao

Never mind, i was able to fix it, Slightly related to what Ajinkya showed. Problem was m_daoMap.put(((EntityBaseDao) dao).getEntityType().getName() on this code of JdbcDaoFactoryImpl. ((EntityBaseDao) dao).getEntityType() was not returning any value but null. I forgot to override / remove particular method of actual dao implementation class. Once i removed that method, i was able to deploy it without facing any problem.

Thank you for your support anyway.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM