Grails域类上缺少静态get方法

Grails域类上缺少静态get方法,grails,gorm,dynamic-method,Grails,Gorm,Dynamic Method,在使用grails的生产过程中,我们不时会遇到以下错误。它表示给定的域类没有get方法。对于每分钟执行300次的代码,每隔几天就会发生一次。我们无法复制它 No signature of method: static DomainClass.get() is applicable for argument types: (java.lang.Long) values: [97] 还有其他人遇到过这个问题吗?我们使用的是Grails1.3.6。我们的域类上的id是gorm默认值。我们正在运行su

在使用grails的生产过程中,我们不时会遇到以下错误。它表示给定的域类没有get方法。对于每分钟执行300次的代码,每隔几天就会发生一次。我们无法复制它

No signature of method: static DomainClass.get() is applicable for argument types: (java.lang.Long) values: [97]
还有其他人遇到过这个问题吗?我们使用的是Grails1.3.6。我们的域类上的id是gorm默认值。我们正在运行sun jvm版本1.6.0_17-b04

更新:


今天发生错误时,我发现了更多。我们使用的是JMS grails插件,错误发生在接收JMS消息的一个类中。看起来JMS插件在grails完成应用程序引导之前就开始传递消息了。如果grails启动时队列中有消息,则异常开始出现在日志中。一旦grails一路启动,错误就会停止,消息也会正常处理。我猜想grails中的spring上下文是在将动态方法添加到域类之前启动的。

您可能遇到了这个问题


有点奇怪的是,这种情况只是偶尔发生。您确定经常调用失败的实际方法吗?

正如您所说,域类的id是GORM default,因此hvgotcodes指出的Grails Jira中的错误不适用于您的情况(它们处理字符串id)

我猜可能是在某个地方,传递到get()方法的参数不是“Long type”。它很容易丢失,例如,GET/POST方法(GORM默认值)传递的参数“id”是字符串类型,需要在使用之前很久转换为

例如:

def id = params.id
def object = DomainClass.get(id as Long)

对我来说,当我在debug env中更改类代码时,就会发生这种情况,但Grails无法完全更新类二进制文件——因此Grails运行时使用新的类代码,但没有注入方法。我相信,这不是您的情况,因为在生产环境中,类重新部署在默认情况下是关闭的,并且下一个调用可以正常工作(顺便说一句,是吗?)您对Grails类装入器做了什么吗?您确定您传输的参数类型一直都很长吗(如果不是,肯定需要转换)?如果是,一个“grails clean”可能会解决您的问题。您能给出一些关于域类以及如何使用.get()的代码吗?这可能有助于定位问题。我相信代码总是经过很长时间。错误消息表示没有需要很长时间的get方法。我来看看能不能把密码编出来。我被卷入了其他事情。至于清洁,这是在我们的UAT环境中运行Tomcat时发生的。我们的构建服务器使用grails clean war构建war文件。这肯定只是偶尔发生,这就是为什么它如此令人困惑的原因。