Один EM для всего сервлета не звучит хорошо. Если вы не используете EM, управляемые контейнером (например, EJB3), тогда рекомендуется использовать EM для конкретной единицы работы .
В контексте веб-приложения ваше третье предложение (по одному на HTTP-запрос) звучит хорошо. Однако это может привести вас к ловушке, когда вы связываете свой уровень обслуживания со своим уровнем db (ваш уровень обслуживания даже не должен знать о существовании EM).
Другой подход заключается в программной разметке транзакций в вашем DAO и получении в DAO нового EM для каждого вызова метода.
Редактировать: EM дешевы в создании, в отличие от EMF, которые имеют значительный накладные расходы. Использование одного EMF (который, кажется, вы делаете) и большого количества EM - это путь.