У нас есть ситуация, когда есть около 450 удаленных клиентов EJB, которым необходимо подключиться к серверу Java EE (контейнер OpenEJB 3.1.4). Нет HTTP-сервера.
Мы заметили, что после включения нескольких клиентов сервер начинает выдавать исключение javax.ejb.ConcurrentAccessTimeoutException.
В документах говорится, что это вызвано тайм-аутом при попытке одновременного доступа к сеансовому компоненту с отслеживанием состояния или одноэлементному компоненту в методе. На самом деле мы используем и то, и другое, но трудно понять, какое может быть хорошее значение тайм-аута.
Если значение высокое, мы получаем меньше ConcurrentAccessTimeoutExceptions, но многие клиенты просто начинают зависать там навсегда. Если значение низкое, создается множество исключений ConcurrentAccessTimeoutException.
Все 450 клиентов устанавливают соединение с сервером при запуске (поскольку время соединения слишком велико, чтобы его можно было установить по запросу) и поддерживают его навсегда.
Теперь, помимо этого, есть еще одна проблема. Каждый клиент постоянно опрашивает сервер с интервалом в 2 секунды. Мы можем изменить это поведение, но нам придется настроить архитектуру.
Есть ли исследование или кто-нибудь, кто имел опыт работы со многими клиентами, подключающимися к серверу Java EE?
Мы можем разработать дизайн для всего, что необходимо, но мы хотели бы иметь более конкретную цель.