복붙노트

[SPRING] Spring jndi NamingException : 이름 [spring.liveBeansView.mbeanDomain]가이 Context 내에서 바인드되어 있지 않은 경우

SPRING

Spring jndi NamingException : 이름 [spring.liveBeansView.mbeanDomain]가이 Context 내에서 바인드되어 있지 않은 경우

봄 3.2.4 내 webapp 잘 실행 중입니다. 하지만 내가 시작할 때 디버그 정보를 얻을 것이다.

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]

나는 정보가 무엇을 의미하는지 모른다. 내 데이터 원본으로 c3p0을 사용하고 구성은 다음과 같습니다.

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

JNDI가 사용되는 곳을 찾을 수 없습니다.이 예외에 대한 몇 가지 질문을 검색했습니다. 하지만 항상 @Profile 또는 @Configuration과 연결됩니다. 내 코드에는 @Profile 또는 @Configuration이 없습니다.

내 bean 클래스에는 @Bean 어노테이션이 없다. 관련 정보가 관련이 있습니까? 하지만 나는 봄 수업에 콩을 넣을 필요가 없다.

해결법

  1. ==============================

    1.프로필이나 mbeans를 사용하지 않는 경우 web.xml에 다음 컨텍스트 매개 변수를 해결 방법 (트릭)으로 추가하십시오. 누군가가이 못생긴 솔루션보다 더 나은 솔루션을 제공 할 수 있기를 바랍니다.

    프로필이나 mbeans를 사용하지 않는 경우 web.xml에 다음 컨텍스트 매개 변수를 해결 방법 (트릭)으로 추가하십시오. 누군가가이 못생긴 솔루션보다 더 나은 솔루션을 제공 할 수 있기를 바랍니다.

    <context-param>  
        <param-name>spring.profiles.active</param-name>  
        <param-value>dev</param-value>  
    </context-param>  
    <context-param>  
        <param-name>spring.profiles.default</param-name>  
        <param-value>dev</param-value>  
    </context-param>
    <context-param>  
        <param-name>spring.liveBeansView.mbeanDomain</param-name>  
        <param-value>dev</param-value>  
    </context-param>  
    
  2. ==============================

    2.이것이 Spring 3.2에서 처음 소개 된 이유에 대한 간단한 설명입니다. 또한이 기능에 대한 초기 커밋에서 조금 더 자세하게 찾을 수 있습니다.

    이것이 Spring 3.2에서 처음 소개 된 이유에 대한 간단한 설명입니다. 또한이 기능에 대한 초기 커밋에서 조금 더 자세하게 찾을 수 있습니다.

    기본적으로이 기능은 JMX를 통해 특정 애플리케이션의 애플리케이션 컨텍스트에 존재하는 Bean의 라이브 목록을 노출하는 방법입니다. 예를 들어 Tomcat에 웹 응용 프로그램을 배포하고 시작할 때 spring.liveBeansView.mbeanDomain이라는 환경 변수로 웹 응용 프로그램을 전달합니다. 그리고 값을주지 않거나 빈 문자열 만 전달한다고 가정 해 봅시다. Spring은 이러한 종류의 속성에 대한 가능한 위치의 긴 목록을 검색하고 시스템 환경에서 찾을 수 있습니다. 발견 된 경우 JMX를 통해 JSON 형식의 라이브 빈 목록을 노출한다는 것을 알 수 있습니다.

    JConsole과 Tomcat 인스턴스를 연결하면 DefaultDomain이라는 항목이 표시되고 그 아래에 응용 프로그램 이름이 표시됩니다. 확장하면 SnapshotAsJson이라는 속성이 있어야하며 이는 웹 응용 프로그램 컨텍스트의 Bean 라이브 목록입니다.

    시스템 환경 변수에 값을 주었으면 JMX에서 "test_domain"이라고 가정 해 봅시다.이 항목은 DefaultDomain이 아니라 test_domain이라고합니다.

    Spring은 기본적으로 JNDI (JEE 서버의 경우) 중 하나 인 긴 위치 목록에서 spring.liveBeansView.mbeanDomain 속성을 검색하기 때문에 기본적으로 해당 DEBUG 메시지가 표시됩니다.

    SpringSource Tool Suite의 최신 버전 (그리고 이전 버전의 일부)에는 "Live Beans Graph"라는 라이브 Bean JMX 노출을 사용하여 JSON 표현을 사용하고 그 중 일부를 그래픽으로 표현하는 기능이 있습니다 콩.

  3. from https://stackoverflow.com/questions/23750619/spring-jndi-namingexception-name-spring-livebeansview-mbeandomain-is-not-boun by cc-by-sa and MIT license