2014-07-26 3 views
0

Я ищу, как реализовать Open EntityManager В представлении шаблона в JPA. Однако все, что я могу найти, это Hibernate (Open Session In View) или Spring.Открыть EntityManager в представлении в JPA для Java EE

Может ли кто-нибудь из вас привести пример (с кодом, если это возможно) о том, как реализовать Open EntityManager В шаблоне просмотра для JPA и Java EE?

ответ

3

Существует хорошее объяснение такой реализации в самой рекомендуемой главе Pro JPA 2 Book, посвященной разделу «Избегание отстранения».

Я попытаюсь дать некоторые намеки, но прочитайте это - книга представляет несколько альтернативных подходов и обсуждает их соответствующие плюсы и минусы.

С JPA существует два подхода к решению проблемы. Во-первых, это работа с отдельными объектами в представлении и расширенный контекст постоянства (ПК) в бэкэнд. Во-вторых, чтобы сохранить одну транзакцию до тех пор, пока она активна. Полагаю, мы говорим о второй стратегии здесь - это называется «Transaction View» в книге.

Важным моментом является то, что второй сценарий не работает для удаленных клиентов. После того, как вы выполните сериализацию своих объектов, сериализованное (и затем десериализованное) представление никоим образом не привязано к ПК.

Выполнение запросов и рендеринг должно происходить во время одной и той же транзакции, чтобы использовать ПК с областью передачи TX. Вам нужно будет использовать UserTransaction вместо того, чтобы полагаться на CMT (вы все еще можете использовать CMT в бэкэнд-бобах).

Суть:

public class MyServlet extends HttpServlet { 

    @Resource UserTransaction tx; 
    @EJB MyService bean; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    // ... 
    try { 
     tx.begin(); 

     List entities = bean.findAll(); 
     request.setAttribute("entities", entities); 
     getServletContext().getRequestDispatcher("/listEntities.jsp") 
     .forward(request, response); 

    } finally { 
     tx.commit(); 
    } 
    // ... 
    } 
} 

Книга иллюстрирует использование этого шаблона для страницы JPS. Я не уверен, как вы могли бы сопоставить этот подход с другими платформами, такими как JSF или Wicket.