aplicação de banco de dados primavera Java não vai sair referência a org.enhydra.jdbc.pool.PoolKeeper ainda está ativo por quê?

StackOverflow https://stackoverflow.com/questions/1445503

Pergunta

Olá a todos Eu tenho um aplicativo Primavera simples, que não vai acabar como ainda é uma referência para a esquerda para org.enhydra.jdbc.pool.PoolKeeper. I incluem todas as referências que eu sinto são revelant abaixo ele se parece ok e ninguém tem experimentado isso antes?

Eu corri jstack para ver o que tópicos não daemon onde correr e encontrou o seguinte.

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

Agora estou confuso sobre o porquê isso está acontecendo I incluem partes relevantes do meu JPA configuração

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

Graças Paul

Foi útil?

Solução

aplicações Web normalmente configurar um contexto de aplicativo Spring usando ContextLoaderListener , que fecha o contexto de aplicação quando a aplicação web está parado.

aplicações Standalone Java tem que chamar o close método no contexto de aplicação, o qual invoca os métodos configurados no atributo destroy-method ao destruir os feijões. Alternativamente, ligue para o registerShutdownHook método para registrar um gancho de desligamento que fecha o contexto de aplicação na JVM desligamento.

Outras dicas

Seus olhares de arquivo Primavera corrigir para mim baseado no javadoc enhydra (que é escassa em detalhes). Eu vi um método stopPool() na API. Talvez tente isso em sua destroy-method?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top