Hi,
We think that the following modification should work:
/**
* Notify the listeners that a node type <code>ntName</code> has
been registered.
*/
private void notifyRegistered(QName ntName) {
// copy listeners to array to avoid
ConcurrentModificationException
NodeTypeRegistryListener[] la;
synchronized (listeners) {
la = (NodeTypeRegistryListener[])
listeners.values().toArray(new
NodeTypeRegistryListener[listeners.size()]);
}
for (int i = 0; i < la.length; i++) {
if (la[i] != null) {
la[i].nodeTypeRegistered(ntName);
}
}
}
Feedback much appreciated!
Martijn Hendriks
<GX> creative online development B.V.
t: 024 - 3888 261
f: 024 - 3888 621
e: [EMAIL PROTECTED]
Wijchenseweg 111
6538 SW Nijmegen
http://www.gx.nl/
> -----Original Message-----
> From: Martijn Hendriks [mailto:[EMAIL PROTECTED]
> Sent: Friday, January 19, 2007 11:05 AM
> To: [email protected]
> Subject: ConcurrentModificationException during registration of
> nodetypes
>
> Hi,
>
> During the registration of a set of nodetypes I encountered this
> exception:
>
> java.util.ConcurrentModificationException
> at
> org.apache.commons.collections.map.AbstractReferenceMap$Refere
> nceEntrySe
> tIterator.checkMod(AbstractReferenceMap.java:761)
> at
> org.apache.commons.collections.map.AbstractReferenceMap$Refere
> nceEntrySe
> tIterator.hasNext(AbstractReferenceMap.java:735)
> at
> org.apache.jackrabbit.core.nodetype.NodeTypeRegistry.notifyReg
> istered(No
> deTypeRegistry.java:1750)
> at
> org.apache.jackrabbit.core.nodetype.NodeTypeRegistry.registerN
> odeTypes(N
> odeTypeRegistry.java:223)
>
> It seems that the copying of the listeners triggered this exception:
>
> private void notifyRegistered(QName ntName) {
> // copy listeners to array to avoid
> ConcurrentModificationException
> NodeTypeRegistryListener[] la =
> new NodeTypeRegistryListener[listeners.size()];
> Iterator iter = listeners.values().iterator();
> int cnt = 0;
> 1750: while (iter.hasNext()) {
> la[cnt++] = (NodeTypeRegistryListener) iter.next();
> }
> for (int i = 0; i < la.length; i++) {
> if (la[i] != null) {
> la[i].nodeTypeRegistered(ntName);
> }
> }
> }
>
> It seems that the methods "notifyReRegistered" and
> "notifyUnregistered"
> will suffer from the same problem.
>
> Is this a known issue, and can it be solved?
>
> Thanks
>
> Martijn Hendriks
> <GX> creative online development B.V.
>
> t: 024 - 3888 261
> f: 024 - 3888 621
> e: [EMAIL PROTECTED]
>
> Wijchenseweg 111
> 6538 SW Nijmegen
> http://www.gx.nl/
Martijn Hendriks
<GX> creative online development B.V.
t: 024 - 3888 261
f: 024 - 3888 621
e: [EMAIL PROTECTED]
Wijchenseweg 111
6538 SW Nijmegen
http://www.gx.nl/