2009-09-18 3 views
0

안녕하세요 난 아직도 org.enhydra.jdbc.pool.PoolKeeper 왼쪽 참조가로 끝나지하는 간단한 Spring 애플리케이션을 모두. 나는 아래에 계시 된 모든 참고 자료를 포함 시켰습니다. 괜찮은 것처럼 보이고 전에 경험 한 사람이 있습니까? Java Spring 데이터베이스 응용 프로그램은 org.enhydra.jdbc.pool.PoolKeeper에 대한 참조를 종료하지 않습니다. 왜 여전히 활성입니까?

나는 비 데몬 스레드가 실행되는 곳을 확인하려면 jstack을 실행하고 다음을 발견했다.

"Thread-1" prio=10 tid=0x00007f89b03d8000 nid=0x755 in Object.wait() [0x00007f89bc243000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) 
    - waiting on <0x00007f89ec57de00> (a org.enhydra.jdbc.pool.PoolKeeper) at org.enhydra.jdbc.pool.PoolKeeper.run(PoolKeeper.java:55) 
    - locked <0x00007f89ec57de00> (a org.enhydra.jdbc.pool.PoolKeeper) at java.lang.Thread.run(Thread.java:619) 

지금 난 내 JPA 구성의 관련 부분

<bean id="innerDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" 
    destroy-method="shutdown"> 
    <property name="transactionManager" ref="jotm" /> 
    <property name="driverName" value="${jdbc.driverClassName}"/> 
    <property name="url" value ="${jdbc.url}"/> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 
<bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" 
    destroy-method="shutdown"> 
    <property name="dataSource" ref="innerDataSource"/> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <property name="maxSize" value="100" /> 
    <!-- test your jdbc connection before using it --> 
    <property name="checkLevelObject" value="${jdbc.checkLevelObject}"/> 
    <property name="jdbcTestStmt" value="${jdbc.jdbcTestStmt}"/> 
</bean> 

감사 폴

답변

1

웹 응용 프로그램은 일반적으로 웹 응용 프로그램이 중지 될 때 응용 프로그램 컨텍스트를 닫 ContextLoaderListener를 사용하여 Spring 애플리케이션 컨텍스트를 구성합니다.

독립형 Java 응용 프로그램은 콩을 파괴하면서 destroy-method 속성에 구성된 메소드를 호출 응용 프로그램 컨텍스트에 close 메소드를 호출해야합니다. 또는 registerShutdownHook 메소드를 호출하여 JVM 종료시 응용 프로그램 컨텍스트를 닫는 종료 훅을 등록하십시오. 제안 기쁨에 대한

+0

덕분에 짐 나는 가까운 방법을 찾고 있었어요하지만 난이 (가)의 ApplicationContext에서 ClassPathXmlApplicationContext 아닌 ConfigurableApplicationContext를 저장되면서 나는 방법을 본적이 없어요. –

0

귀하의 봄 파일이 enhydra에 따라 나에게 올바른 모양을 포함 왜 이런 일이에 같은 혼란 스러워요 javadoc (세부 사항에 드문 드문). API에서 stopPool() 메서드를 보았습니다. 아마도 귀하의 destroy-method에서 시도해보십시오.

+0

감사합니다. –

관련 문제