BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

17,109

I had a similar Issue when i worked on Spring MVC using Tomcat 6 but i had by mistake declared multiple bean classes with the same name , check your classes once for ambiguity . Please post the complete stack trace .

Just In case if it helps this was my mistake so i got that error . Annotation-specified bean name 'countryServiceImpl' for bean class [com.ssrv.fms.service.contact.impl.CountryServiceImpl] conflicts with existing, non-compatible bean definition of same name and class [com.ssrv.fms.service.admin.impl.CountryServiceImpl]

Share:
17,109

Related videos on Youtube

eclipznightz
Author by

eclipznightz

Updated on July 08, 2022

Comments

  • eclipznightz
    eclipznightz almost 2 years

    I have this web.xml file

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-context.xml /WEB-INF/core-spring-beans.xml
    </param-value>
    </context-param>
    
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    

    and applicationContext that include the Bean

        <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:p="http://www.springframework.org/schema/p"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:jee="http://www.springframework.org/schema/jee"
           xmlns:tx="http://www.springframework.org/schema/tx"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                               http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
                               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
    
        <tx:annotation-driven transaction-manager="txManager"/>
    
    
        <bean id="txManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
            p:dataSource-ref="dataSource"/>
    
    
      <jee:jndi-lookup id="dataSource" jndi-name="pull_DS" resource-ref="true"/>
    
      <bean id="sqlMapClient"
            class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
            p:configLocation="classpath:pull/DBUtils/sqlMapConfig.xml"
            p:dataSource-ref="dataSource"/>
    
      <bean id="daoBase" abstract="true"
            p:sqlMapClient-ref="sqlMapClient"/>
    
      <bean id="Photo"
            class="pull.DBUtils.PopPhotoImpl"
            parent="daoBase"/>
    
      <bean id="Trunkcate"
            class="pull.DBUtils.TrunkcateCifSrcImpl"
            parent="daoBase"/>
    
        <bean id="applicationContextProvder"class="pull.DBUtils.ApplicationContextProvider"/>     
    </beans>
    

    and the ApplicationContextProvider.java for ApplicationContext

    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    public class ApplicationContextProvider implements ApplicationContextAware {
    
        private static ApplicationContext ctx = null;
    
        public static ApplicationContext getApplicationContext() {
            return ctx;
        }
    
        public void setApplicationContext(ApplicationContext ctx)
                throws BeansException {
            this.ctx = ctx;
        }
    }
    

    AND so I defined a method returnCleanUp in TrunkcateCifSrcImpl Bean as

    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.NoSuchBeanDefinitionException;
    import org.springframework.context.ApplicationContext;
    
    
    public class TrunkcateCifSrcImpl extends iBatisTemplate implements TrunkcateCifSrc{
    
    
    public int retTrunkcateReady() {
         return super.trunkcateReady("CifSrc_Trunkcate.cleanUp");
    }
    
    public static int returnCleanUp() {
        TrunkcateCifSrcImpl trunkcate = null;
        int result;
        try {
            ApplicationContext ctx = ApplicationContextProvider
                    .getApplicationContext();
            trunkcate = (TrunkcateCifSrcImpl) ctx.getBean("Trunkcate");
            result = trunkcate.retTrunkcateReady();
        }
        catch (NoSuchBeanDefinitionException noBeanE) {
            throw noBeanE;
        } catch (BeansException beanE) {
            throw beanE;
        }
        catch (Exception e) {
            throw e;
        }
        return result;
    }
    
    }
    

    The iBatisTemplate class to return a value of map "trunkcateReady" (value returns back from iBatis function called from database)

    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.dao.DataAccessException;
    import org.springframework.orm.ibatis.SqlMapClientCallback;
    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
    
    import com.ibatis.sqlmap.client.SqlMapExecutor;
    
    public class iBatisTemplate extends SqlMapClientDaoSupport {
    
        public int trunkcateReady(final String id) {
            Map<String, Integer> map = new HashMap<String, Integer>(1);
            getSqlMapClientTemplate().queryForObject(id, map);
            return map.get("trunkcateReady");
        }
    
      }
    

    but now once in awhile if i call this method from Trunkcate bean I would receive that exceptionm IllegalStateException, does anyone know what can I do to fix this??

    do{
        cleanUp = TrunkcateCifSrcImpl.returnCleanUp();
        if(cleanUp==1)
        {       
            logger.debug("Going to sleep........");
            Thread.sleep(65000);
        }
    }while(cleanUp!=0);
    

    Stack trace exception I got, this usually happens the first time it go through the loop then after Thread.sleep(65000), it will go back in normally

    2014-02-14 12:23:45,646 GMT-0800 [managedServer=weeManagedServer-1]pull.quartzScheduler.PullingPDRTask - Pull failed....
    java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
        at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:172)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
        at pull.DBUtils.TrunkcateCifSrcImpl.returnCleanUp(TrunkcateCifSrcImpl.java:21)
        at pull.quartzScheduler.PullingPDRTask.excute(PullingPDRTask.java:257)
        at pull.quartzScheduler.SchedulerService.executePullingPDRTask(SchedulerService.java:31)
        at pull.quartzScheduler.PullStatefulJob.executeInternal(PullStatefulJob.java:42)
        at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
    

    Thanks! any input would be helpful. I deploy my app on weblogic server 1036jdk1.7. Using spring 3.1.1. Thanks all!