Thanks for the comments, James and David.  David, did you mean line 1147 should be like:
```java
synchronized(this.ejbClientContextListeners) {
    listeners = new ArrayList<EJBClientContextListener>(this.ejbClientContextListeners);
}
```
The reason I didn't want to wrap the ArrayList creation with a lock is, when we create ArrayList with a synchronized collection, its toArray() method is called to copy the underling array to the ArrayList.  And this toArray() method is already synchronized on this synchronized collection (this.ejbClientContextListeners).  Anything I missed?