BeanFactory pas initialisé ou déjà fermé appel "actualiser" avant d'accéder à des haricots via l'ApplicationContext

J'ai ce web.xml fichier

<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>

et applicationContext qui comprennent les Haricots

    <?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>

et la ApplicationContextProvider.java pour 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;
    }
}

ET j'ai donc défini une méthode returnCleanUp dans TrunkcateCifSrcImpl Bean

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;
}

}

La iBatisTemplate classe pour renvoyer une valeur de la carte "trunkcateReady" (valeur renvoie dans iBatis fonction appelée à partir de la base de données)

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");
    }

  }

mais maintenant, une fois de temps en temps si j'appelle cette méthode de Trunkcate bean je recevrais que exceptionm IllegalStateException, personne ne sait ce que je peux faire pour résoudre ce problème??

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

Trace de la pile d'exception que j'ai eu, c'est habituellement le cas la première fois aller à travers la boucle puis après Fil.sommeil(65000), elle va repartir en normalement

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)

Merci! toute entrée serait utile. - Je déployer mon application sur weblogic server 1036jdk1.7. À l'aide de printemps 3.1.1. Merci à tous!

Vous pouvez poster l'exception stacktrace?
Aussi, le truncateDAO. Est-il mentionné en tant que dépendance pour votre TruncateCifSrcImpl classe? Il ne marche pas montrer de cette façon dans le xml de config
Y compris mon stacktrace où il a échoué. Il a échoué lorsqu'il tente de getBean "Trunkcate". Cette toute demande également à l'aide de Quartz pour la planification et se réveille toutes les 30 minutes, "returnCleanUp" est une partie de la "executePullingPDRTask". Tant que le nettoyage de retour encore!=0, "returnCleanUp" sera n'arrêtait pas d'appeler. Ps: je ne sais pas si ça aide, je ony ensemble quartz thread =1 afin de réduire plusieurs threads. Merci!

OriginalL'auteur eclipznightz | 2014-02-17