Как лучше реализовать чат клиент-сервер на java websocket?
В качестве клиента лучше брать SockJS, потому что он куда более гибкий: автоматом заменяет вебсокеты на поддерживаемую браузером технологию (лонг-поллинг, флэш, загрузка файлов и т.д.), автоматом меняет порты, если нужные не могут использоваться. При этом, делает он всё это прозрачно, код обмена сообщениями будет точно такой же, как в случае с обычными вебсокетами.
Эту либу точно поддерживает SpringFramework. На счёт чистой Java EE не знаю. Поэтому, у тебя 2 варианта: использовать вебсокеты от спринга, а в остальном юзать Java EE фичи, вроде как есть много туторов, как скрестить EJB и Spring. Ну или используй полностью Спринг заместо Java EE.
А если ты точно знаешь, какой браузер будет у пользователей, то можно и на чистых вебсокетах и Java EE замутить всё.
P.S. Не используй томкат, бери полнофункциональные сервера: Glassfish 4 или WildFly 8 (бывший JBoss).
netty.io Мы писали в своё время на нём сервер с webcosket's