Frühjahr jndi NamingException: Name [Frühling.liveBeansView.mbeanDomain] ist nicht verpflichtet, die in diesem Zusammenhang
Meine webapp mit spring 3.2.4 läuft gut. Aber wenn ich starte es, bekomme ich die debug-infos:
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 attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring]
Ich weiß nicht, was die infos bedeuten. Ich benutze c3p0
als meine dataSource
, und die Konfiguration ist:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/config/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="autoCommitOnClose" value="true"/>
<property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/>
<property name="initialPoolSize" value="${cpool.minPoolSize}"/>
<property name="minPoolSize" value="${cpool.minPoolSize}"/>
<property name="maxPoolSize" value="${cpool.maxPoolSize}"/>
<property name="maxIdleTime" value="${cpool.maxIdleTime}"/>
<property name="acquireIncrement" value="${cpool.acquireIncrement}"/>
<property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg ref="jdbcTemplate" />
</bean>
Ich kann nicht finden, wo JNDI
verwendet wird. Ich Suche einige Fragen zu dieser Ausnahme. Aber Sie sind immer im Zusammenhang mit @Profile
oder @Configuration
. Es gibt keine @Profile
oder @Configuration
in meinem code.
In meinem bean-Klasse, es gibt keine @Bean
annotation. Die infos zu diesem Zusammenhang? Aber ich muss nicht Frühling Spritzen meine bean-Klasse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie keine profile oder mbeans, fügen Sie einfach folgenden Kontext-params der web.xml als workaround (trick), hoffentlich gibt es jemand der eine bessere Lösung als diese hässliche.
[artifact:mvn] DEBUG: org.springframework.core.env.PropertySourcesPropertyResolver - Searching for key 'spring.liveBeansView.mbeanDomain' in [servletConfigInitParams] [artifact:mvn] DEBUG: org.springframework.core.env.PropertySourcesPropertyResolver - Searching for key 'spring.liveBeansView.mbeanDomain' in [servletContextInitParams] [artifact:mvn] DEBUG: org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.liveBeansView.mbeanDomain' in [servletContextInitParams] with type [String] and value 'dev'
Dies ist die JIRA-issue und eine kurze Erläuterung darüber, warum es eingeführt worden, erstmals im Frühjahr 3.2. Auch, ein bisschen mehr details finden Sie in der initial commit für diese Funktion.
Grundsätzlich, diese Funktion es ist ein Weg, zu setzen über JMX eine live-Liste der Bohnen, die es in einer Anwendung, die den Kontext einer bestimmten Anwendung. Zum Beispiel, Sie haben eine webapp bereitgestellt Tomcat und beim starten es Sie übergeben, um es als ein Umgebungsvariable-man nannte
spring.liveBeansView.mbeanDomain
. Und angenommen, Sie geben Sie es nicht jeden beliebigen Wert, oder einfach nur einen leeren String. Frühling, um sich nach einer langen Liste von möglichen Standorten für diese Art der Eigenschaft und es ist, es zu finden, in der system-Umgebung. Wenn es gefunden wurde wird es wissen verfügbar machen, die Liste der live-Bohnen (im JSON-format) über JMX.Wenn Sie die Verbindung mit JConsole, um Ihre Tomcat-Instanz, die Sie werden sehen, einen Eintrag namens
DefaultDomain
und unter Ihrer Anwendung Namen. Wenn Sie erweitern, dass es ein Attribut namensSnapshotAsJson
- und dies ist die live-Liste Bohnen aus Ihre webapp ist der Anwendungskontext.Wenn Sie würde haben einen Wert erhalten, um Ihre system-environment-variable, sagen wir mal "test_domain", in der JMX-würde der Eintrag aufgerufen wurden
test_domain
und nichtDefaultDomain
.So, im Grunde sind, sehen diese DEBUG-Meldungen, weil der Frühling sucht
spring.liveBeansView.mbeanDomain
Eigenschaft in eine lange Liste von Orten, JNDI (im Falle von JEE-Servern) ist einer von Ihnen.In der neuesten version der SpringSource Tool Suite (und vielleicht in einigen früheren), ist ein feature, dass macht sich diese live-beans JMX-Exposition namens "Live Beans Graph", der das JSON-Repräsentation und erzeugt eine etwas einfache grafische Darstellung der Bohnen.