Grails: ¿Qué causa ArrayIndexOutOfBoundsException en NameRegistry.getIdFor?

Obtengo el siguiente stacktrace en una aplicación Grails 2.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>

Aparentemente mi google-Fu me ha perdido, o nadie ha tenido ese problema antes. Ni siquiera buscar solo com.springsource.loaded.NameRegistryproduce resultados.

El problema generalmente desaparece después de intentar la misma operación varias veces más, pero eso no es una solución. ¿Alguna pista sobre lo que podría buscar?

Mi conjetura es que Spring está representando el método que estoy tratando de llamar, y de alguna manera no puede buscarlo en su propio registro. ¿Cómo puede ser eso mi culpa?

editar: La primera línea en el Stacktrace que causa esto es una llamada a un método inofensivo, como la llamada al foométodo baren esto:

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

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

En realidad, veo bastante esto cuando hago actualizaciones por lotes usando GPars. He solucionado el problema agregando entradas fallidas a un grupo de reintentos que se ejecuta después de que se hayan completado los lotes. Sin embargo, no estoy tan contento con la solución. Pero dado que la función no es realmente crítica y se ejecuta cada dos horas más o menos, solo da un pequeño error de actualización para los objetos que rara vez se actualizan.

Nunca veo esto en modo de producción solo en modo de desarrollo, por lo que creo que tiene que ver con las capacidades de recarga dinámica de classLoader de alguna manera. También a menudo veo este tipo de error al comienzo de las ejecuciones por lotes, cuando la JVM calienta las cosas fluyen muy bien. Voy a profundizar en este problema. Si encuentro algo más útil, volveré a publicar.

Solo pensé que respondería a tu publicación para decirte que no estás solo.

Estoy en Mac OSX corriendo: Java versión "1.6.0_33" Java (TM) SE Runtime Environment (compilación 1.6.0_33-b03-424-11M3720) Java HotSpot (TM) 64-Bit Server VM (compilación 20.8-b03- 424, modo mixto)

Y he visto este problema a lo largo de Grails 2 -> 2.1, no creo que lo haya visto en 1.3.5-> 1.3.7

Respuesta: 2

Estoy enviando un objeto json a una URL REST como: JSONObject loan = new JSONObject (); loan.put ("clientId", "1"); loan.put ("productId", "1"); Ahora también tengo que enviar una matriz como parte de la carga útil: {...

¿Cuál es la forma ideal de crear un video en la plataforma Android usando JAVA? Intenté usar ffmpeg pero realmente tuve problemas para compilarlo. Sé que hay una clase que admite todas estas cosas en iOS, ...

Estamos utilizando Openshift infra. Tenemos Dynatrace para la recopilación de métricas, pero aún no está en buenas condiciones. Nuestra aplicación Java en uno de los Pod no funciona. Utilizamos gradle build y hemos mencionado ...

¿Alguien puede sugerirme una solución de código abierto java bpm / workflow para operar una gran cantidad de registros en la base de datos. Estos registros pueden estar en millones. Y cada registro creará un subflujo de trabajo para ...