I would guess that your use of a synchronized object is interfering with JBoss also using synchronized objects to handle multiple threads. But that could be very difficult to prove.
Entity Beans normally handle persistent data, but you could use an Entity Bean which only contains a list of current sessions. There would be no underlying persistent data, but the list should survive passivation and activation.
That way, JBoss would handle all the threading issues.
How do you plan to know which users are registered ?
If you are using stateful session beans, you can add a user during ejbCreate() of the session bean and remove the user during ejbRemove(). But sessions that time out will not be removed.
i have made a MBean which contains all my SessionData ... so i have no probrem with synchronizing (i think this will be done by JBOSS)
the registration of the clients is very simple because my client's are java-client ... not Web-clients ... i generate a sessionKey containing ip,portnumber and timestamp ... with this function i can also control the number of sessions on a client each session starts a thread on the client - the client-thread send permanent a "I'm alive message" and so on ...