1

Grails2.0.4アプリケーションで次のスタックトレースを取得します。

java.lang.ArrayIndexOutOfBoundsException: 6170
        at com.springsource.loaded.NameRegistry.getIdFor(NameRegistry.java:44)
        at com.springsource.loaded.NameRegistry.getIdOrAllocateFor(NameRegistry.java:59)
        at com.springsource.loaded.TypeRegistry.getTypeIdFor(TypeRegistry.java:756)
        at com.springsource.loaded.MethodInvokerRewriter$RewriteClassAdaptor$RewritingMethodAdapter.rewritePUTSTATIC(MethodInvokerRewriter.java:789)
        at com.springsource.loaded.MethodInvokerRewriter$RewriteClassAdaptor$RewritingMethodAdapter.visitFieldInsn(MethodInvokerRewriter.java:708)
        at sl.org.objectweb.asm.ClassReader.accept(Unknown Source)
        at sl.org.objectweb.asm.ClassReader.accept(Unknown Source)
        at com.springsource.loaded.MethodInvokerRewriter.rewrite(MethodInvokerRewriter.java:280)
        at com.springsource.loaded.MethodInvokerRewriter.rewrite(MethodInvokerRewriter.java:83)
        at com.springsource.loaded.TypeRegistry.methodCallRewrite(TypeRegistry.java:767)
        at com.springsource.loaded.agent.ModifyDefineInClassLoaderForClassArtifactsType.modify(ModifyDefineInClassLoaderForClassArtifactsType.java:77)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.define(ClassLoaderForClassArtifacts.java)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:86)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:84)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.defineClassAndGetConstructor(ClassLoaderForClassArtifacts.java:84)
        at org.codehaus.groovy.runtime.callsite.CallSiteGenerator.compilePogoMethod(CallSiteGenerator.java:217)
        at org.codehaus.groovy.reflection.CachedMethod.createPogoMetaMethodSite(CachedMethod.java:228)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.createCachedMethodSite(PogoMetaMethodSite.java:207)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.createPogoMetaMethodSite(PogoMetaMethodSite.java:183)
        at groovy.lang.MetaClassImpl.createPogoCallCurrentSite(MetaClassImpl.java:3022)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallCurrentSite(CallSiteArray.java:95)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
        < actual call site in my code, some method call to the same service the original method is in>

どうやら私のグーグルフーは私を失ったか、誰もこれまでその問題を抱えたことはありません。検索するだけcom.springsource.loaded.NameRegistryでも結果は得られません。

通常、同じ操作を数回試行すると問題は解決しますが、それで解決することはほとんどありません。私が探すことができるものについてのヒントはありますか?

私の大げさな推測では、Springは私が呼び出そうとしているメソッドをプロキシしていて、どういうわけかそれを独自のレジストリで検索できません。どうしてそれが私のせいなのか?

foo編集:これを引き起こすスタックトレースの最初の行は、次のメソッドの呼び出しのように、無害なメソッド呼び出しbarです。

class FooService {
      def foo(bla, bloerk) {
          1
      }

      def bar() {
          foo(1,2)
      }
}
4

2 に答える 2

2

実際、GPars を使用してバッチ更新を行っているときに、これはかなり多く見られます。バッチが完了した後に実行される再試行プールに失敗したエントリを追加することで、この問題を回避しました。しかし、私はその解決策に満足しているわけではありません。しかし、この機能はそれほど重要ではなく、1 時間おきに実行されるため、めったに更新されないオブジェクトにマイナーな更新エラーが発生するだけです。

これは、開発モードだけで本番モードでは決して見られないので、classLoader の動的リロード機能に何らかの形で関係していると思います。また、バッチ実行の開始時に、このタイプのエラーがよく見られます。これは、JVM がウォームアップして物事が順調に進むときです。この問題をより深く掘り下げていきます。もっと便利なものを見つけたら、投稿します。

あなたが一人ではないことを伝えるために、あなたの投稿に返信しようと思いました.

Mac OSX を実行しています: Java バージョン "1.6.0_33" Java(TM) SE ランタイム環境 (ビルド 1.6.0_33-b03-424-11M3720) 424、混合モード)

そして、この問題は Grails 2 -> 2.1 でずっと見てきました。1.3.5 ->1.3.7 では見られなかったと思います。

于 2012-07-23T12:04:01.400 に答える
0

負の数値を読み取り/保存しようとしているか、array.size() より大きい数値を保存/読み取りしようとしています。

于 2012-07-05T12:25:57.720 に答える