【问题标题】:Getting hibernate & ehcache to work with READ_WRITE under Grails on JBoss 4.2.1.GA在 JBoss 4.2.1.GA 上的 Grails 下让 hibernate 和 ehcache 与 READ_WRITE 一起工作
【发布时间】:2011-05-08 18:05:34
【问题描述】:

我很难为在 Grails 下工作的休眠获取二级缓存。

所以我有一个使用 Grails 1.3.5 的应用程序,它要部署在 JBoss 4.2.1.GA 上。

应用服务器的选择不是我的,所以很遗憾无法更改/升级。

原来我只是简单的开启二级和查询缓存并将提供者设置为EhCache。

然后我的查询和实体被适当地标记为缓存,我正在使用 READ_WRITE 策略,因为它们会随着时间而改变。

当我将 Web 应用程序部署到 JBoss 并启动它时,会输出以下警告:

21:24:36,585 INFO [TransactionManagerLookupFactory] ​​未配置 TransactionManagerLookup(在 JTA 环境中,不建议使用读写或事务二级缓存)

现在这确实导致了一个真正的问题。我有一个数据导入服务,它将在单个事务中更新系统中的几乎每个实体。运行可能需要一些时间,但在进程提交之前我不会显示编辑。

现在,当在 tomcat 中以开发模式(即 grails run-app)运行时,这可以正常工作。

但是在 JBoss 中,编辑一旦在缓存中进行就可以使用,而不是在事务提交时。

我假设这是因为上面显示的 JTA 环境警告。

现在我尝试通过为休眠添加事务工厂类和查找管理器来解决此问题。

DataSource.groovy 中的相关 sn-p 是:

hibernate {
    generate_statistics=true
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}

environments {

    ...

    production {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop','update'
            url = "jdbc:mysql://localhost:3306/myschema"
            driverClassName = "com.mysql.jdbc.Driver" 
            username = "root"
            password = "password"
    }
    hibernate {
        transaction.factory_class = "org.hibernate.transaction.JTATransactionFactory"
        transaction.manager_lookup_class = "org.hibernate.transaction.JBossTransactionManagerLookup"
    }
}

}

问题是当我现在尝试部署应用程序时,我得到了这个 ClassCastException:

原因:org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错:设置bean属性“sessionFactory”时无法解析对bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.ClassCastException: com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate 不能转换为 javax.transaction.TransactionManager ... 129 更多

现在我有一个 google,有人建议这是由于在 web 应用程序中包含 jta.jar 引起的。

所以我使用 BuidConfig.groovy 文件中的这个 groovy 脚本删除了它(也删除了日志 jar,需要让它在 JBoss 上运行):

grails.war.resources = {stagingDir ->
    // Extra Libraries to remove
    def toRemove = ["$stagingDir/WEB-INF/lib/log4j-1.2.15.jar",
    "$stagingDir/WEB-INF/lib/slf4j-log4j12-1.5.8.jar",
    "$stagingDir/WEB-INF/lib/slf4j-api-1.5.8.jar",
    "$stagingDir/WEB-INF/lib/jta.jar"].each {
        delete(file: it)
    }
}

但是这不起作用,我得到了完全相同的错误。

我们将不胜感激地接受任何帮助。花了很长时间在谷歌上搜索,但没有成功。这不是我在 JBoss 上工作时遇到的第一次痛苦,我相信这不会是最后一次!

【问题讨论】:

    标签: hibernate grails jboss ehcache


    【解决方案1】:

    发现了这个问题,我实际上应该删除了jta-1.1.jar文件。成功了!

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2011-04-08
      • 2015-08-10
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2018-08-19
      相关资源
      最近更新 更多