Если я хорошо понимаю, вы хотите использовать EJB3 / JPA в контейнере сервлета.
Существуют не только автономные реализации JPA, но также встраиваемый контейнер EJB3, такой как OpenEJB или Glassfish встраиваемый контейнер . Так что ничто не мешает вам запустить такой встраиваемый контейнер из контейнера сервлета для использования EJB3.
(Примечание: я не знаю всех подробностей о транзакциях. На полноценном сервере приложений. У вас есть JTA и менеджер распределенных транзакций. Этого нет в контейнере сервлетов, таком как Tomcat. JPA работает с JTA и простым JDBC, но я не знаю точно, как работает встраиваемый контейнер без JTA. Тем не менее, я думаю, что это сработает, учитывая, что такие встраиваемые контейнеры также предназначены для модульного тестирования, где, как мне кажется, распределенной транзакции JTA нет менеджер.)
Другим подходом было бы использование Spring. Spring и EJB3 действительно стали очень похожими. Вы можете запустить контейнер Spring DI в контейнере Servlet и получить более или менее выгоду от тех же возможностей, что и EJB3 (декларативные транзакции и т. Д.). Смотрите этот пост о Spring vs. EJB3.
Все эти технологии стали довольно модульными, особенно с профилями Java EE. Вы можете использовать Sevlets, EJB3, JMS, JPA, даже JTA как-то независимо друг от друга. Вы также можете создать среду, в которой вы выбираете те, которые вам нравятся, с помощью Spring или Java EE. Вопрос в том, когда это перестает иметь смысл, а лучше использовать приложение. сервер со всем доступным и легко управляемым. Я думаю, что Servlet / EJB3 / JPA - это предел, если нужно больше, зайдите в приложение. сервер.