BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
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]
Related videos on Youtube
eclipznightz
Updated on July 08, 2022Comments
-
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!