首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAX_RS资源与EJB生命周期不匹配

JAX_RS资源与EJB生命周期不匹配
EN

Stack Overflow用户
提问于 2016-11-10 14:46:12
回答 2查看 548关注 0票数 0

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

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

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

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

默认情况下,JAX-RS资源是在每个请求范围内管理的,这意味着为每个请求创建新的资源。

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

EN

回答 2

Stack Overflow用户

发布于 2016-11-10 20:57:50

JAX使用企业JavaBeans技术(企业bean)和上下文以及Java (CDI)的依赖注入。 通常,为了使JAX使用企业bean,需要用@Path对bean类进行注释,以将其转换为根资源类。您可以将@Path注释与无状态会话bean和单例POJO bean一起使用。 JAX和CDI的组件模型略有不同。默认情况下,JAX根资源类是在请求范围中管理的,指定范围不需要任何注释。带有@RequestScoped或@ApplicationScoped注释的CDI托管bean可以转换为JAX资源类。

为了让web应用程序使用注入另一个bean类的bean,bean需要能够在用户与应用程序的交互过程中保持状态。定义此状态的方法是给bean一个作用域。

  • @RequestScoped:用户在单个HTTP请求中与web应用程序的交互。
  • @SessionScoped:用户通过多个HTTP请求与web应用程序的交互。
  • @ApplicationScoped:在所有用户与web应用程序的交互中共享状态。
  • @:如果未指定任何对象,则为默认作用域;这意味着一个对象的存在正好为一个客户端(bean)服务,并且具有与该客户端(bean)相同的生命周期。
  • @ConversationScoped:用户与servlet的交互,包括JavaServer Faces应用程序。会话范围存在于开发人员控制的边界内,这些边界将其扩展到多个长期运行的会话请求中。所有长时间运行的会话的作用域都是特定的HTTP会话,可能不会跨越会话边界。

在回答您的问题时,就像您可以在另一个内部执行上下文和依赖项注入一样,每个bean将独立地管理自己的状态。根据您要执行的角色,您必须为其定义范围。

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

票数 1
EN

Stack Overflow用户

发布于 2016-11-11 06:45:55

EJB提供的是每个客户端请求和事务的一个专用线程。例如,您可以认为每个无状态bean都是一个线程实例,该实例实例化了等待服务请求的(注入)数据。当创建bean时,注入发生,并且在每个方法调用之后(在您的情况下是REST)将返回到池中进行重用或销毁。因此,REST“每个请求的默认生命周期”与SLSB生命周期之间是匹配的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40530395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档