【发布时间】:2016-05-29 06:32:18
【问题描述】:
我创建了一个简单的 grails 3 应用程序。我正在尝试将它连接到数据源配置中的 Oracle 数据库。
当我跑步时
SELECT * FROM V$VERSION
在sql developer中,返回关于我的数据库的以下数据。
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
我的 application.yml 文件如下所示:
dataSources:
dataSource:
pooled: true
dialect: org.hibernate.dialect.Oracle10gDialect
driverClassName: 'oracle.jdbc.OracleDriver'
username: 'superCool'
password: 'password'
url: 'jdbc:oracle:thin:@127.0.0.1:1521:coolio'
dbCreate: ''
我的 build.gradle 文件包含这些用于 hibernate 和 oracle 依赖项的行。
dependencies {
(...)
compile "org.grails.plugins:hibernate:4.3.10.5"
(...)
compile "org.hibernate:hibernate-ehcache"
compile("com.oracle:ojdbc7:12.1.0.2")
}
我的服务文件如下:
class DatabaseService {
DataSource dataSource
public void testMyDb(User user) {
try {
registerUser(new Sql(dataSource), user)
} catch (SQLException e) {
LOGGER.error("unable to register the user", e)
throw e
}
}
public void registerUser(Sql sql, User user) {
sql.call("{call isertUser(?)}", [user.name])
}
如果我删除了
compile "org.grails.plugins:hibernate:4.3.10.5"
从 build.gradle,我可以运行我的集成测试并成功访问数据库。如果我把它放在那里,我会收到以下错误:
ERROR DatabaseService - unable to register the user
java.sql.SQLRecoverableException: Closed Connection
at oracle.jdbc.driver.PhysicalConnection.getAutoCommit(PhysicalConnection.java:2254) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
更新 1:
我更新了我的 build.gradle 文件以引用
compile("com.oracle:ojdbc6:11.2.0.2")
相对于
compile("com.oracle:ojdbc7:12.1.0.2")
现在生成的错误指的是setter:
ERROR DatabaseService - unable to register the user
java.sql.SQLRecoverableException: Closed Connection
at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnection.java:2254) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
更新 2:
我捕获了 SQLException 并从中获取了 sql 错误代码。返回的代码:08003。根据https://docs.oracle.com/cd/E15817_01/appdev.111/b31228/appd.htm,
08003 - connection does not exist
所以此时,我在数据源中将 pooled 标志设置为 false,一切正常。所以这里的问题缩小到了这个范围。该插件对汇集的属性反应不佳。
我已发出以下 sql 命令来计算我的池的大小:
SELECT name, value FROM v$parameter WHERE name = 'sessions';
返回 1524。
我也发出了sql命令查看当前分配的金额:
SELECT COUNT(*) FROM v$session;
返回 58。
我想现在的问题是,是什么导致了集合财产的疯狂。
【问题讨论】:
-
您是否尝试过另一个休眠版本?例如较新的:
compile "org.grails.plugins:hibernate4:5.0.0.RC1"?甚至降级到最新的 Hibernate3:runtime "org.grails.plugins:hibernate:3.6.10.19"? -
@majkelo 刚刚尝试了您的建议,但似乎没有解决任何问题。同样的错误:/
-
在重新启动和检查每个依赖项之前,您是否
grails clean和grails compile --non-interactive --refresh-dependencies? -
而且
registerUser(Sql sql, User user)函数中没有错字:call isertUser->call insertUser -
我最初进行了定期清理和编译。我执行了你所说的那个,它导致了大约 30 个错误,其中最主要的是在使用降级版本时无法启动嵌入式应用服务器。
标签: oracle hibernate grails gradle oracle11g