2016-03-30 3 views
3

Я использую grails 2.3.11 и Oracle DB в моем проекте.Grails - PooledConnection уже закрыт

У меня проблема с базой данных. Исключение:

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

Ошибка появляется, когда при выполнении следующего кода:

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

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

Этот фрагмент кода выполняется несколько раз, и ошибка происходит на некоторой итерации.

Примечание: я использую несколько источников данных. Ошибка возникает в базе данных со следующим источником данных:

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 = '*****' 
} 

Исключение возникает даже тогда, когда я установить «isPooled = ложь» (она выглядит как «соединение уже закрыто»).

Я не могу понять, как избавиться от этой ошибки. Может ли кто-нибудь мне помочь? Благодарю.

+0

У меня такая же проблема, метод, который делает запрос найти не удается с PooledConnection уже закрыта ошибкой без какой-либо очевидной причины. –

ответ

0

У меня была такая же проблема, и проблема была в том, что я запускал метод в службе, где служба транзакционная, и у меня был другой поток, выполняющийся в базе данных, поэтому, когда транзакционный метод закончился, транзакции закрывают соединение с db.

В любом случае, я не понимаю, почему вы используете тег nonTransactional в методе findBla в базе данных. Этот метод следует вызывать из службы, и он должен быть транзакционным. Поэтому нет необходимости отмечать его как не транзакционное.

Я надеюсь, что я помог :)

+0

Не нужно, чтобы поисковые запросы были транзакционными. Я считаю, что они только запрашивают запросы с помощью одной операции. –

Смежные вопросы