Grails编码不当导致插件错误

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

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

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

 

java.lang.StackOverflowError
	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

你可能感兴趣的:(java,spring,jvm,grails,groovy)