2016-03-30 12 views
3

Ich verwende Grails 2.3.11 und Oracle DB's auf meinem Projekt.Grails - PooledConnection wurde bereits geschlossen

Ich habe ein Problem mit der Datenbank. Ausnahme:

ERROR (org.hibernate.util.JDBCExceptionReporter) - [99824F7C5386E5A40F94939FF36481FE | admin] - PooledConnection has already been closed. 

Der Fehler wird angezeigt, wenn bei den folgenden Code ausführen:

@NotTransactional 
@Cacheable 
def findSmth(String Id) { 
    //Some logic here 

    Employee.findWhere(company: company, employee: employee) 
} 

Dieses Stück Code wiederholt ausgeführt wird und ein Fehler tritt auf einige Iteration.

Hinweis: Ich verwende mehrere Datenquellen. Der Fehler tritt in der Datenbank mit der folgenden Datenquelle:

dataSource_employee_ro { 
    dbCreate = 'validate' 
    dialect = org.hibernate.dialect.Oracle10gDialect 
    driverClassName = "oracle.jdbc.driver.OracleDriver" 
    url = 'jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ****)(PORT = 2001))(FAILOVER = true)(LOAD_BALANCE = on)(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = ****)(FAILOVER_MODE = (TYPE=select) (METHOD=basic) (RETRIES=10) (DELAY=3))))' 
    username = '****' 
    password = '******' 
    readOnly = true 
    properties { 
     maxActive = 10 
     maxIdle = 5 
     minIdle = 1 
     initialSize = 8 
     testOnBorrow = true 
     testWhileIdle = true 
     testOnReturn = false 
     validationQuery = "SELECT 1 FROM dual" 
    } 
    domainSchema = '*****' 
} 

Ausnahme erscheint, auch wenn i gesetzt ‚isPooled = false‘ (es wie „Verbindung bereits geschlossen“ aussieht).

Ich kann nicht herausfinden, wie man diesen Fehler los wird. Kann mir jemand helfen? Vielen Dank.

+0

ich das gleiche Problem haben, ein Verfahren, das eine Suchabfrage funktioniert nicht mit der PooledConnection bereits geschlossenen Fehler ohne ersichtlichen Grund gewesen ist. –

Antwort

0

Ich hatte das gleiche Problem vor einer Zeit und das Problem war, weil ich eine Methode in einem Dienst ausgeführt wurde, wo der Dienst transaktional ist, und ich hatte einen anderen Thread Prozess zur Datenbank ausgeführt, so wenn die Transaktionsmethode endete Transaktionen schließt die Verbindung zur Datenbank.

Wie auch immer, ich verstehe nicht, warum Sie das nonTransactional-Tag in einer Methode findBla zur Datenbank verwenden. Diese Methode sollte von einem Service aus aufgerufen werden und sollte transaktional sein. Daher ist es nicht notwendig, sie als nichttransaktional zu kennzeichnen.

Ich hoffe, dass ich geholfen habe :)

+0

Es gibt keine Notwendigkeit, dass Suchabfragen transaktional sein müssen. Ich glaube, sie holen nur Abfragen mit einer einzigen Operation ab. –

Verwandte Themen