Re: ArrayIndexOutOfBoundsException in ContentField.activate(...)

Serge Huber <[email protected]>
Newsgroups gmane.comp.cms.jahia.devel
Message-ID <[email protected]>
Hi Benjamin,

Do you have a reliable way of reproducing this so that we may test it ? 
We haven't be able to reproduce it here during our testing. Also which 
JVM are you using ?

Regards,
  Serge Huber.

[email protected] wrote:

>
> We are still using Jahia 4.0.5, but on heavy testing we encounter that 
> the workflow process is quite unstable sometimes. When looking in the 
> LOG files, I for instance can see an ArrayIndexOutOfBoundsException in 
> the ContentField.acivate(...) method.
>
> In this loop we get this exception in the line 
> activeAndStagingEntryStates.remove (i);, because i has the value -1. 
> It seem strange anyway that the removing from the 
> activeAndStagingEntryStates collection is happening in the inner loop 
> and not in the outer loop. As you haven't changed the code in the 4.1 
> version it seems to work for everybody else, or could it be that there 
> is a bug?
>
>         // we backup all active entries that will be replaced
>         for (int i = 0; i < activeAndStagingEntryStates.size (); i++) {
>             ContentObjectEntryState actEntryState = 
> (ContentObjectEntryState) activeAndStagingEntryStates.get (
>                     i);
>             if (actEntryState.isActive ()) {
>                 for (int j = 0; j < stagedEntries.size (); j++) {
>                     ContentObjectEntryState staEntryState = 
> (ContentObjectEntryState) stagedEntries.get (
>                             j);
>                     if (actEntryState.getLanguageCode ().equals (
>                             staEntryState.getLanguageCode ())) {
>                         // ok appollo, we catched an active entry 
> here! we handle this..
>                         if (versioningEnabled) {
>
>                             ContentObjectEntryState backupEntryState = 
> ContentFieldDB.getInstance ().backupDBValue (
>                                     this, actEntryState); // we backup 
> the active version
>                             // ok we backuped an entry of the field
>                             if (backupEntryState != null) {
>                                 // if the entry state list is loaded, 
> let's update it
>                                 if (versioningEntryStates != null) {
>                                     versioningEntryStates.add 
> (backupEntryState);
>                                 }
>                                 // also we must call the 
> changeEntryState because, like, we changed the version or
>                                 // something hehe..
>                                 this.changeEntryState (actEntryState, 
> backupEntryState,
>                                         jParams, stateModifContext);
>                             }
>                         } else {
>                             // if versioning is not enabled, we delete 
> the old value content!
>                             this.deleteEntry (actEntryState);
>                         }
>                         // we then delete the active entry
>                         ContentFieldDB.getInstance ().deleteDBValue 
> (this, actEntryState);
>                         activeAndStagingEntryStates.remove (i);
>                         i -= 1;
>                     }
>                 }
>             }
>        }
>
> Greetings,
> Benjamin Papez
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.