2013-03-04 6 views
9

Dopo un paio di domande vengono eseguiti sto ottenendo il seguente messaggio da Hibernate:Hibernate - La forzatura di pulizia risorsa contenitore al termine dell'operazione

HHH000106: Forcing container resource cleanup on transaction completion 

Tutto sembra funzionare bene, non ci sono errori, ma io porto Non ho trovato alcuna spiegazione su cosa significhi questo messaggio, o se dovessi fare qualcosa a riguardo.

Sto utilizzando Hibernate/JPA con transazioni globali JTA.

Qualche idea?

+0

Provare a impostare la proprietà 'hibernate.connection.release_mode' su' on_close' e ​​vedere se si sta ancora ottenendo il messaggio. – DDK

+1

ovviamente ha cercato su Google prima di fare la domanda. Non credo che stia cercando quella soluzione, potrei comunque sbagliarmi – ant

+0

Beh, sto cercando una spiegazione, non necessariamente una soluzione :) – Vedran

risposta

6

(Per completare la risposta di xwoker.)

Le risorse di cui stiamo parlando sono:

  • ResultSet
  • Dichiarazione

Questo messaggio si verifica perché hai lasciato alcune di queste risorse aperto ovvero non hai chiamato il loro metodo close(). A causa dell'attuale ConnectionReleaseMode: quelle risorse sono diventate inutili e Hibernate ti informa che sta chiamando il metodo close() per te.

Per evitare questo registro: basta chiamare il metodo close() (sul proprio ResultSet (s) e Statement (s) prima della fine della transazione.

+0

In effetti, trovato, chiuso e risolto - Posso dormire in pace ora :) – Vedran

6

Questo messaggio viene prodotto nel org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl (almeno è che l'unico posto ho trovato usato) ed è dichiarata come INFORMAZIONI:

public void afterTransaction() { 
    transactionTimeOutInstant = -1; 
    if (connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT || 
      connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION) { 
     if (hasRegisteredResources()) { 
      LOG.forcingContainerResourceCleanup(); 
      releaseResources(); 
     } 
     getLogicalConnection().aggressiveRelease(); 
    } 
} 

Se vengono utilizzati determinati ConnectionReleaseModes e vi sono risorse registrate, Hibernate informa che rilascia queste risorse.

Se questo è il comportamento desiderato, non fare nulla al riguardo.

1

Questo messaggio di registro HHH000106: Forcing container resource cleanup on transaction completion può essere attivato anche da problemi di sicurezza del thread, se le sessioni di Hibernate vengono accidentalmente condivise tra diversi thread (e quindi transazioni diverse). In tal caso, potrebbe essere seguito da un'eccezione come Trying to return an unknown connection2! e dalla perdita di una connessione JDBC dal pool di connessioni.

Problemi correlati