[JBoss JIRA] (DROOLS-2313) Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
by Donatien RIVIERE (JIRA)
[ https://issues.jboss.org/browse/DROOLS-2313?page=com.atlassian.jira.plugi... ]
Donatien RIVIERE updated DROOLS-2313:
-------------------------------------
Description:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +*of different concrete classes*+, there is a chance that a new ConcreteObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
was:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +*of different concrete classes*+, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
> Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DROOLS-2313
> URL: https://issues.jboss.org/browse/DROOLS-2313
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.5.0.Final, 7.6.0.Final
> Reporter: Donatien RIVIERE
> Assignee: Mario Fusco
> Attachments: KieSessionConcurrentTest.java
>
>
> If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +*of different concrete classes*+, there is a chance that a new ConcreteObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
> Example when using kieSession.getObjects().*iterator()* :
> {noformat}
> Exception in thread "QueryingThread" java.util.ConcurrentModificationException
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
> at java.util.ArrayList$Itr.next(ArrayList.java:851)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
> at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
> Example when using kieSession.getObjects().*toArray()* :
> {noformat}
> Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months
[JBoss JIRA] (DROOLS-2313) Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
by Donatien RIVIERE (JIRA)
[ https://issues.jboss.org/browse/DROOLS-2313?page=com.atlassian.jira.plugi... ]
Donatien RIVIERE updated DROOLS-2313:
-------------------------------------
Description:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +of different classes+, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
was:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
> Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DROOLS-2313
> URL: https://issues.jboss.org/browse/DROOLS-2313
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.5.0.Final, 7.6.0.Final
> Reporter: Donatien RIVIERE
> Assignee: Mario Fusco
> Attachments: KieSessionConcurrentTest.java
>
>
> If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +of different classes+, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
> Example when using kieSession.getObjects().*iterator()* :
> {noformat}
> Exception in thread "QueryingThread" java.util.ConcurrentModificationException
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
> at java.util.ArrayList$Itr.next(ArrayList.java:851)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
> at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
> Example when using kieSession.getObjects().*toArray()* :
> {noformat}
> Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months
[JBoss JIRA] (DROOLS-2313) Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
by Donatien RIVIERE (JIRA)
[ https://issues.jboss.org/browse/DROOLS-2313?page=com.atlassian.jira.plugi... ]
Donatien RIVIERE updated DROOLS-2313:
-------------------------------------
Description:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +*of different concrete classes*+, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
was:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +of different classes+, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
> Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DROOLS-2313
> URL: https://issues.jboss.org/browse/DROOLS-2313
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.5.0.Final, 7.6.0.Final
> Reporter: Donatien RIVIERE
> Assignee: Mario Fusco
> Attachments: KieSessionConcurrentTest.java
>
>
> If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects +*of different concrete classes*+, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
> Example when using kieSession.getObjects().*iterator()* :
> {noformat}
> Exception in thread "QueryingThread" java.util.ConcurrentModificationException
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
> at java.util.ArrayList$Itr.next(ArrayList.java:851)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
> at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
> Example when using kieSession.getObjects().*toArray()* :
> {noformat}
> Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months
[JBoss JIRA] (WFLY-9703) Improve archetype "wildfly-javaee7-webapp-ear-blank-archetype" to simplify upgrade to recent WildFly versions
by Wolfgang Knauf (JIRA)
[ https://issues.jboss.org/browse/WFLY-9703?page=com.atlassian.jira.plugin.... ]
Wolfgang Knauf updated WFLY-9703:
---------------------------------
Description:
When using this archetype, the "pom.xml" of the root project points to JBoss 8.2.1 / WildFly 9.0.0Alpha1
After changing the versions to WildFly 11, several additional changes are necessary. I suggest to add at least some comments about necessary changes. It would be even better to upgrade the archetype to a more recent WildFly version ;-).
In "pom.xml" of the root project:
* Dependeny "jboss-javaee-7.0-with-tools" has to be changed to artifactId = "wildfly-javaee7-with-tools".
* Dependency "jboss-javaee-7.0-with-hibernate" does not seem to exist any longer
So, add a comment to those dependencies about error messages when switching to a new WildFly version and about the necessary changes. This comment should contain the new snippet.
In "pom.xml" of the web project:
* Dependeny with groupId = "org.jboss.resteasy", artifactId="jaxrs-api" was changed to groupId = "org.jboss.spec.javax.ws.rs", artifactId = "jboss-jaxrs-api_2.0_spec" ([WFLY-4128|https://issues.jboss.org/browse/WFLY-4128])
In "pom.xml" of the ejb project:
* Test dependency with groupid = "org.wildfly", artifactId = "wildfly-arquillian-container-managed": the groupId is "org.wildfly.arquillian" (changed beetween 8.1.0 and 11.)
* Test dependency with groupid = "org.wildfly", artifactId = "wildfly-arquillian-container-remote": the groupId is "org.wildfly.arquillian"
Additionally, it would be helpful if the web project contains the dependencies with groupId = "org.jboss.spec.javax.ejb" and artifactId = "jboss-ejb-api_3.2_spec" (for use of the "@EJB" annotation in e.g. servlets or JFS components) and groupId = "org.jboss.spec.javax.servlet", artifactId = "jboss-servlet-api_3.1_spec" (for being able to code servlets).
was:
When using this archetype, the "pom.xml" of the root project points to JBoss 8.2.1 / WildFly 9.0.0Alpha1
After changing the versions to WildFly 11, several additional changes are necessary. I suggest to add at least some comments about necessary changes. It would be even better to upgrade the archetype to a more recent WildFly version ;-).
In "pom.xml" of the root project:
* Dependeny "jboss-javaee-7.0-with-tools" has to be changed to artifactId = "wildfly-javaee7-with-tools".
* Dependency "jboss-javaee-7.0-with-hibernate" does not seem to exist any longer
So, add a comment to those dependencies about error messages when switching to a new WildFly version and about the necessary changes. This comment should contain the new snippet.
In "pom.xml" of the web project:
* Dependeny with groupId = "org.jboss.resteasy", artifactId="jaxrs-api" was changed to groupId = "org.jboss.spec.javax.ws.rs", artifactId = "jboss-jaxrs-api_2.0_spec" ([WFLY-4128|https://issues.jboss.org/browse/WFLY-4128])
Additionally, it would be helpful if the web project contains the dependencies with groupId = "org.jboss.spec.javax.ejb" and artifactId = "jboss-ejb-api_3.2_spec" (for use of the "@EJB" annotation in e.g. servlets or JFS components) and groupId = "org.jboss.spec.javax.servlet", artifactId = "jboss-servlet-api_3.1_spec" for being able to code servlets.
> Improve archetype "wildfly-javaee7-webapp-ear-blank-archetype" to simplify upgrade to recent WildFly versions
> -------------------------------------------------------------------------------------------------------------
>
> Key: WFLY-9703
> URL: https://issues.jboss.org/browse/WFLY-9703
> Project: WildFly
> Issue Type: Bug
> Components: EE
> Affects Versions: 11.0.0.Final
> Reporter: Wolfgang Knauf
> Priority: Minor
>
> When using this archetype, the "pom.xml" of the root project points to JBoss 8.2.1 / WildFly 9.0.0Alpha1
> After changing the versions to WildFly 11, several additional changes are necessary. I suggest to add at least some comments about necessary changes. It would be even better to upgrade the archetype to a more recent WildFly version ;-).
> In "pom.xml" of the root project:
> * Dependeny "jboss-javaee-7.0-with-tools" has to be changed to artifactId = "wildfly-javaee7-with-tools".
> * Dependency "jboss-javaee-7.0-with-hibernate" does not seem to exist any longer
> So, add a comment to those dependencies about error messages when switching to a new WildFly version and about the necessary changes. This comment should contain the new snippet.
> In "pom.xml" of the web project:
> * Dependeny with groupId = "org.jboss.resteasy", artifactId="jaxrs-api" was changed to groupId = "org.jboss.spec.javax.ws.rs", artifactId = "jboss-jaxrs-api_2.0_spec" ([WFLY-4128|https://issues.jboss.org/browse/WFLY-4128])
> In "pom.xml" of the ejb project:
> * Test dependency with groupid = "org.wildfly", artifactId = "wildfly-arquillian-container-managed": the groupId is "org.wildfly.arquillian" (changed beetween 8.1.0 and 11.)
> * Test dependency with groupid = "org.wildfly", artifactId = "wildfly-arquillian-container-remote": the groupId is "org.wildfly.arquillian"
> Additionally, it would be helpful if the web project contains the dependencies with groupId = "org.jboss.spec.javax.ejb" and artifactId = "jboss-ejb-api_3.2_spec" (for use of the "@EJB" annotation in e.g. servlets or JFS components) and groupId = "org.jboss.spec.javax.servlet", artifactId = "jboss-servlet-api_3.1_spec" (for being able to code servlets).
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months
[JBoss JIRA] (DROOLS-2313) Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
by Donatien RIVIERE (JIRA)
[ https://issues.jboss.org/browse/DROOLS-2313?page=com.atlassian.jira.plugi... ]
Donatien RIVIERE updated DROOLS-2313:
-------------------------------------
Description:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
was:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
> Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DROOLS-2313
> URL: https://issues.jboss.org/browse/DROOLS-2313
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.5.0.Final, 7.6.0.Final
> Reporter: Donatien RIVIERE
> Assignee: Mario Fusco
> Attachments: KieSessionConcurrentTest.java
>
>
> If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list at the same time and cause concurrent exception.
> Example when using kieSession.getObjects().*iterator()* :
> {noformat}
> Exception in thread "QueryingThread" java.util.ConcurrentModificationException
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
> at java.util.ArrayList$Itr.next(ArrayList.java:851)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
> at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
> Example when using kieSession.getObjects().*toArray()* :
> {noformat}
> Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months
[JBoss JIRA] (DROOLS-2313) Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
by Donatien RIVIERE (JIRA)
[ https://issues.jboss.org/browse/DROOLS-2313?page=com.atlassian.jira.plugi... ]
Donatien RIVIERE updated DROOLS-2313:
-------------------------------------
Description:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
{noformat}
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
was:
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
> Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DROOLS-2313
> URL: https://issues.jboss.org/browse/DROOLS-2313
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.5.0.Final, 7.6.0.Final
> Reporter: Donatien RIVIERE
> Assignee: Mario Fusco
> Attachments: KieSessionConcurrentTest.java
>
>
> If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list and cause concurrent exception.
> Example when using kieSession.getObjects().*iterator()* :
> {noformat}
> Exception in thread "QueryingThread" java.util.ConcurrentModificationException
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
> at java.util.ArrayList$Itr.next(ArrayList.java:851)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
> at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
> at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
> at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
> Example when using kieSession.getObjects().*toArray()* :
> {noformat}
> Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
> at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months
[JBoss JIRA] (DROOLS-2313) Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
by Donatien RIVIERE (JIRA)
Donatien RIVIERE created DROOLS-2313:
----------------------------------------
Summary: Bad synchronization of ClassAwareObjectStore list of concreteStores can cause ConcurrentModificationException or ArrayIndexOutOfBoundsException while getting session objects
Key: DROOLS-2313
URL: https://issues.jboss.org/browse/DROOLS-2313
Project: Drools
Issue Type: Bug
Components: core engine
Affects Versions: 7.6.0.Final, 7.5.0.Final
Reporter: Donatien RIVIERE
Assignee: Mario Fusco
Attachments: KieSessionConcurrentTest.java
If a thread requests for session objects (using kieSession.getObjects() with or without filters) while another one is inserting objects of different classes, there is a chance that a new ConcretObjectStore is added to the concreteStores list and cause concurrent exception.
Example when using kieSession.getObjects().*iterator()* :
Exception in thread "QueryingThread" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.fetchNextIterator(ClassAwareObjectStore.java:556)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.nextIterator(ClassAwareObjectStore.java:513)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.fetchNext(ClassAwareObjectStore.java:499)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:494)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:487)
at org.drools.core.common.ClassAwareObjectStore$AbstractCompositeIterator.<init>(ClassAwareObjectStore.java:478)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:546)
at org.drools.core.common.ClassAwareObjectStore$CompositeObjectIterator.<init>(ClassAwareObjectStore.java:544)
at org.drools.core.common.ClassAwareObjectStore.iterateObjects(ClassAwareObjectStore.java:186)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.iterator(StatefulKnowledgeSessionImpl.java:679)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:710)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
Example when using kieSession.getObjects().*toArray()* :
{noformat}
Exception in thread "QueryingThread" java.lang.ArrayIndexOutOfBoundsException: 1
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:711)
at org.drools.core.impl.StatefulKnowledgeSessionImpl$ObjectStoreWrapper.toArray(StatefulKnowledgeSessionImpl.java:695)
at ft.drools.KieSessionConcurrentTest.lambda$0(KieSessionConcurrentTest.java:125)
{noformat}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
8 years, 3 months