gpt4 book ai didi

java - JAX_RS 资源和 EJB 生命周期不匹配

转载 作者:行者123 更新时间:2023-12-01 09:16:12 24 4
gpt4 key购买 nike

JAX-RS 资源(用 @Path 注释的类)具有每个请求的默认生命周期。

现在EJB也有自己的生命周期,我的意思是当有一个EJB的引用时,这个引用实际上是管理EJB池的代理对象的引用。

当 EJB 也是 JAX-RS 资源时,这些生命周期模型如何共存?

https://jersey.java.net/documentation/latest/jaxrs-resources.html

JAX-RS resources are managed in per-request scope by default which means that new resource is created for each request.

来源: https://jersey.java.net/documentation/latest/jaxrs-resources.html

最佳答案

JAX-RS works with Enterprise JavaBeans technology (enterprise beans) and Contexts and Dependency Injection for Java EE (CDI).

In general, for JAX-RS to work with enterprise beans, you need to annotate the class of a bean with @Path to convert it to a root resource class. You can use the @Path annotation with stateless session beans and singleton POJO beans.

JAX-RS and CDI have slightly different component models. By default, JAX-RS root resource classes are managed in the request scope, and no annotations are required for specifying the scope. CDI managed beans annotated with @RequestScoped or @ApplicationScoped can be converted to JAX-RS resource classes.

对于使用注入(inject)另一个 Bean 类的 Bean 的 Web 应用程序,该 Bean 需要能够在用户与应用程序交互的持续时间内保持状态。定义这种状态的方法是给bean一个作用域

  • @RequestScoped:用户在单个 HTTP 请求中与 Web 应用程序的交互。

  • @SessionScoped:用户通过多个 HTTP 与 Web 应用程序进行交互请求。

  • @ApplicationScoped:所有用户与网络应用程序交互时共享状态。

  • @Dependent:如果未指定,则默认范围;这意味着一个对象存在只为一个客户端(bean)提供服务并且具有相同的生命周期作为该客户端(bean)。

  • @ConversationScoped:用户与 servlet 的交互,包括 JavaServer Faces应用程序。 session 范围存在于开发人员控制的边界将其扩展到多个长时间运行对话的请求。全部长期运行对话的范围仅限于特定的 HTTP Servlet session ,并且可能不跨越 session 边界。

回答你的问题,就像你可以在另一个bean中进行上下文和依赖注入(inject)一样,每个bean将独立管理自己的状态。根据您要扮演的角色,您必须定义其范围。

https://docs.oracle.com/javaee/7/tutorial/jaxrs-advanced004.htm https://docs.oracle.com/javaee/7/tutorial/cdi-basic008.htm#GJBBK

关于java - JAX_RS 资源和 EJB 生命周期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40530395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com