spring jndi NamingException: le nom n’est pas lié dans ce contexte

Mon application Web avec Spring 3.2.4 fonctionne correctement. Mais quand je le lance, j’obtiens des informations de débogage:

2014-05-20 11:11:47 DEBUG JndiTemplate:150 - Looking up JNDI object with name [java:comp/env/spring.liveBeansView.mbeanDomain] 2014-05-20 11:11:47 DEBUG JndiLocatorDelegate:101 - Converted JNDI name [java:comp/env/spring.liveBeansView.mbeanDomain] not found - trying original name [spring.liveBeansView.mbeanDomain]. javax.naming.NameNotFoundException: Name [spring.liveBeansView.mbeanDomain] is not bound in this Context. Unable to find [spring.liveBeansView.mbeanDomain]. 2014-05-20 11:11:47 DEBUG JndiTemplate:150 - Looking up JNDI object with name [spring.liveBeansView.mbeanDomain] 2014-05-20 11:11:47 DEBUG JndiPropertySource:87 - JNDI lookup for name [spring.liveBeansView.mbeanDomain] threw NamingException with message: Name [spring.liveBeansView.mbeanDomain] is not bound in this Context. Unable to find [spring.liveBeansView.mbeanDomain].. Returning null. 2014-05-20 11:11:47 DEBUG PropertySourcesPropertyResolver:81 - Searching for key 'spring.liveBeansView.mbeanDomain' in [systemProperties] 2014-05-20 11:11:47 DEBUG PropertySourcesPropertyResolver:81 - Searching for key 'spring.liveBeansView.mbeanDomain' in [systemEnvironment] 2014-05-20 11:11:47 DEBUG PropertySourcesPropertyResolver:103 - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source. Returning [null] 2014-05-20 11:11:47 DEBUG DispatcherServlet:533 - Published WebApplicationContext of servlet 'spring' as ServletContext atsortingbute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring] 

Je ne sais pas ce que veulent dire les infos. J’utilise c3p0 comme c3p0 de dataSource et la configuration est la suivante:

    /WEB-INF/config/jdbc.properties                        

Je ne trouve pas où JNDI est utilisé. J’ai quelques questions à propos de cette exception. Mais ils sont toujours associés à @Profile ou @Configuration . Il n’y a pas de @Profile ou de @Configuration dans mon code.

Dans ma classe de haricots, il n’y a pas d’annotation @Bean . Les infos sont-elles liées à cela? Mais je n’ai pas besoin de spring injecter ma classe de haricots.

si vous n’utilisez aucun profil ou mbeans , ajoutez simplement les parameters de contexte suivants au fichier web.xml comme solution de contournement (astuce), espérons que quelqu’un puisse fournir une meilleure solution que celle-ci.

  spring.profiles.active dev   spring.profiles.default dev   spring.liveBeansView.mbeanDomain dev  

Ceci est le problème JIRA et une brève explication de la raison pour laquelle il a été introduit pour la première fois au spring 3.2. En outre, vous trouverez un peu plus de détails dans la validation initiale de cette fonctionnalité.

Fondamentalement, cette fonctionnalité est un moyen d’exposer via JMX une liste en direct des beans existant dans un contexte d’application à partir d’une application donnée. Par exemple, vous avez une application Web déployée dans Tomcat et vous la passez sous la forme d’une variable d’environnement appelée spring.liveBeansView.mbeanDomain . Et disons que vous ne lui donnez aucune valeur, ou juste une chaîne vide. Spring recherche une longue liste d’emplacements possibles pour ce type de propriété et le trouve dans l’environnement système. S’il est trouvé, il saura exposer cette liste de haricots vivants (au format JSON) via JMX.

Si vous vous connectez avec JConsole à votre instance Tomcat, vous verrez une entrée appelée DefaultDomain et le nom de votre application. Si vous développez cela, il devrait y avoir un atsortingbut appelé SnapshotAsJson et ceci est la liste en direct des beans du contexte d’application de votre application Web.

Si vous aviez donné une valeur à votre variable d’environnement système, disons “test_domain”, dans JMX, l’entrée aurait été appelée test_domain et non DefaultDomain .

Vous voyez donc ces messages DEBUG car Spring recherche la propriété spring.liveBeansView.mbeanDomain dans une longue liste d’emplacements, JNDI (dans le cas des serveurs JEE) étant l’un d’entre eux.

Dans la dernière version de SpringSource Tool Suite (et peut-être dans des versions antérieures), il existe une fonctionnalité qui exploite cette exposition JMX de Live Beans appelée “Live Beans Graph” qui prend cette représentation JSON et crée une représentation graphique assez basique de celles-ci. des haricots.