当前位置: 首页 > 知识库问答 >
问题:

使用@RequestScoped和@Produces将用户实体注入Jersey处理程序

权烨磊
2023-03-14

用户实体类:

@Entity
public class User implements Serializable {

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    public List<Site> sites;

用于访问数据库的外观类:

@Stateless
public class UserFacade extends AbstractFacade<User, Long> {

    @PersistenceContext
    private EntityManager em;

    ...
}

用户注入的资源类:

@RequestScoped
public class Resource {

    @Inject
    UserFacade userFacade;

    @Inject
    HttpServletRequest request;

    @Produces
    public User getUser() {
        final String name = request.getUserPrincipal().getName();
        // ... find user in database ...
    }

}

和泽西处理程序:

@Stateless
@Path("/sites")
public class Sites {    

    @EJB
    SiteFacade siteFacade;

    @Inject
    User user;

    ...

现在的问题是:

当我想访问用户时。站点列表,我得到了延迟加载异常。但很明显,因为User是由RequestScoped提供程序注入的,所以它应该使用相同的EntityManager会话刷新每个请求。正当

我是否可以将每个rest请求的用户实体注入到Rest处理程序类中?

共有1个答案

金嘉言
2023-03-14

实体管理器绑定到事务,而不是请求范围。

因此,在两个不同的事务中调用< code>User producer方法和您的< code>Sites业务方法,这解释了< code>LazyLoadException。

 类似资料:
  • 问题内容: 我正在使用jersey 2.17和HK2创建一个简单的rest应用。我有一个拒绝任何没有“ currentuser” cookie的请求。 我有这样的事情: 我想编写比这更优雅的东西。像这样: 我对hk2真的很陌生,并且真的很难找到方法。 我只是在要求正确的接口来实现(或扩展类)。 问题答案: 您要找的不是一件容易的事。解决此问题的一种方法是在内部设置,如此处所示。这不涉及与HK2的任

  • 我有一个JAR文件,其中包含一个请求范围Bean。(一个注释为的类)。 我有另一个Web服务项目(作为WAR文件构建)。上述JAR文件位于WAR文件的文件夹中。 我试图的类到Web服务项目中的一个类中。 我正在得到一个 这两个项目都有JAR文件,WAR文件包含一个空的。我已经研究这个问题好几天了。请帮忙。 谢谢

  • null 所以我创建了SFFactory类并在ApplicationConfig中注册它。 Sffactory.java ApplicationConfig.java

  • 我正在开发一个java脚本客户端应用程序,在服务器端我需要处理CORS,所有我用JAX-RS和Jersey编写的服务。我的代码: 感谢佛普尼

  • 问题内容: 因此,我知道您正在指定类型,但是为什么呢?在什么条件下会很重要。例如,如果我具有以下方法,并且注释掉@Produces批注,它仍将返回JSON。 API文档说:“如果未指定,则容器将假定可以产生任何类型。” 那么,为什么我不希望容器承担这种责任呢? 问题答案: 我认为这取决于您的JAX- RS实现,但这是泽西对其@Produces批注的解释:https ://jersey.java.n

  • 例如,Foos的资源可能如下所示: 对于酒吧: