Насколько я понимаю, контейнер сервлетов создает ограниченные экземпляры сервлетов и несколько потоков каждого экземпляра сервлета и повторно использует эти потоки и экземпляры.
Поскольку существует несколько экземпляров потока, они не являются "поточно-безопасными" (хотя я понимаю, что их кодирование с поточно-безопасностью несложно).
Контейнеры EJB, с другой стороны, не создают потоки EJB, а повторно используют только объекты EJB (используя пул). Поскольку в экземпляре EJB нет нескольких потоков, не возникает вопроса о безопасности потоков.
Мой вопрос: Почему у вас разное поведение? Не лучше ли заставить EJB работать как сервлеты (небезопасные потоки)?
Я уверен, что что-то упускаю и хочу понять эту недостающую часть.