一尘不染

从JSP获得EntityManger和UserTransaction的最佳实践

jsp

我目前正在尝试找出在我的应用程序中获取实体管理器和用户事务的最佳方法。

在JBoss 5.1中,我可以将其直接注入到JSP文件中,但是现在不再允许这样做:

<%!@PersistenceContext(unitName = "unitname")
    public EntityManager em;

    @Resource
    UserTransaction utx;
%>

我必须从我的应用程序的不同位置进行访问emutx例如Servlet和Controller类。因此,将它放在一个位置并在全球范围内访问它会很棒,但是我还没有弄清楚如何做到这一点。任何提示将不胜感激。


阅读 234

收藏
2020-06-08

共1个答案

一尘不染

我发现了如何在Servlet,控制器类和JSP文件中获取EntityManager和UserTransaction。

让我们从SessionBeans开始。我将所有控制器类都重新定义为无状态SessionBeans。会话Bean允许资源注入。这是我的方法:

@Stateless
public class UserHandling {
  @PersistenceContext(unitName = "SSIS2")
  private static EntityManager em;

  @Resource
  private UserTransaction utx;

  public User getUser(int userId) {
    User userObject = em.find(User.class, userId);
    return userObject;
  }
}

如果会话Bean类中需要另一个会话Bean,则可以使用@EJB注释将其注入:

@Stateless
public class UserHandling {
  @PersistenceContext(unitName = "SSIS2")
  private static EntityManager em;

  @Resource
  private UserTransaction utx;

  @EJB
  UserHandling uh; RoleHandling rh;

  public User getUser(int userId) {
    User userObject = em.find(User.class, userId);
    return userObject;
  }
}

在JSP文件中,可以通过查找InitialContext获得Session Bean Controller类:

<%
    InitialContext ic = new InitialContext();
    UserHandling uh = (UserHandling) ic.lookup("java:app/" + application.getContextPath() + "/UserHandling");
%>
2020-06-08