オブジェクトを更新するだけのコントローラーがあります。
def obj = Table.find(...)
obj.state = "END"
if(!obj.save(flush:true)) ...
// Session flushing does not help too.
// I am able to fetch that object again here but it is never persisted to DB
Debian にデプロイされた場合、エラーは報告されていませんが (手動チェックでも によっても) 、オブジェクトは実際には永続failOnError
化されません。しかし、ローカルの Windows マシンにデプロイすると、オブジェクトは正しく永続化されます。両方のマシンが同じ DB に接続されています。
をサービスに移動するsave
か、カバーすることwithTransaction
が回避策です。はい、DB を扱うにはサービスの方が適していることはわかっています。代わりに、このような一貫性のない問題のある動作の原因 (およびそれを 1 か所で修正する方法) を見つけるのは興味深いことです。または、コントローラーでそのようなことを行うことは設計上禁止されていますか?
Grails 2.1.1、トムキャット
からの抜粋DataSource.groovy
:
dataSource {
driverClassName = "oracle.jdbc.driver.OracleDriver"
dialect = org.hibernate.dialect.Oracle10gDialect
pooled = true
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}