2014-10-27 23 views
0

我是Grails新手。要連接數據庫只需更改用戶名和密碼,請在dataSource.groovy文件中添加表名。代碼如下:在Grails中遇到困難的初學者

Line | Method 
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 166 | run  in java.util.concurrent.FutureTask 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 
Caused by BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.ehcache.EhCacheRegionFactory] 
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 166 | run  in java.util.concurrent.FutureTask 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 
Caused by BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.ehcache.EhCacheRegionFactory] 
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 166 | run  in java.util.concurrent.FutureTask 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 
Caused by HibernateException: could not instantiate RegionFactory [org.hibernate.cache.ehcache.EhCacheRegionFactory] 
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 166 | run  in java.util.concurrent.FutureTask 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 
Caused by ClassNotFoundException: org.hibernate.cache.ehcache.EhCacheRegionFactory 
->> 156 | findClass in org.codehaus.groovy.tools.RootLoader 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 423 | loadClass in java.lang.ClassLoader 
| 128 | loadClass in org.codehaus.groovy.tools.RootLoader 
| 356 | loadClass in java.lang.ClassLoader 
| 186 | forName . in java.lang.Class 
| 334 | innerRun in java.util.concurrent.FutureTask$Sync 
| 166 | run . . . in java.util.concurrent.FutureTask 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run  in java.lang.Thread 

回答

1

的問題是在這條線:

Caused by ClassNotFoundException: org.hibernate.cache.ehcache.EhCacheRegionFactory 

當事情在Grails的繁榮中,你往往會得到相當大的堆棧軌跡,可以隱藏真正的問題。就像那個一樣大,它可能只是真正堆棧的10-20%,因爲默認情況下會排除許多明顯無用的堆棧幀。但總的來說,你會經常看到一連串的例外情況,除了導致當前顯示在下面的例外。所以最好從頭到尾閱讀,因爲這通常是核心問題。

我不知道爲什麼ehcache依賴將會丟失 - 你在BuildConfig.groovy中排除它嗎?你可以添加一個依賴:

dependencies { 
    ... 
    compile 'net.sf.ehcache:ehcache-core:2.4.8' 
} 

看看是否有幫助。

編輯

其實沒有 - 這不是問題,因爲它是引用一個Hibernate類,它使用的Ehcache,不是的Ehcache類的工作。所以這是一個Hibernate v3/v4問題。 Grails現在默認使用Hibernate 4.x,但包含使用Hibernate 3.x的配置設置。你顯然在BuildConfig中轉換到了Hibernate 3。常規,但在DataSource.groovy沒有更新數據源配置 - 註釋掉

cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4 

,並用這個來代替:

cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3 
-1

newbee:

dataSource { 
    pooled = true 
    jmxExport = true 
    driverClassName = "com.mysql.jdbc.Driver" 
    dialect = "org.hibernate.dialect.MySQLDialect" 
    username = "root" 
    password = "" 
} 
hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
// cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3 
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4 
    singleSession = true // configure OSIV singleSession mode 
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context 
} 

// environment specific settings 
environments { 
    development { 
     dataSource { 
      url = "jdbc:mysql://localhost/user" 
      username = "root" 
      password = "" 
     } 
    } 
    test { 
     dataSource { 
      url = "jdbc:mysql://localhost/user_prod" 
      username = "root" 
      password = "" 
     } 
    } 
    production { 
     dataSource { 
      dbCreate = "update" 
      url = "jdbc:mysql://localhost/user_prod" 
      username = "root" 
      password = "" 
     } 
    } 
} 

點擊Run As按鈕面臨着以下錯誤後。 歡迎來到Grails

您的問題/ s的情況如下,你必須採取

你看到這個錯誤來自不同勢的原因措施:

transactionManager的,sessionfactroy

。請確保您首先運行MySQL實例,並確保您的端口也在運行。

2.檢查密碼和用戶名是否正確,並且可以連接到mysql控制檯。

確保(UserProd)MySQL數據庫存在,

檢查此設置緩存,恢復,如果uhave改變任何東西圍在那裏?

cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' //休眠4

+0

這是你檢查時,有一個連接問題都通用的東西,但沒有這涉及到他的堆棧跟蹤 – 2014-10-27 09:27:35

+0

@BurtBeckwith先生,可能是cache.region.factory_class ='org.hibernate.cache.ehcache.EhCacheRegionFactory'// Hibernate 4 thing – danielad 2014-10-27 09:29:46