Pregunta

En mi aplicación EJB (Java EE), procedo una lista (LinkedList) para insertar en DB y recibí un error: ArrayInDexOutofBoundSException: -32443

Yo codifico como

Iterator itertator = myList.iterator();
while (itertator.hasNext()) {         
    MyObject myObject = (MyObject) itertator.next();
    ...
}

Me pregunto ya que ya uso iterator.next ¿Por qué podría tener índiceutOfBound?

Registro completo:

Error message: java.lang.ArrayIndexOutOfBoundsException: -32443; nested exception is: com.my.exception.MyException
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapEJBException(RemoteExceptionMappingStrategy.java:411)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapException(RemoteExceptionMappingStrategy.java:113)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException(RemoteExceptionMappingStrategy.java:203)
at com.ibm.ejs.container.EJSDeployedSupport.setUncheckedException(EJSDeployedSupport.java:296)

Un cliente de Java accede a mi aplicación EJB en múltiples subprocesos, la lista se implementa en EJB tomando la identificación del cliente para encontrar datos de datos en una lista de enlaces y luego enviar la lista a insertar al iterando como se indicó anteriormente, al aleatoriamente. tengo error.

¿Alguien podría ayudar a encontrar la pista? ¿O el problema porque estoy usando LinkedList, el tamaño del objeto no es suficiente?

¿Fue útil?

Solución

Supongo que la lista no es segura. En caso de que la lista sea accedida por varios hilos, un otro hilo accede al último elemento en este momento, el iterator.hasNext() es verdad. Pero cuando otro hilo hace un iterator.next(), luego intenta acceder al siguiente elemento que no está disponible. El hecho de que el error sucede al azar es otra pista para eso. Usar una lista segura de hilo sería una buena idea en este caso. De lo contrario, es necesario sincronizar manualmente la lista:

synchronized(list) {
    Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
        foo(i.next());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top