Is there a race condition in code to read custom attribute values of type enumeration?
All,
we have an automated client which connects to our RTC v5.0 server. Among other things, it reads custom attributes for specific work items. At times, multiple instances of this automated client access the server in parallel. These parallel accesses seem to hit a race condition:
Exception stack trace of thread 1:
Exception message is: null
Stack Trace: java.lang.NullPointerException
at org.eclipse.emf.common.util.BasicEMap.entryForKey(BasicEMap.java:1390)
at org.eclipse.emf.common.util.BasicEMap.get(BasicEMap.java:559)
at org.eclipse.emf.common.util.BasicEMap$DelegatingMap.get(BasicEMap.java:794)
at com.ibm.team.repository.common.model.impl.ItemImpl.getStringExtension(ItemImpl.java:1223)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getEnumeration(WorkItemImpl.java:3764)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getValue(WorkItemImpl.java:2858)
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.team.repository.common.internal.util.ItemStore$ItemInvocationHandler.invoke(ItemStore.java:597)
at com.sun.proxy.$Proxy19.getValue(Unknown Source)
Exception stack trace of thread 2:
Exception message is: null
Stack Trace: java.lang.ArrayIndexOutOfBoundsException
at org.eclipse.emf.common.util.BasicEList.grow(BasicEList.java:736)
at org.eclipse.emf.common.util.BasicEList.addUnique(BasicEList.java:422)
at org.eclipse.emf.common.util.AbstractEList.add(AbstractEList.java:307)
at org.eclipse.emf.common.util.BasicEMap.doPut(BasicEMap.java:616)
at org.eclipse.emf.common.util.BasicEMap.ensureEntryDataExists(BasicEMap.java:247)
at org.eclipse.emf.common.util.BasicEMap.get(BasicEMap.java:556)
at org.eclipse.emf.common.util.BasicEMap$DelegatingMap.get(BasicEMap.java:794)
at com.ibm.team.repository.common.model.impl.ItemImpl.getStringExtension(ItemImpl.java:1223)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getEnumeration(WorkItemImpl.java:3764)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getValue(WorkItemImpl.java:2858)
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.team.repository.common.internal.util.ItemStore$ItemInvocationHandler.invoke(ItemStore.java:597)
at com.sun.proxy.$Proxy19.getValue(Unknown Source)
Both threads hit these exception at the very same location. Any ideas what is wrong here?
(Because the second stack trace contains method "grow", I suspected that maybe a value was written to the fied which is not defined in the enumeration type, but DB analysis shows that this is not the case.)
Thanks in advance,
Markus
we have an automated client which connects to our RTC v5.0 server. Among other things, it reads custom attributes for specific work items. At times, multiple instances of this automated client access the server in parallel. These parallel accesses seem to hit a race condition:
Exception stack trace of thread 1:
Exception message is: null
Stack Trace: java.lang.NullPointerException
at org.eclipse.emf.common.util.BasicEMap.entryForKey(BasicEMap.java:1390)
at org.eclipse.emf.common.util.BasicEMap.get(BasicEMap.java:559)
at org.eclipse.emf.common.util.BasicEMap$DelegatingMap.get(BasicEMap.java:794)
at com.ibm.team.repository.common.model.impl.ItemImpl.getStringExtension(ItemImpl.java:1223)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getEnumeration(WorkItemImpl.java:3764)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getValue(WorkItemImpl.java:2858)
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.team.repository.common.internal.util.ItemStore$ItemInvocationHandler.invoke(ItemStore.java:597)
at com.sun.proxy.$Proxy19.getValue(Unknown Source)
Exception stack trace of thread 2:
Exception message is: null
Stack Trace: java.lang.ArrayIndexOutOfBoundsException
at org.eclipse.emf.common.util.BasicEList.grow(BasicEList.java:736)
at org.eclipse.emf.common.util.BasicEList.addUnique(BasicEList.java:422)
at org.eclipse.emf.common.util.AbstractEList.add(AbstractEList.java:307)
at org.eclipse.emf.common.util.BasicEMap.doPut(BasicEMap.java:616)
at org.eclipse.emf.common.util.BasicEMap.ensureEntryDataExists(BasicEMap.java:247)
at org.eclipse.emf.common.util.BasicEMap.get(BasicEMap.java:556)
at org.eclipse.emf.common.util.BasicEMap$DelegatingMap.get(BasicEMap.java:794)
at com.ibm.team.repository.common.model.impl.ItemImpl.getStringExtension(ItemImpl.java:1223)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getEnumeration(WorkItemImpl.java:3764)
at com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.getValue(WorkItemImpl.java:2858)
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.team.repository.common.internal.util.ItemStore$ItemInvocationHandler.invoke(ItemStore.java:597)
at com.sun.proxy.$Proxy19.getValue(Unknown Source)
Both threads hit these exception at the very same location. Any ideas what is wrong here?
(Because the second stack trace contains method "grow", I suspected that maybe a value was written to the fied which is not defined in the enumeration type, but DB analysis shows that this is not the case.)
Thanks in advance,
Markus