欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Grails编码不当导致插件错误 GrailsGroovyJavaJVMSpring 

程序员文章站 2024-02-28 08:28:58
...

Grails有那么多的插件,用起来很方便。

最近用了mail plugin,测试发送邮件都正常了,正好要睡觉了,最后看看代码都放controller里面太臭了,加了个MailService,也没测,就提交了,睡觉。

第二天,再跑服务,报错。

 

java.lang.*Error
	at sun.reflect.GeneratedMethodAccessor307.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:80)
	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:307)
	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:63)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
	at MailGrailsPlugin$_configureSendMail_closure7.doCall(MailGrailsPlugin.groovy:154)

 

 对Grails底层研究不够,尝试了N种办法均未果,不得不新建工程,一步步测,突然想起来那个MailService,原工程改了名字后,就正常了。

其实原因很简单,Grails底层是Spring,mail plugin也有个MailService,会在任何调用sendMail方法的controller里面注入名为mailService的服务,而我的Service和它冲突了。

1、如何避免这种冲突呢?如果插件用的越多,那么重名的可能性会更大了。曾经碰到过一个这样的例子,有个朋友配置aop事务的时候,用了pointcut="execution(* com..*Manager.*(..))",结果也是和引用的jar包里面冲突了。不知道这种问题如何去解决和避免。

2、Grails错误日志还有待提高,难怪Matt Raible在他的《COMPARING JVM WEB FRAMEWORKS》中评价有一句Stack traces are horrendous。

 

参考资料

 

  • Grails Mail Plugin

http://www.grails.org/plugin/mail

 

 

http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks