2016-03-04 72 views
1

我在EhCache引导过程中尝试从数据库加载数据时遇到异常。尝试从数据库加载数据时出现异常EhCache引导过程

如果我不从数据库加载数据,即从xyzBootstrapCacheLoaderFactory删除xyzTestResultFacade.loadxyzTestResultsFromDb();那么一切都很好。

我的猜测是Spring的数据库事务管理没有准备好,而我正在引导EhCache。

如果您认为需要其他文件,请让我知道。

xyzBootstrapCacheLoaderFactory:

import java.util.Properties; 

import net.sf.ehcache.CacheException; 
import net.sf.ehcache.Ehcache; 
import net.sf.ehcache.bootstrap.BootstrapCacheLoader; 
import net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 

import com.abc.xyz.facade.xyzTestResultFacade; 

public class xyzBootstrapCacheLoaderFactory extends RMIBootstrapCacheLoaderFactory implements BootstrapCacheLoader { 

    Log log = LogFactory.getLog(xyzBootstrapCacheLoaderFactory.class); 

    @Autowired 
    xyzTestResultFacade xyzTestResultFacade; 

    @Override 
    public Object clone() throws CloneNotSupportedException { 
     return super.clone(); 
    } 

    @Override 
    public boolean isAsynchronous() { 
     return false; 
    } 

    @Override 
    public void load(Ehcache arg0) throws CacheException { 
     log.info("Bootstrapping the cache."); 
     xyzTestResultFacade.loadxyzTestResultsFromDb(); 
     log.info("Bootstrapping cache completed successfully."); 
    } 

    @Override 
    public BootstrapCacheLoader createBootstrapCacheLoader(Properties properties) { 
     log.info("createBootstrapCacheLoader log ################################ " + this.hashCode()); 
     return this; 
    } 

} 

xyzApplication-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" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

     <!-- Loading the properties file containing the JDBC, MQ properties --> 
     <bean class="com.abc.xyz.customComponents.xyzPropertyPlaceholderConfigurer"> 
      <property name="locations"> 
      <list> 
      <value>file:${DOMAIN_HOME}/xyzConfig/jdbc.properties</value> 
      <value>file:${DOMAIN_HOME}/xyzConfig/http_connections.properties</value> 
      </list> 
      </property> 
     </bean> 

     <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" /> 

     <import resource="/context/web-applicationContext.xml"/> 
     <import resource="/context/dataAccess-applicationContext.xml"/> 
     <import resource="/context/cache-applicationContext.xml"/> 
</beans> 

/context/cache-applicationContext.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" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd"> 

    <!-- Process cache annotations --> 
    <ehcache:annotation-driven cache-manager="cacheManager" /> 

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
     p:config-location="WEB-INF/ehcache.xml" scope="singleton" p:shared="true"/> 

    <bean id="initializingBean" class="com.abc.xyz.customComponents.InitializingBean" init-method="initializeProperties"/> 
</beans> 

ehcache.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> 

    <!-- Sets the path to the directory where cache .data files are created. 

     If the path is a Java System Property it is replaced by its value in the running VM. 

     The following properties are translated: 
      1. user.home - User's home directory 
      2. user.dir - User's current working directory 
      3. java.io.tmpdir - Default temp file path --> 

    <diskStore path="java.io.tmpdir"/> 


    <!--Default Cache configuration. These will applied to caches programmatically created through the CacheManager. 

     The following attributes are required: 

     maxElementsInMemory   - Sets the maximum number of objects that will be created in memory 
     eternal      - Sets whether elements are eternal. If eternal, timeouts are ignored and the 
             element is never expired. 
     overflowToDisk     - Sets whether elements can overflow to disk when the in-memory cache 
             has reached the maxInMemory limit. 

     The following attributes are optional: 
     timeToIdleSeconds    - Sets the time to idle for an element before it expires. 
             i.e. The maximum amount of time between accesses before an element expires 
             Is only used if the element is not eternal. 
             Optional attribute. A value of 0 means that an Element can idle for infinity. 
             The default value is 0. 
     timeToLiveSeconds    - Sets the time to live for an element before it expires. 
             i.e. The maximum time between creation time and when an element expires. 
             Is only used if the element is not eternal. 
             Optional attribute. A value of 0 means that and Element can live for infinity. 
             The default value is 0. 
     diskPersistent     - Whether the disk store persists between restarts of the Virtual Machine. 
             The default value is false. 
     diskExpiryThreadIntervalSeconds- The number of seconds between runs of the disk expiry thread. The default value 
             is 120 seconds. 
     --> 

    <defaultCache 
     maxElementsInMemory="10000" 
     eternal="false" 
     overflowToDisk="true" 
     timeToIdleSeconds="120" 
     timeToLiveSeconds="120" 
     diskPersistent="false" 
     diskExpiryThreadIntervalSeconds="120"/> 

    <!-- Defining the cache to store all static data -->  
    <cache name="refValueCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="false" /> 

     <!-- Defining the cache to store all static data -->  
    <cache name="xyzTestResultsCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="false"> 
     <cacheEventListenerFactory class="com.abc.xyz.customComponents.serverCache.xyzRMICacheReplicatorFactory" 
      properties="replicateAsynchronously=false, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true "/> 
     <bootstrapCacheLoaderFactory class="com.abc.xyz.customComponents.serverCache.xyzBootstrapCacheLoaderFactory"/> 
    </cache> 

</ehcache> 

异常堆栈跟踪:

<Mar 5, 2016 1:21:37 AM IST> <Warning> <HTTP> <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/xyzApplication-servlet.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot resolve reference to bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' while setting bean property 'transactionAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.googlecode.ehcache.annotations.config.internalEhCacheCachingAdvisor': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.CacheStaticMethodMatcherPointcut#0' while setting bean property 'pointcut'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.googlecode.ehcache.annotations.impl.CacheStaticMethodMatcherPointcut#0': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl#0' while setting bean property 'cacheAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl#0': Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in ServletContext resource [/WEB-INF/context/cache-applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException. 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/xyzApplication-servlet.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot resolve reference to bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' while setting bean property 'transactionAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.googlecode.ehcache.annotations.config.internalEhCacheCachingAdvisor': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.CacheStaticMethodMatcherPointcut#0' while setting bean property 'pointcut'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.googlecode.ehcache.annotations.impl.CacheStaticMethodMatcherPointcut#0': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl#0' while setting bean property 'cacheAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl#0': Cannot resolvereference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in ServletContext resource [/WEB-INF/context/cache-applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290) 
     Truncated. see log file for complete stacktrace 
Caused By: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor' 
: Cannot resolve reference to bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' while setting bean property 'transactionAttrib 
uteSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.An 
notationTransactionAttributeSource#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bea 
n with name 'com.googlecode.ehcache.annotations.config.internalEhCacheCachingAdvisor': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.Cach 
eStaticMethodMatcherPointcut#0' while setting bean property 'pointcut'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating b 
ean with name 'com.googlecode.ehcache.annotations.impl.CacheStaticMethodMatcherPointcut#0': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl 
.CacheAttributeSourceImpl#0' while setting bean property 'cacheAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error c 
reating bean with name 'com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl#0': Cannot resolve reference to bean 'cacheManager' while setting bean prope 
rty 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in ServletConte 
xt resource [/WEB-INF/context/cache-applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
     Truncated. see log file for complete stacktrace 
Caused By: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAt 
tributeSource#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.goog 
lecode.ehcache.annotations.config.internalEhCacheCachingAdvisor': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.CacheStaticMethodMatcherP 
ointcut#0' while setting bean property 'pointcut'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.go 
oglecode.ehcache.annotations.impl.CacheStaticMethodMatcherPointcut#0': Cannot resolve reference to bean 'com.googlecode.ehcache.annotations.impl.CacheAttributeSource 
Impl#0' while setting bean property 'cacheAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with nam 
e 'com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl#0': Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; n 

回答

0

也许你已经得到了一些多CacheManagers(Hibernate的可能?)。 尝试为您的ehcache标记添加一个“名称”属性(编辑:从ehcache.xml)。

+0

你能指定哪一个你试图指出,我提供了所有相关的代码..我不休眠.. – hagrawal

相关问题