2013-09-04 2 views
3

Я использую Grails 2.2.1, и у меня есть пользовательский источник данных, введенный в службу, чтобы я мог выполнять некоторые SQL-запросы.Grails datasource становится нулевым в службе

При первом выполнении имеется источник данных, но при каждом последующем вызове ссылка на источник данных стала нулевой.

class ReportService { 
    def dataSource_myds 

    Object[] reportRecords(int a) { 
    String query = "SELECT ..." 

    Object[] resultSet; 

    Sql sql = new Sql(dataSource_myds) 
    //^Here the NullPointerException is thrown 
    // But it always works at the first execution 

    sql.eachRow(query, [a]) { 
     ... 
     resultSet += result 
    } 
    return resultSet 
    } 
} 

class ReportController { 
    ReportService reportService 

    def report = { 
    ... 
    Object[] resultSet1 = reportService.reportRecords(1) 
    ... 
    Object[] resultSet2 = reportService.reportRecords(2) 
    //^java.lang.NullPointerException : Must specify a non-null Connection 
    ... 
    } 
} 

Кто-нибудь когда-либо видел это раньше, и если да, то как я могу избежать этого?

Вот мой DataSource.groovy

environments { 
    development { 
    dataSource_myds { 
     url = "jdbc:oracle:thin:@..." 
     driverClassName = "oracle.jdbc.driver.OracleDriver" 
     username = "..." 
     password = "..." 
    } 
    } 
} 
+0

Попробуйте вызвать 'sql.close()' после метода 'sql.eachRow()'. – grantmcconnaughey

+0

ReportService reportService в ReportController должен быть def reportService может не повлиять на ваш прецедент. –

+0

@AnujAneja Я не думаю, что что-то не так с строго типизированными полями. – micha

ответ

0

Try, чтобы использовать resources.groovy, как хорошо. Это также даст вам возможность для источника данных на основе среды.

Разъяснения также по ссылке, приведенной ниже:

Grails 2 multiple dynamic datasources in services

Благодаря

1

решаемые избегая 2 последующие вызовы службы. Кажется, что структура завершает соединение службы после первого вызова от контроллера.

+1

У меня такая же проблема - если я понимаю вашу заметку здесь, вы просто обошли ее, не делая 2 последующих звонка? Так действительно не решение исходной проблемы? Я надеюсь найти полное решение. – ETL

+0

Да, это было обходным путем; Я не нашел полного решения, и я до сих пор не понимаю, как работает инъекция зависимостей службы при последующих вызовах. – pinei

+0

См. Мой ответ от 21 сентября и комментарий Джеймса Клее на ваш вопрос для полного решения. – ETL

1

Комментарий Джеймса Клееха разрешило его для меня - grails clean, а затем перезагрузите приложение.

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