2017-06-14 1 views
0

J'essaie de suivre les articles here & here pour implémenter JMX pour ehCache. Mon application utilise la mise en œuvre de printemps mais & les entrées de configuration s'en dessous de cette exception:Configurer JMX avec l'implémentation Spring de ehcache?

org.springframework.beans.factory.UnsatisfiedDependencyException: Erreur de création de haricot avec le nom « ManagementService » définis dans le chemin classe ressources [très. application.finance.businessactivites.xml]: Dépendance non satisfaite exprimée par l'argument constructeur avec index 0 de type [net.sf.ehcache.CacheManager]: Impossible de convertir valeur d'argument constructeur de type [org.springframework.cache.ehcache .EhCacheCacheManager] au type requis [net.sf.ehcache.CacheManager]: Échec pour convertir la valeur de type 'org.springframework.cache.ehcache.EhCacheCacheManager' en obligatoire type 'net.sf.ehcache.CacheManager'; exception imbriquée est java.lang.IllegalStateException: Impossible de convertir la valeur de type [org.springframework.cache.ehcache.EhCacheCacheManager] pour le type requis [net.sf.ehcache.CacheManager]: aucune stratégie éditeurs correspondants ou conversion trouvé

Est-ce que le printemps a une implémentation de net.sf.ehcache.management.ManagementService que je peux utiliser? Si oui, comment puis-je le configurer pour que JMX prenne en charge ehcache dans mon application?

Remarque, le "managementService" & "mbeanServer" beans sont ce que j'ai ajouté pour essayer & obtenir ehcache pour s'enregistrer avec jmx. "myCacheManager" existe déjà dans ma config de printemps & semble bien fonctionner, car ehcache seul va.

<bean id="managementService" class="net.sf.ehcache.management.ManagementService" 
     init-method="init" 
     destroy-method="dispose"> 
    <constructor-arg ref="myCacheManager"/> 
    <constructor-arg ref="mbeanServer"/> 
    <constructor-arg index="2" value="true"/> 
    <constructor-arg index="3" value="true"/> 
    <constructor-arg index="4" value="true"/> 
    <constructor-arg index="5" value="true"/> 
</bean> 
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> 
     <property name="locateExistingServerIfPossible" value="true"/> 
</bean> 
<bean id="myCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> 
    <property name="cacheManager"> 
     <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
      <property name="configLocation" value="classpath:ehcache.xml"/> 
     </bean> 
    </property> 
</bean> 

Répondre

1

Le problème est la façon dont vous branchez vos haricots.

Vous ne voulez pas utiliser myCacheManager dans le managementService, vous voulez vraiment utiliser la fève est retourné et passé comme cacheManager de myCacheManager.

Je suggère de déplacer les éléments suivants:

<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
    <property name="configLocation" value="classpath:ehcache.xml"/> 
</bean> 

à un grain de niveau supérieur afin qu'il puisse être injecté dans managementService.