Grails datasource becoming null in Service

眉间皱痕 提交于 2020-01-04 04:39:22

问题


I am using Grails 2.2.1, and I have a custom dataSource injected into the service so that I can execute some SQL queries.

Upon first execution, there is a dataSource, but on each subsequent call, the reference to the dataSource has become null.

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

Has anyone ever seen this before, and if so, how can I avoid this?

Here is my DataSource.groovy

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

回答1:


Solved avoiding 2 subsequent calls to the service. It seems the framework nulls the service connection after the first call from the controller.




回答2:


James Kleeh's comment solved it for me - grails clean and then restart the app.




回答3:


Try, to use resources.groovy way as well. This will also give you option for environment basis datasource.

Explained well on the link given below:

Grails 2 multiple dynamic datasources in services

Thanks



来源:https://stackoverflow.com/questions/18620448/grails-datasource-becoming-null-in-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!