gpt4 book ai didi

hibernate - 在JBoss 4.2.1.GA上的Grails下使hibernate和ehcache与READ_WRITE一起使用

转载 作者:行者123 更新时间:2023-12-02 14:05:07 28 4
gpt4 key购买 nike

我很难在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的相关代码段是:

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脚本将其删除(还删除了使其在JBoss上运行所需的日志记录jar):
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上进行此工作的最初痛苦,并且肯定不会是最后一次!

最佳答案

找到了这个问题,我实际上应该已经删除了jta-1.1.jar文件。做到了!

关于hibernate - 在JBoss 4.2.1.GA上的Grails下使hibernate和ehcache与READ_WRITE一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159515/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com