grails暗黑3有没有插件websphere的插件

记一次因插件版本冲突导致的部署失败 - 推酷
记一次因插件版本冲突导致的部署失败
几天前一个新项目在Tomcat上的部署,看似非常常规的流程却出了很多问题,本文将重现这次所遇到的问题并加以总结。
第一次部署到Tomcat上,失败,日志中有报错。其实这段时间在本机的开发环境下就遇到了一个现象:运行完grails clean后,需连续执行两次grails run-app才能将项目运行起来,但是终端没有显示任何错误信息,一直也就没有留意这个现象。这时,才察觉会不会就是因为这个现象中的问题才不能正常部署,此刻也才想到查看本机的log,原来在clean后第一次run-app时一直有异常抛出,且与现在Tomcat上的错误相同:
ERROR context.GrailsContextLoader
- Error initializing the application: Error creating bean with name 'instanceTagLibraryApi': Injection of autowired nested
exception is org.springframework.beans.factory.BeanCreationException: Could not autowire
method: public void org.codehaus.groovy.grails.plugins.web.api.TagLibraryApi.setGspTagLibraryLookup
(org.codehaus.groovy.grails.web.pages.TagLibraryLookup); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'gspTagLibraryLookup': Invocation o nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib': Injection of autowired
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.codehaus.groovy.grails.web.mapping.LinkGenerator
org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib.linkG nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with
'grailsLinkGenerator': Post-processing failed of bean type [class
org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'instanceTagLibraryApi': Injection of autowired nested exception is
org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.codehaus.groovy.grails.plugins.web.api.TagLibraryApi.setGspTagLibraryLookup
(org.codehaus.groovy.grails.web.pages.TagLibraryLookup); nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'gspTagLibraryLookup': Invocation o nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib': Injection of autowired
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.codehaus.groovy.grails.web.mapping.LinkGenerator
org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib.linkG nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'grailsLinkGenerator': Post-processing failed of bean type [class
org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is
java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method:
public void org.codehaus.groovy.grails.plugins.web.api.TagLibraryApi.setGspTagLibraryLookup
(org.codehaus.groovy.grails.web.pages.TagLibraryLookup); nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'gspTagLibraryLookup': Invocation o
nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib':
Injection of autowired nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.codehaus.groovy.grails.web.mapping.LinkGenerator
org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib.linkG nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'grailsLinkGenerator': Post-processing failed of bean type [class
org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is
java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
... 5 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with
name 'gspTagLibraryLookup': Invocation o nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib': Injection of autowired
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.codehaus.groovy.grails.web.mapping.LinkGenerator org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib.linkG nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsLinkGenerator': Post-processing failed of bean type [class org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
... 5 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib': Injection of autowired nested exception is org.springframework.beans.factory.BeanCreationException: Could not
autowire field: private org.codehaus.groovy.grails.web.mapping.LinkGenerator org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib.linkG nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsLinkGenerator': Post-processing failed of bean type [class org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
... 5 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.codehaus.groovy.grails.web.mapping.LinkGenerator org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib.linkG nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsLinkGenerator': Post-processing failed of bean type [class org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
... 5 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsLinkGenerator': Post-processing failed of bean type [class org.codehaus.groovy.grails.web.mapping.CachingLinkGenerator] nested exception is java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to java.lang.annotation.Annotation
... 5 more
Caused by: java.lang.ClassCastException: sun.proxy.$Proxy26 cannot be cast to
java.lang.annotation.Annotation
... 5 more
这个异常以前没有遇到过,在Google的帮助下,找到了两种方式解决:
通过grails -noreloading run-app的方式启动:这样虽然可以避免这个异常的产生,但却是一个治标不治本的方法。
删除~/.grails/2.2.0/.slcache这个文件夹:其实这个问题就是由于缓存引起的,只要将缓存清空后,这个问题就解决了。
此时,开发环境下已经可以正常启动了,也没有任何异常抛出,就用了同样的方法清空了服务器上的缓存。本机都通过了,这次该不会出问题了吧?可就在满心欢喜的等待部署成功时,又一次华丽丽的失败了,查看Tomcat上的log,报了以下错误:
18:19:42,233 [pool-2-thread-1] ERROR context.ContextLoader
initialization failed
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'pluginManager' defined in ServletContext resource
[/WEB-INF/applicationContext.xml]: Invocation o nested exception is java.lang.RuntimeException: Unable to locate constructor with
Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
... 6 more
Caused by: java.lang.reflect.InvocationTargetException
... 6 more
18:19:42,238 [pool-2-thread-1] ERROR context.GrailsContextLoader
initializing the application: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation o
nested exception is java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation o nested exception is java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
18:19:42,243 [pool-2-thread-1] ERROR context.GrailsContextLoader
- Error initializing Grails: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEBINF/applicationContext.xml]: Invocation o nested exception is java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation o nested exception is java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.RuntimeException: Unable to locate constructor with Class parameter
for class grails.plugins.quartz.DefaultGrailsJobClass
... 6 more
Caused by: java.lang.reflect.InvocationTargetException
... 6 more
很显然,没有找到grails.plugins.quartz.DefaultGrailsJobClass这个类,第一反应就是这个是Quartz插件的问题,为了验证这个想法,我将定时任务的相关代码注释掉,果然部署就成功了,但是这样也不能解决问题,这只是完成了部署,代价是好多功能不能正常执行,显然是不对的。
会不会是调用的方式有问题呢?于是又翻查了Quartz的官网文档,看看有没有书写错误的地方,代码书写均正确,只是官方的Quartz插件版本升级到了1.0.1,那会不会是上一个版本自身存在的bug呢?于是我就更换了最新版本的Quartz插件,但是依旧报错。
为什么在本机上没有报错,到了生产服务器上就有问题,插件的使用也没有错,此时我又将希望寄托在了Google君身上,可是结果不尽人意,只是有人说可能是Quartz插件的版本冲突了,这下我就疑惑了,本机的~.grails/ivy-cache/org.grails.plugin下只查看到了一个版本的quartz插件就是quartz-1.0.1,而它有依赖quartz-2.2.1,总不会它自己引用的版本冲突了吧?如果是这样那这个插件本身就存在问题,那怎么还会有这么多的人使用呢?谁能想到,解决方法就这样被我忽略了!
很长时间没有找到解决方法,已经打算放弃了。这时身边同事告诉我可能是插件的版本冲突了,也许其他的插件也依赖了Quartz并且版本还不一样,这时我又有疑问了,既然依赖了,那为什么我一直没有发现有其他版本的存在呢?同事提醒我,可以看看打的war包下有没有不同版本的Quartz,果然,在应用的war包下,有两个不同版本的Quartz包,看来有戏。下来就是指定打包的时候仅保留一个高版本的Quartz包,处理方法是在BulidConfig中添加如下代码:
grails.war.resources = { stagingDir -&
delete(file:&${stagingDir}/WEB-INF/lib/quartz-1.6.1.jar&)
这样在打war的时候就可以去掉冲突的依赖quartz-1.6.1.jar。
OK,部署成功了,问题搞定!我也从中吸取了教训:
在run-app的时候打开log,可以及早的发现异常,有小的异常及时修正,不要觉得不影响目前的开发就放任不管。
再有类似疑似版本冲突的问题,可能在开发环境下不方便排查冲突,因为我们并不知道哪些插件会同时依赖一个插件从而引起版本的冲突,这时我们就可以先打war包,在war下的WEB-INF/lib中会有项目所需的所有的jar,就可以清楚的查看有没有冲突了。
有时新安插件或新创建类后,run的时候就会报出莫名奇妙的异常,这时我们可以先尝试grails clean,如果还不能解决问题,我们可以试图将~/.grails/2.2.0/.slcache和~/.grails/2.2.0/project/项目 删除,很多时候认为是天大的问题可能只是需要将缓存清理后就没有了。
生产环境比开发环境要求更严格,不要想当然的认为开发环境下OK,生产环境下亦OK。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Grails中MyBatis插件的批改 - 人工智能当前位置:& &&&Grails中MyBatis插件的批改Grails中MyBatis插件的批改&&网友分享于:&&浏览:49次Grails中MyBatis插件的修改
Grails通过命令安装的iBATIS插件版本有些老,有些小限制,不能使用MyBATIS的Configuration.xml,建立的gateway里面的函数都是动态根据xml mapper文件自动生成的,如果想自己写,缺少SqlSession的注入针对这些情况可以自己修改一下1) MyBatis的很多配置功能无法全面利用,例如别名,MyBatis插件,环境信息,缓存等,要利用MyBatis的所有配置功能,添加对配置文件的支持
def doWithSpring = {
def ssfb = sqlSesssionFactoryBean(org.mybatis.spring.SqlSessionFactoryBean) {
dataSource = ref('dataSource')
mapperLocations = mappingSupport.getArtefactResourcePaths(application)
configLocation = "classpath:Configuration.xml";//new ClassPathResource("Configuration.xml"); 添加此行代码
sqlSessionTemplate(org.mybatis.spring.SqlSessionTemplate, ref('sqlSesssionFactoryBean'))
添加一行configLocation属性即可2)如果想在gateway自己写函数,控制事务,修改如下:
def registerMappings(GrailsClass g, GrailsApplication application) {
log.debug("Registering mappings for class " + g)
def operationIds = [:]
def namespace
String filename = getIbatisFilename(g.fullName)
def mappingXml = loadIbatisFile(filename, g)
namespace = mappingXml.@namespace.text()
operationIds = getOperationIds(mappingXml)
} catch (e) {
log.error("Failed to load iBATIS SQL map file ${filename}", e)
def mc = g.clazz.metaClass
mc.sqlMapper = application.mainContext.getBean('sqlSessionTemplate') //添加此行代码
operationIds.each {String opType, ids -&
ids.each {String id -&....这里添加了sqlMapper的实例注入,你就可以在gateway中这样写代码了,剩下的就是MyBatis的东西了,没什么好说的了。
def myHello(def args){
return sqlMapper.selectOne("selectDirectory",args);
注意这里自定义的东西最好不要启动事务,统一在Grails 的Service里面由Spring控制就好。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有grails 的searchalbe 插件_百度知道
grails 的searchalbe 插件
grails 的searchalbe 插件能承载多大的数据量???
提问者采纳
如果是管理类应用的话,实际的承载量与你的服务器实际环境相关Grails 的 searchable 插件技术层面上没有限制。如果是超级海量数据,因为通常来说管理类应用的并非请求虽然不多,数据量相对也大。还有其他问题请追问,也可以通过集群模式来做,但是查询的关联关系比较复杂,一点儿问题都没有。如果你的应用数据量在百万级以下,没问题。用吧。通常普通2G win2003 server 如果只用来做web服务器的话,这个同时在线人数可能要少一些,支持万人在线的论坛类应用没问题
其他类似问题
为您推荐:
grails的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 eclipse grails插件 的文章

 

随机推荐